欢迎光临散文网 会员登陆 & 注册

Power BI之DAX神功:第3卷第19回 ALLSELECTED函数返回迭代的行

2021-12-14 11:16 作者:孙兴华zz  | 我要投稿

这节课我们主要比较4个函数和理解两句话!

表名:Sheet1

一、Values函数 或 DISTINCT函数

关于这两个函数的区别详见《DAX神功》第1卷第9回

在参数为列时,这两个函数结果是相同的,除非你的表格不符合实时参照完整性。

度量值如下:

新建表1,通过ADDCOLUMNS添加列,迭代每一行,会成生一个行筛选器

同时,创建影子筛选器:张三、李四、王五、小张、小王、小李。因为度量值[allselected分数]中有allselected函数,所以删除了行筛选器同时激活影子筛选器后进行计算(切记:只是在计算时删除其它筛选器激活影子筛选器)。从这些名字中筛选出张三和李四,每一行都返回两人的分数和。

返回结果:

我们现在给新建表1加上占比:

返回结果:

二、ALL函数删除全部筛选器包含影子筛选器

如果我们将新建表1的Values改成ALL会发生怎样的结果?

返回结果:

这里我跟权威指南和国外文献的解释不同。我认为:

ADDCOLUMNS生成了行筛选器,同时也生成了影子筛选器,但是因为使用了ALL(Sheet1[姓名]),ALL函数将姓名列所有的筛选器进行了删除,其中也包含还没有被激活的影子筛选器。当allselected函数出场时,已经没有影子筛选器了,所以返回所有人分数之和:21

ALL函数是真的把所有筛选器都给删除了!它现在充当着Calculatetable的调节器

allselected函数只是在计算的时候,删除其它筛选器,激活影子筛选器,因为影子筛选器被ALL删除了,所以allselected函数没有可激活的影子筛选器。

三、Keepfilters函数会留下痕迹

《DAX神功》第1卷第17回 我们提到Keepfilters还有一种用法,就是为今天留下的伏笔

ADDColumns与SumX一样都是迭代函数,从第1卷第17回的伏笔可以看出,Keepfilters不仅是Calculate筛选器的调节器,同时也是迭代函数的调节器。

就好比,小猪扔了西瓜皮,大象帮着捡起来。

返回结果:

ADDCOLUMNS创建了行筛选器同时也创建了影子筛选器:张三、李四、王五、小张、小李、小王,但是被ALL函数全给删除了。Keepfilters函数只恢复了影子筛选器后进行计算,计算结果是张三和李四分数之和:3

ALL函数是真的把所有筛选器都给删除了!它现在充当着Calculatetable的调节器

allselected函数只是在计算的时候,删除其它筛选器,激活影子筛选器。由于ALL函数将行筛选器删除了,所以allselected函数的结果会显示在所有行。

总结:上面的两句话,我重复写了两遍(虽然略有差异),也是本节课重点!

《孙兴华讲PowerBI火力全开》PowerBI必学课程

https://www.bilibili.com/video/BV1qa4y1H7wp

《DAX神功》文字版合集:

https://www.bilibili.com/read/readlist/rl442274

《DAX神功》视频版合集:

https://www.bilibili.com/video/BV1YE411E7p3

PowerBI(DAX函数)、PowerQuery(M函数)、Python办公自动化、Python爬虫、Python数据分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等

https://www.bilibili.com/read/cv10222110

Power BI之DAX神功:第3卷第19回 ALLSELECTED函数返回迭代的行的评论 (共 条)

分享到微博请遵守国家法律