這幾個示例,幫你深入理解RANKX排名
本文聊聊在PowerBI中如何進行各種類型的排名問題。
PowerBI中計算排名主要使用RANKX函數,關於該函數的具體語法,不再細說,可以查看該函數的官方文檔,也可以參照這個函數卡片:
知識星球每日函數卡片
下面通過幾個示例來看看它的用法。
假設數據模型為一個訂單表,以及對應的產品維度表和客戶維度表,產品維度表有產品名稱和產品類別。
下面分別按銷售額對各種維度進行排名。
銷售額= sum("訂單"[銷售額])
對全部產品按銷售額排序
首先寫一個RANKX的最經典、最常用的代碼,
排名= RANKX(ALL("產品"),[銷售額])
這樣各產品的排名計算出來了,不過總計行的排名沒有什麼意義,可以加個判斷條件不顯示總計,
排名=
IF(HASONEVALUE("產品"[產品名稱]),
RANKX(ALL("產品"),[銷售額]))
以後遇到這種情況直接用IF HASONEVALUE進行判斷就行了,本文後面的度量值都不再考慮總計問題,並且直接不再顯示總計。
上面的這個排名其實是絕對排名,無論選擇幾個產品,每個產品的排名是固定的。
按照所選的產品範圍來排序,就是相對排名,可以結合ALLSELECT函數來實現,
整體相對排名=
RANKX(ALLSELECTED("產品"),[銷售額])
這個是整體相對排名,那麼第一個排名也改為整體絕對排名,效果如下,
在類別內對各產品排名
如果再把產品類別加進來,並讓各產品在各自的類別內進行排名,同樣也分為類別內絕對排名和類別內相對排名,
類別中 產品絕對排名=
RANKX(ALL("產品"[產品名稱]),[銷售額])
類別中 產品相對排名=
RANKX(ALLSELECTED("產品"[產品名稱]),[銷售額])
按子類別排名
如果想知道每個類別整體的銷售情況排名,那麼就需要計算出每個類別的整體銷售額,度量值可以這樣寫,
按類別絕對排名=
RANKX(
ALL("產品"[產品類別]),
CALCULATE(
[銷售額],
ALLEXCEPT("產品","產品"[產品類別])
)
)
同理,有了上面的經驗,相對排名,把ALL替換成ALLSELECT即可,
按類別相對排名=
RANKX(
ALLSELECTED("產品"[產品類別]),
CALCULATE(
[銷售額],
ALLEXCEPT("產品","產品"[產品類別])
)
)
排名效果如下,
按兩個維度進行排名
上面是對各產品的銷售額進行排名,如果增加一個維度,比如按產品在每個城市的銷售額進行排名,
實際上是按照前兩列的笛卡爾積進行排名,度量值可以這樣寫,
產品 城市 綜合排名=
RANKX(
CROSSJOIN(
ALL("產品"[產品名稱]),
ALL("客戶"[客戶城市])
),
[銷售額]
)
總結
通過上面幾個例子,除了可以計算排名,更可以幫助你更深入的理解RANKX的用法:
對哪個維度進行排名,就構建一個對應的維度表,作為RANKX的第一個參數,動態就用ALLSELECTED;
按什麼排名,就寫對應的表達式,作為RANKX的第二個參數。
RANKX還有三個可選參數,其中第四個和第五個都很容易理解,而第三個參數相對難理解一點,不過並不常用,無須刻意去深入,遇到了問題可以隨時和我溝通。
以上幾個示例基本涵蓋了我們日常使用的大部分排名問題,可以通過觀察輸出的結果來理解度量值的寫法。
※在PowerBI中創建聯動切片器
※PowerBI 表格總計錯誤的終極解決方案
TAG:PowerBI星球 |