人生没有彩排
每一天都是现场直播

47、理解GROUPBY函数

GROUPBY函数与SUMMARIZE函数非常类似,都是用来做分组聚合的函数,但GROUPBY函数可能更符合平时所理解的分组操作。

因为GROUPBY函数的派生列参数中不提供任何计值上下文,它使用CURRENTGROUP函数来指代被分组的表在当前分组区间内的行,然后可以使用其他聚合函数对其进行聚合,这与PowerQuery中的分组操作基本一致,所以GROUPBY函数可能更符合平时所理解的分组操作。


语法和作用

语法:

GROUPBY (<table>, <groupBy_columnName>[, <groupBy_columnName>]…[, <name>, <expression>]…)

作用:对第一参数的表按指定的分组列进行分组,返回分组列的不重复组合形成的表,并可以往该表中添加派生列。

参数说明:

1、table,要进行分组的表,任意返回表的表达式

2、groupBy_columnName,要进行分组的列,必须来自第一参数的表或其扩展表

3、name,添加的派生列的列名

4、expression,添加的派生列的表达式,必须是对CURRENTGROUP函数返回的当前分组区间的表的聚合,并且不能嵌套

注意事项:

1、分组列必须来自第一参数的表,否则会报错。

2、若第一参数的表存在扩展表,那么第二参数的分组列可以是其扩展表上的任意列。

3、派生列的表达式中,CURRENTGROUP函数必须要直接作为聚合函数的第一参数,其支持的聚合函数有:AVERAGEX、COUNTAX、COUNTX、GEOMEANX、MAXX、MINX、PRODUCTX、STDEVX.S、STDEVX.P、SUMX、VARX.S、VARX.P


辅助理解的例子

首先,用到的数据源只有一张表,如下图所示:

img

1、不添加派生列,使用GROUPBY函数返回分组列的不重复组合形成的表,如下图所示:

由于没有添加派生列,此时GROUPBY函数的行为就是从第一参数的表中提取分组列参数所指定的字段,然后进行去重。为方便理解,如果用其他函数来表达的话,其行为等价于以下表达式:

GROUPBY('订单','订单'[地区],'订单'[产品])

等价于:

DISTINCT(SELECTCOLUMNS('订单','订单'[地区],'订单'[产品]))

2、GROUPBY函数的派生列参数中不提供任何计值上下文,它使用CURRENTGROUP函数来指代被分组的表在当前分组区间内的行,然后可以使用其支持的聚合函数对其进行迭代聚合,如下图所示:

其计值流程如下:

3、GROUPBY函数的派生列参数中,CURRENTGROUP函数必须要直接作为聚合函数的第一参数,否则会报错,如下图所示:

4、不支持对CURRENTGROUP函数返回的表进行行上下文转换,如下图所示:

5、由于GROUPBY函数可以使用CURRENTGROUP函数来获取当前分组区间的数据,所以特别适合要对无数据沿袭的派生列进行聚合的场景,而这是SUMMARIZE函数所做不到的,比如以下案例:

由于最大销量这个派生列在模型中不存在,所以SUMMARIZE函数的派生列参数中是引用不到它的,因此也就无法进行下一步的操作。而这时改用GROUPBY函数就可以很容易的实现这个目的,如下图所示:


总结

GROUPBY函数和SUMMARIZE函数都能进行分组聚合,但GROUPBY函数的行为更符合平时所理解的分组操作,因此特别适合那些对派生列指标进行聚合的场景,而这是SUMMARIZE函数所做不到的。

未经允许不得转载:夕枫 » 47、理解GROUPBY函数
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论