計算排名

已完成

RANKX DAX 函式是特殊的迭代器函式,可用來計算排名。 其語法如下:

RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])

與所有迭代器函式類似,都必須傳入資料表和運算式。 選擇性地,您可以傳入排名值、設定順序方向,或決定如何在值相同時處理排名。

順序方向

順序方向為遞增或遞減。 在對有利項目 (例如收益值) 進行排名時,您很可能會使用遞減順序,來優先排列將最高收益。 對不利項目 (例如客戶申訴) 進行排名時,建議您使用遞增順序,讓「申訴次數最少的項目排到前面。 未傳入順序引數時,函式會使用 0 (零) (作為遞減順序)。

處理繫結

處理繫結時,可以採用跳過排名值或使用密集排名的方式,如此會使用繫結之後的下一個順位值。 未傳入繫結引數時,函式會使用 [跳過]。 在此單元的後續內容中,您將會有機會接觸每個繫結引數的範例。

建立排名量值

將下列量值新增至 Product 資料表:

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity]
)

Product Quantity Rank 量值新增至報表 [第 2 頁] 的資料表視覺效果。 資料表視覺效果會將自行車產品和顯示數量分組,而顯示數量則會依數量遞減排序產品。

RANKX 函式會逐一查看由 ALL DAX 函式所傳回的資料表。 ALL 函式用於傳回模型資料表中的所有資料列,或一或多個資料行中的值,而且其會「忽略所有的篩選條件」。 因此,在此情況下,函式會傳回由 Product 資料表中所有 Product 資料行值所組成的資料表。 RANKX 函式必須使用 ALL 函式,因為資料表視覺效果會依產品分組 (其為 Product 資料表的篩選條件)。

在以下資料表視覺效果中,請注意第 10 位有兩個產品繫結,而產品的下個排名為第 12 位。 此視覺效果是使用 Skipped 繫結引數的範例。

顯示標題為 Bike Sales 之資料表視覺效果的影像。其具有三個資料行:Product、Quantity 與 Product Quantity Rank。資料表列是依 Quantity 遞減排列。兩個產品都具有第 10 名的排名,且下一個產品是第 12 名。

接下來要輸入下列邏輯,以修改 Product Quantity Rank 量值定義來使用密集排名:

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity],
    ,
    ,
    DENSE
)

請注意,在資料表視覺效果中,已不再跳過排名。 在兩個繫結為第 10 位的產品後,下個排名為第 11 位。

顯示標題為 Bike Sales 之資料表視覺效果的影像。其具有三個資料行:Product、Quantity 與 Product Quantity Rank。資料表列是依 Quantity 遞減排列。兩個產品都具有第 10 名的排名,且下一個產品是第 11 名。

請注意,Product Quantity Rank 的資料表視覺效果總計為一 (1)。 這是因為所有產品的總計也列入排名。

影像顯示 Product Quantity Rank 的總計為 1。

產品總計不應列入排名,因此現在請使用下列邏輯來修改量值定義,除非篩選出單一產品,否則即傳回 BLANK:

Product Quantity Rank =
IF(
    HASONEVALUE('Product'[Product]),
    RANKX(
        ALL('Product'[Product]),
        [Quantity],
        ,
        ,
        DENSE
    )
)

顯示出產品 Product Quantity Rank 的總計為空白。

請注意,Product Quantity Rank 的總計現在為空白,這是透過使用 HASONEVALUE DAX 函式來測試 Product 資料表中的 Product 資料行在篩選內容中是否有單一值。 這是屬於各個產品群組的情形,而不適用於代表所有產品的總計值。

篩選內容和 HASONEVALUE 函式會在篩選內容的課程模組中加以介紹。