Power BI之DAX神功:第3卷第19回 ALLSELECTED函数返回迭代的行
这节课我们主要比较4个函数和理解两句话!

一、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等等