#Powerbi 10分鐘,理解 Rankx 排名函數

2023-07-14 12:00:33

一:本文思維導圖及範例資料圖

1.1思維導圖

二:度量值範例

2.1 函數簡介

RANKX 首先為的每一行計值表示式,將結果臨時儲存為一個值列表。然後在當前篩選上下文中計值,將得到的結果與列表中的值進行比較,根據排名規則和的設定,返回最終排名。

2.2 產品排名(稠密)度量值

這個公式使用RANKX函數計算每個產品的銷售排名。它使用稠密排名,這意味著當有相同值時,排名將緊密排列。
- 第一個引數`ALL('銷售模擬表'[產品])`是一個表,它定義了要進行排名的資料集。在這種情況下,我們使用`ALL`函數來移除任何篩選器,以便在整個`'銷售模擬表'[產品]`列中計算排名。
- 第二個引數`[產品銷量]`是一個表示式,它返回每行的產品銷量。RANKX函數將使用這個表示式的值來計算排名。
- 第三個引數被省略了。這意味著RANKX函數將使用第二個引數`[產品銷量]`的值作為要查詢排名的值。
- 第四個引數`DESC`指定排名的順序。在這種情況下,我們使用降序排名。
- 第五個引數`DENSE`定義了當有相同值時如何確定排名。在這種情況下,我們使用稠密排名。
整個公式被包含在一個`IF`函數中,它檢查是否只選擇了一個產品。如果只選擇了一個產品,那麼公式將返回該產品的排名。否則,整個公式的結果為空。

產品排名(稠密) = 
IF (
    HASONEVALUE ( '銷售模擬表'[產品] ),
    RANKX (
        ALL ( '銷售模擬表'[產品] ),   ---第一引數,table,表或者返回表的表示式
        [產品銷量],   ---第二引數,expression,沿著table每行計值的表示式
        ,   ---value,標量值,指單一的數值,可以是數位、數量、文字、日期或者布林值
        DESC,   ---排序依據,
        DENSE   ---處理同排名的依據,skip,稀疏排名,sense,稠密排名
    )
)

2.3  產品排名(稀疏)(HASONEVALUE)

 同上,只是這裡沒有選擇 TIES 引數,所以預設為SKIP引數

產品排名(稀疏)(HASONEVALUE) = 
IF (
    HASONEVALUE ( '銷售模擬表'[產品] ),
    RANKX (
        ALL ( '銷售模擬表'[產品] ),
        [產品銷量],
        ,
        DESC
    )
)

 2.4  產品排名(稀疏)(SELECTEDVALUE)

這個公式使用RANKX函數計算每個產品的銷售排名。它使用跳過排名,這意味著當有相同值時,排名將跳過相同值的數量。

  • 第一個引數ALL('銷售模擬表'[產品])是一個表,它定義了要進行排名的資料集。在這種情況下,我們使用ALL函數來移除任何篩選器,以便在整個'銷售模擬表'[產品]列中計算排名。
  • 第二個引數[產品銷量]是一個表示式,它返回每行的產品銷量。RANKX函數將使用這個表示式的值來計算排名。
  • 第三個引數被省略了。這意味著RANKX函數將使用第二個引數[產品銷量]的值作為要查詢排名的值。
  • 第四個引數DESC指定排名的順序。在這種情況下,我們使用降序排名。
  • 第五個引數SKIP定義了當有相同值時如何確定排名。在這種情況下,我們使用跳過排名。

整個公式被包含在一個IF函數中,它檢查是否只選擇了一個產品。如果只選擇了一個產品,那麼公式將返回該產品的排名。否則,整個公式的結果為空。

與我們上面的公式不同,這個公式使用SELECTEDVALUE函數來檢查是否只選擇了一個產品。如果只選擇了一個產品,SELECTEDVALUE函數將返回該產品的值。否則,它將返回空值。

我們使用ISBLANK函數來檢查SELECTEDVALUE函數的返回值是否為空。如果返回值為空,那麼整個公式的結果也為空。否則,我們使用RANKX函數計算產品的排名。

產品排名(稀疏)(SELECTEDVALUE) = 
IF (
    ISBLANK (
        SELECTEDVALUE ( '銷售模擬表'[產品] )
    ),
    BLANK (),
    RANKX (
        ALL ( '銷售模擬表'[產品] ),
        [產品銷量],
        ,
        DESC,
        SKIP
    )
)

2.5  可見排名

有時我需要只統計當前可見的產品排名,那麼,只需要將上方的ALL更改為ALLSELECTED即可

產品排名(稀疏)_只統計可見排名 = 
IF (
    ISBLANK (
        SELECTEDVALUE ( '銷售模擬表'[產品] )
    ),
    BLANK (),
    RANKX (
        ALLSELECTED ( '銷售模擬表'[產品] ),
        [產品銷量],
        ,
        DESC,
        SKIP
    )
)

 比如,這裡,我們只選擇了A,B,C,F四個產品,那麼排名邏輯就會只排名現在已經被選擇的產品,而前面的度量值會按所有產品進行排名。

 

三:注意事項

不要忘記ALL函數以及第二引數CALCULATE。

其他注意事項,後續博主使用中如有問題,會單獨開文羅列。

 

以上,如果本文有幫到你,希望點贊支援一下。感謝!