數據可視化之DAX篇(二十二)一文搞懂Power BI中的排名問題


https://zhuanlan.zhihu.com/p/68384001

本文聊聊在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還有三個可選參數,其中第四個和第五個都很容易理解,而第三個參數相對難理解一點,不過並不常用,無須刻意去深入,遇到了問題可以隨時和我溝通。

以上幾個示例基本涵蓋了我們日常使用的大部分排名問題,可以通過觀察輸出的結果來理解度量值的寫法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM