RANK

適用於:匯出數據行匯出數據表量值視覺計算

傳回指定分割區內目前內容的順位,依指定順序排序。 如果找不到相符項目,則 rank 為空白。

語法

RANK ( [<ties>][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

參數

詞彙 定義
ties (選擇性) 定義在繫結兩個以上的資料列時,如何處理排名。
如果指定,支援的值為 DENSE 或 SKIP。
如果省略:
- 預設值為 SKIP
relation (選擇性) 傳回輸出資料列的來源資料表運算式。
如果指定,則 <orderBy> 和 <partitionBy> 中的所有資料行都必須以其做為來源。
如果省略:必須明確指定
- <orderBy>。
- All <orderBy> 和 <partitionBy> 運算式都必須是完整資料行名稱,且來自單一資料表。
- 預設為 <orderBy> 和 <partitionBy> 中所有資料行的 ALLSELECTED()。
(選擇性)視覺圖形中的軸。 僅適用於視覺計算,並取代 <關聯>。
orderBy (選擇性) ORDERBY() 子句,其中包含定義每個分割區排序方式的資料行。
如果省略:必須明確指定
- <relation>。
- 預設會依 <relation> 中尚未在 <partitionBy> 中指定的每個資料行排序。
blanks (選擇性) 列舉,會定義排序時如何處理空白值。
支援的值為:
  • KEEP (預設值),其中數值的行為是空白值,會在零和負值之間排序。 字串的行為是空白值,會在所有字串之前排序,包括空字串。
  • 首先,不論是遞增還是遞減排序,開頭一律會排序空白。
  • 最後,不論是遞增還是遞減排序,結尾一律會排序空白。

注意,在個別運算式上指定 <blanks> 參數和 ORDERBY() 函式中的 blanks 時,個別 orderBy 運算式上的 <blanks> 會優先處理相關 orderBy 運算式,而未指定 <blanks> 的 orderBy 運算式則會接受父 Window 函式上的 <blanks> 參數。
partitionBy (選擇性) PARTITIONBY() 子句包含定義如何分割 <relation> 的資料行。
如果省略,<relation> 會視為單一分割區。
matchBy (選擇性) MATCHBY() 子句,其中包含定義如何比對資料及識別目前資料列的資料行。
reset (選擇性)僅適用於視覺計算。 指出計算是否重設,以及視覺圖形數據行階層的哪個層級。 接受的值包括:NONE、LOWESTPARENT、HIGHESTPARENT 或整數。 行為取決於整數符號:
- 如果零或省略,則計算不會重設。 相當於 NONE。
- 如果為正數,整數會識別從最高、與粒紋無關的數據行。 HIGHESTPARENT 相當於 1。
- 如果為負數,整數會識別從最低開始的數據行,相對於目前的粒紋。 LOWESTPARENT 相當於 -1。

傳回值

目前內容的 rank 編號。

備註

  • 每個 <orderBy>、<partitionBy> 和 <matchBy> 資料行都必須有對應的外部值,以下列行為來協助定義要操作的目前資料列:

    • 如果只有一個對應的外部資料行,則會使用其值。
    • 如果沒有對應的外部資料行,則:
      • RANK 會先將所有 <orderBy>、<partitionBy> 和 <matchBy> 資料行判斷為沒有對應的外部資料行。
      • 針對 RANK 的父內容中這些資料行現有值的每個組合,都會評估 RANK,並傳回資料列。
      • RANK 的最終輸出是排名數字。
  • 如果 <matchBy> 存在,則 RANK 會嘗試使用 <matchBy> 和 <partitionBy> 中的資料行,以識別目前資料列。

  • 如果 <orderBy> 和 <partitionBy> 內指定的資料行無法唯一識別 <relation> 中的每一個資料列,則兩個以上的資料列可能會有相同的排名,且排名會由繫結參數決定。

  • RANK 會針對總計資料列傳回空白值。 建議您徹底測試運算式。

  • RANK 不會與 RANKX 比較,因為 SUM 會與 SUMX 比較。

  • <reset> 只能用於視覺計算中,而且不能與 <orderBy> 或 <partitionBy> 搭配使用。 如果 <重設> 存在, <可以指定座標軸> ,但 <無法指定關聯> 。

範例 1 - 計算結果列

下列 DAX 查詢:

EVALUATE
ADDCOLUMNS(
    'DimGeography',
    "Rank",
    RANK(
    	DENSE,
    	'DimGeography',
    	ORDERBY(
    		'DimGeography'[StateProvinceName], desc,
    		'DimGeography'[City], asc),
        LAST,
    	PARTITIONBY(
    		'DimGeography'[EnglishCountryRegionName])))
ORDER BY [EnglishCountryRegionName] asc, [StateProvinceName] desc, [City] asc

傳回資料表,依其 StateProvinceName 和 City,以相同的 EnglishCountryRegionName 來排名每個地理位置。 空白 <orderBy> 資料行值會在結尾排序。

範例 2 - 視覺計算

下列視覺計算 DAX 查詢:

SalesRankWithinYear = RANK(DENSE, ORDERBY([SalesAmount], DESC), PARTITIONBY([CalendarYear]))

SalesRankAllHistory = RANK(DENSE, ORDERBY([SalesAmount], DESC))

建立兩個數據行,依每個月的總銷售額、每年內和整個歷程記錄來排名。

下列螢幕快照顯示視覺化矩陣和第一個視覺計算表示式:

DAX 視覺計算

INDEX
ORDERBY
PARTITIONBY
WINDOW
ROWNUMBER