Power BI之DAX神功:第3卷第9回 切片器實現(xiàn)或(or)條件與反向篩選
很多網(wǎng)友反饋,《The Definitive Guide to DAX》與各大平臺關(guān)于此知識點的文章中的代碼在實際測試中遇到了問題。我們都用倚天劍,他們用峨眉劍法,我用太極劍法,兵器相同,武功招式不同。書中寫了OR1、OR2、OR3但是都沒往矩陣上,你可以按它的方法放到矩陣上看看,測試能否成功。(我沒測過,我不清楚,以你實際測試結(jié)果為準)
我今天要講的內(nèi)容,只需要你知道,切片器的字段來自哪張表:)問題就全解決了
我們直奔主題,講我的方法:

PS:我用一張表舉例,您多張表也沒有問題。但是多張表時,你表與表之間要符合1對多關(guān)系
切片器默認情況下使用的and關(guān)系,例如:篩選一班男生,結(jié)果是:一班 and 男生

如果我們想實現(xiàn)OR關(guān)系,例如:一班同學(xué) or?所有男生
如果我想篩選? 一班 or 男生? 怎么處理?

方法一:99.99%情況下都用這種方法,缺點:當(dāng)切片器內(nèi)容較多時,速度會下降。
// 你能把切片器搞出100個選項來,你也是人才了。我只是幼兒園畢業(yè),我在匯報時,從20個選項中選擇1個都要找?guī)酌耄?00選1或100選N,我會崩潰的。但是100個切片器選項并不會影響太多速度,要影響速度至少要數(shù)千甚至上萬個選項。那是婆婆了,萬里挑一:)
【度量值】總分 = sum(Sheet1[分數(shù)])
【新建表】性別 = VALUES(Sheet1[性別])
【新建表】班級 = VALUES(Sheet1[班級])?
注意:新建表不要與原始表之間發(fā)生關(guān)系,新建表就是切片器選項

度量值:
原理:
?'Sheet1'[班級] in VALUES('班級'[班級])? 等同于??'Sheet1'[班級] in {"一班","三班"}
而?{"一班","三班"}就相當(dāng)于我們在切片器上的選擇。
即可實現(xiàn)切片器or關(guān)系:

其中不必新建兩張表,一張表就可以搞定:
【新建表】笛卡兒積表 = CROSSJOIN(ALL(Sheet1[性別]),ALL(Sheet1[班級]))

兩張表不建立連線關(guān)系:


很多小伙伴有這樣一個需求,當(dāng)只選擇性別切片器時,例如選擇男,就篩選所有男生,如下圖所示:

如果只篩選班級,例如選擇一班,就只篩選一班人員,如下圖所示:

當(dāng)我兩個切片器都使用時,讓切片器之間實現(xiàn)OR關(guān)系。
原理:
<1>當(dāng)?shù)芽▋悍e表性別列被篩選,但是笛卡兒積表班級列未被篩選時,返回性別篩選的結(jié)果。
<2>當(dāng)?shù)芽▋悍e表班級列被篩選,但是笛卡兒積表性別列未被篩選時,返回班級篩選的結(jié)果。
<3>否則,返回度量值or1改
方法二:SUMMARIZE代替CROSSJOIN。
友情提示:速度是虛無縹緲的事情,信則有,不信則無。與其追求優(yōu)化不如升級電腦,升級電腦也無效時,不如換軟件。100萬行的Excel用M函數(shù)或DAX函數(shù)優(yōu)化的再好都會很慢,用SQL或Pandas等處理就是幾秒的事情。
我們打游戲時,你用木棍打喪尸,你走位再好,也不如有重裝備打起來爽,你裝備再好,也不如開著飛機扔炸彈來得爽。
【新建表】summzrize表 = SUMMARIZE('Sheet1',Sheet1[性別],'Sheet1'[班級])
//?SUMMARIZECOLUMNS也可以

兩張表之間沒有連線關(guān)系:

我們這次直接照著OR1升級版的度量值寫:

最后一個問題:切片器反向篩選
有很多網(wǎng)友發(fā)消息問我,網(wǎng)上看的文章,好多贊,而且各大平臺都有,發(fā)文章的人也是PowerBI界的泰山北斗,但是自己照著抄就是不對。因為他提供的代碼就不對,并不是能力問題,人家肯定會,我是以免費傳播知識為目的,而對方是以你關(guān)注他某某號為目的。你測試不成功,就會關(guān)注他某某號,某某號會定期有廣告,這條路線就這樣形成了。
《DAX神功》第3卷第8回 Except函數(shù)要求兩張表具有相同列,且順序相同,數(shù)據(jù)類型相同。你觀察代碼符合這個語法規(guī)則不?接下來我講一下能運行的代碼:
【新建表】班級?= VALUES(Sheet1[班級])

兩張表之間沒有連線關(guān)系:

// 如果班級表中的班級列被篩選,我們就返回Sheet1表班級列去重后的全部元素除去在切片器上選擇的班級后篩選的【總分】。否則返回【總分】。
現(xiàn)在我篩選一班時,會自動篩選出除了一班以外的班級:


孫興華講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