本文聊聊在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,可在微信公衆号後台回複"PowerBI",獲取《七天入門Power BI》電子書,幫你快速提升工作效率。
如果文章對你有幫助,别忘了點贊轉發哦。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!