PowerBI中利用DAX分组的几种方式

教育   2024-10-14 12:04   河南  

在数据分析中,对数据进行分组是一种常见的操作,它可以帮助我们更好地理解和分析数据。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中,对数据进行灵活的分组。每种方式都有其适用的场景和优缺点。

在实际应用中,根据具体的数据特点和分析目标,选择最适合的分组方法就好~




PowerBI星球的最新版内容合辑,值得你收藏学习:
「PowerBI星球」内容合集


如果你想深入学习Power BI,欢迎加入PowerBI星球学习社群,获取更多学习资源,和6k+ 深度学习者一起精进~

PowerBI星球
海量干货,帮你轻松上手 Power BI
 最新文章