Power BI之DAX神功:第3卷第19回 ALLSELECTED函數(shù)返回迭代的行
這節(jié)課我們主要比較4個函數(shù)和理解兩句話!

一、Values函數(shù) 或 DISTINCT函數(shù)
關(guān)于這兩個函數(shù)的區(qū)別詳見《DAX神功》第1卷第9回
在參數(shù)為列時,這兩個函數(shù)結(jié)果是相同的,除非你的表格不符合實時參照完整性。
度量值如下:
新建表1,通過ADDCOLUMNS添加列,迭代每一行,會成生一個行篩選器
同時,創(chuàng)建影子篩選器:張三、李四、王五、小張、小王、小李。因為度量值[allselected分?jǐn)?shù)]中有allselected函數(shù),所以刪除了行篩選器同時激活影子篩選器后進(jìn)行計算(切記:只是在計算時刪除其它篩選器激活影子篩選器)。從這些名字中篩選出張三和李四,每一行都返回兩人的分?jǐn)?shù)和。
返回結(jié)果:

我們現(xiàn)在給新建表1加上占比:
返回結(jié)果:

二、ALL函數(shù)刪除全部篩選器包含影子篩選器
如果我們將新建表1的Values改成ALL會發(fā)生怎樣的結(jié)果?
返回結(jié)果:

這里我跟權(quán)威指南和國外文獻(xiàn)的解釋不同。我認(rèn)為:
ADDCOLUMNS生成了行篩選器,同時也生成了影子篩選器,但是因為使用了ALL(Sheet1[姓名]),ALL函數(shù)將姓名列所有的篩選器進(jìn)行了刪除,其中也包含還沒有被激活的影子篩選器。當(dāng)allselected函數(shù)出場時,已經(jīng)沒有影子篩選器了,所以返回所有人分?jǐn)?shù)之和:21
ALL函數(shù)是真的把所有篩選器都給刪除了!它現(xiàn)在充當(dāng)著Calculatetable的調(diào)節(jié)器
allselected函數(shù)只是在計算的時候,刪除其它篩選器,激活影子篩選器,因為影子篩選器被ALL刪除了,所以allselected函數(shù)沒有可激活的影子篩選器。
三、Keepfilters函數(shù)會留下痕跡
《DAX神功》第1卷第17回 我們提到Keepfilters還有一種用法,就是為今天留下的伏筆

ADDColumns與SumX一樣都是迭代函數(shù),從第1卷第17回的伏筆可以看出,Keepfilters不僅是Calculate篩選器的調(diào)節(jié)器,同時也是迭代函數(shù)的調(diào)節(jié)器。

就好比,小豬扔了西瓜皮,大象幫著撿起來。
返回結(jié)果:

ADDCOLUMNS創(chuàng)建了行篩選器同時也創(chuàng)建了影子篩選器:張三、李四、王五、小張、小李、小王,但是被ALL函數(shù)全給刪除了。Keepfilters函數(shù)只恢復(fù)了影子篩選器后進(jìn)行計算,計算結(jié)果是張三和李四分?jǐn)?shù)之和:3
ALL函數(shù)是真的把所有篩選器都給刪除了!它現(xiàn)在充當(dāng)著Calculatetable的調(diào)節(jié)器
allselected函數(shù)只是在計算的時候,刪除其它篩選器,激活影子篩選器。由于ALL函數(shù)將行篩選器刪除了,所以allselected函數(shù)的結(jié)果會顯示在所有行。
總結(jié):上面的兩句話,我重復(fù)寫了兩遍(雖然略有差異),也是本節(jié)課重點!

《孫興華講PowerBI火力全開》PowerBI必學(xué)課程
https://www.bilibili.com/video/BV1qa4y1H7wp
《DAX神功》文字版合集:
https://www.bilibili.com/read/readlist/rl442274
《DAX神功》視頻版合集:
https://www.bilibili.com/video/BV1YE411E7p3
PowerBI(DAX函數(shù))、PowerQuery(M函數(shù))、Python辦公自動化、Python爬蟲、Python數(shù)據(jù)分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等
https://www.bilibili.com/read/cv10222110