在数据分析中,对数据进行分组是一种常见的操作,它可以帮助我们更好地理解和分析数据。Power BI中可使用DAX来实现各种分组。文本以PowerBI星球案例模型为例,通过不同的分组场景来看看分别适合用哪些DAX函数。
1. 使用数学函数
如果想将每行的订单按200为一段进行分组,比如划分为[0-200)、[200-400)、[400-600)……,对于这种有规律的分组,可以直接用数学函数来实现,对于上面的需要,可以添加计算列:
分组 =
VAR X=ROUNDDOWN([销售额]/200,0)
VAR Y=ROUNDUP([销售额]/200,0)
RETURN
IF(
X=Y,
X*200&"-"&(X+1)*200,
X*200&"-"&Y*200
)
数据分组常用的函数有ROUNDUP、ROUNDDOWN、CEILING、FLOOR等数学函数。
这种方式的优点是对于数值字段的固定长度分组,可以实现自动化的区间划分,无论有多少个分组,都可以一个公式完成。
不过对于不规律的区间划分,它就难以实现了,就需要利用下面的方法。
2. 使用逻辑判断函数
对于不规律的区间划分,可以利用IF、SWITCH等逻辑判断函数,根据某个字段的值来返回不同的分组结果。
比如如果想让销售额不超过100的订单返回“低于100”、销售额在100和300之间的返回“100-300”,300和600之间的返回“300-600”,其他的销售额返回“600以上”。
这种需求用SWITCH写法如下:
关于SWITCH的用法请参考:掌握SWITCH函数的秘诀:一篇文章就够了
这种方式的优点是简单直观,易于理解和实现,并且可以灵活地根据不同的条件进行分组。
但是当分组条件较多时,公式可能会变得较长,难以维护。
接下来的方法才是更通用的方法。
3、使用分组表和CALCULATE+FILTER函数
按上面的需求先构造一个分组表如下:
关于制作辅助表的方式可参考:Power BI 辅助表制作方式汇总
分组表不需要与其他表建立关系,然后通过CALCALATE+FILTER函数来建立计算列如下:
分组 = CALCULATE( MAX('分组表'[分组]), FILTER( '分组表', '分组表'[最小值]<[销售额]&&'分组表'[最大值]>=[销售额] ) )
关于CALCULATE+FILTER的用法也可以参考:RELATED、LOOKUPVALUE报错?它才是最通用的函数
这种方式用到的公式稍微复杂一点,其实也只是PowerBI最常用最基础的公式,灵活掌握它可以搞定很多数据分析需求,另外这个种方式需要构造分组表。
虽然相对复杂一些,但是它更适合各种情况,特别是数据字段分组较多、无特定规律的情况,并且便于后期的维护。
以上分组都是用计算列的方式,其实对于数据量大的情况,不建议用计算列,建议用度量值来实现。以上计算列的公式,用度量值也可以同样的思路来实现。
其实大多数情况下,分组的目的是为了分组统计,这种情况更适合用度量值来解决了。
按第三种方式做好分组表,如果想统计每个分组的销售额总计分别是多少,这种需求,不需要建立计算列,只需要写一个度量值:
分组销售额 =
CALCULATE(
SUM('订单表'[销售额]),
FILTER(
ALL('订单表'),
'订单表'[销售额]>MAX('分组表'[最小值])&&'订单表'[销售额]<=MAX('分组表'[最大值])
)
)
用分组表的分组作为上下文,这个度量值就可以计算出每个分组的销售额合计。
因为有分组表,我们可以很方便地对分组进行按列排序,显示特定的顺序。
以上度量值的计算结果可能总计会有“错误”,这种情况只需要用这个方法修正一下就可以了:Power BI 总计错误的终极解决方案
通过以上几种方式,我们可以使用DAX在Power BI中,对数据进行灵活的分组。每种方式都有其适用的场景和优缺点。
在实际应用中,根据具体的数据特点和分析目标,选择最适合的分组方法就好~
如果你想深入学习Power BI,欢迎加入PowerBI星球学习社群,获取更多学习资源,和6k+ 深度学习者一起精进~