Power BI之DAX神功:第2卷第5回 RankX函數(shù)前兩個參數(shù)的秘密
關(guān)于RankX函數(shù)在《孫興華講PowerBI火力全開》筆記第25課做過詳細講解,今天我們只聊原理。
假設有這樣一張表:

我們先來計算一個ABC三個商品的降序排名:
【度量值】總銷售 = Sum(Sheet1[銷售])?
【度量值】排名1 = RANKX(ALL(Sheet1),[總銷售])?
【度量值】排名2 = RANKX(ALL(Sheet1[商品]),[總銷售])?

工作原理:
【度量值】排名1 = RANKX(ALL(Sheet1),[總銷售])?

【度量值】排名2?=?RANKX(ALL(Sheet1[商品]),[總銷售])?

在這個案例上,度量值【排名1】和【排名2】我們并沒有看出區(qū)別,那我們換一個案例:

在之前的課程中,我們提到ALL函數(shù)在Calculate里面是調(diào)節(jié)器,在Filter(ALL)、ankx(ALL) 等迭代函數(shù)中的第1參數(shù)中,它是表函數(shù)。
既然是表函數(shù),就在新建表中測試一下,這是《孫興華講PowerBI火力全開》經(jīng)典語句。


你會發(fā)現(xiàn)ALL函數(shù)跟我們的Values函數(shù)很相似,
ALL(表)和Values(表)都是復制這張表
ALL(列)和Values(列)都是返回這列去重后的單列表
那能不能用Values呢?不行!
為什么?你還記得嗎?
ALL(表) 指這張表中所有列都不能篩選
ALL(列) 指這個表中的指定列不能篩選,其它列可以。
Values并沒有取消表或列的篩選的功能。

我們嘗試使用Values操作一下:
【度量值】總銷售2 = sum(Sheet2[銷售])
【度量值】排名3 = RANKX(Values(Sheet2),[總銷售2])
【度量值】排名4 = RANKX(Values(Sheet2[商品]),[總銷售2])

明顯都是錯的!
這個原理我們通過ALL函數(shù)來講,你就明白為什么不能使用Values函數(shù)了:
現(xiàn)在我們換成ALL函數(shù)
【度量值】總銷售2 = sum(Sheet2[銷售])
【度量值】排名3 = RANKX(all(Sheet2),[總銷售2])
【度量值】排名4 = RANKX(all(Sheet2[商品]),[總銷售2])

很明顯,【排名3】是錯誤的,那為什么呢?
我們看看【排名3】和【排名4】的工作原理:
【度量值】排名3 = RANKX(all(Sheet2),[總銷售2])

【腦子里想像的場景】當我們在矩陣上使用行標題為商品時,相當于是分組聚合,我們的銷售是可以按商品聚合的,但是排名不行,以A商品為例,第1名和第4名,請問加在一起是多少名?這就是不能使用ALL(表)的原因,因為我表中的商品有重復!
RankX并不是由矩陣篩選的,而是由第1參數(shù)生成的那張表迭代每一行產(chǎn)生的排名。
說人話:就是相當于Vlookup把ABC的排名V過來,所以我們要限制商品列不能篩選RankX生成的度量值,因為Values函數(shù)生成的表本身無法限制篩選,故不能使用Values函數(shù)。

如上圖所示:A和B商品顯示1并不是第1名的意思,而是排名不能在這里重復計算,C商品排名就是3所以就顯示3,但是A和B商品的排名無法體現(xiàn),故顯示為1,同使用Values函數(shù)一樣的道理。
Ps: 如果我們想看每條記錄的排名,這么寫是沒錯的。原理我們已經(jīng)通過【排名3】生成的示意圖展示了。

【度量值】排名4 = RANKX(all(Sheet2[商品]),[總銷售2])

矩陣的行標題,只是將RankX產(chǎn)生的排名體現(xiàn)出來,這個排名在第一參數(shù)表中就已經(jīng)生成了。

同理,度量值排名4也不能對每條記錄進行排名,如下圖:

因為【排名4】只限制了商品列不能篩選,序號列是可以篩選,所以仍然出錯,全部顯示為1。
其實,RankX應該怎么寫,并沒有標準答案,而是你想做什么,由你的業(yè)務需求決定的。
RankX的知識還有很多,未來幾節(jié)課我們會一直講這個函數(shù)和關(guān)于RankX的答網(wǎng)友問。請大家耐心等待。

《孫興華講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函數(shù))、PowerQuery(M函數(shù))、Python辦公自動化、Python爬蟲、Python數(shù)據(jù)分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等
https://www.bilibili.com/read/cv10222110