# Rank - 圖表函數

Rank() 評估運算式中圖表的列，並且對每一列，顯示在運算式中評估之維度的值的相對位置。評估運算式時，該函數會比較該結果與包含目前資料行區段的其他列所產生的結果，並傳回區段內目前列的排名。

[Rank function](https://play.vidyard.com/21eZKs36KWVQPaL6nxT9Tt)

資料行區段

資料行區段

資料行區段 ![顯示資料行區段的表格](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/table_column_segments.png)

針對圖表而非表格，目前的資料行區段會在其出現於圖表的連續表同等表格時加以定義。

語法：

Rank([TOTAL] expr[, mode[, fmt]])

傳回的資料類型： 雙值

引數：

引數

| 引數 | 描述 |
| --- | --- |
| expr | 包含待測量之資料的運算式或欄位。 |
| mode | 指定函數結果的數字表示法。 |
| fmt | 指定函數結果的文字表示法。 |
| TOTAL | 如果圖表為單一維度或運算式前面加上 TOTAL 限定詞，則沿著整個資料行計算該函數。 如果表格或同等表格有多個垂直維度，則目前資料行區段僅會包含在所有維度資料行中與目前列有相同值的列 (顯示欄位間排序順序之最後一個維度的資料行除外)。<br><br>[定義彙總範圍](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm) |

傳回的排名都是雙值，在這種情況下，各個列都會有唯一的排名，這是介於 1 與目前資料行區段中的列數兩者之間的整數。

多個列有相同的排名時，可以使用 mode 和 fmt 參數控制文字和數字表示法。

###### mode

第二個引數 mode 可控制下列值：

modemode 範例

| 值 | 描述 |
| --- | --- |
| 0 (預設) | 如果共用群組中所有的排名都落在整個排名中間值下半部，所有列將得到共用群組的最低排名。<br><br>如果共用群組中所有的排名都落在整個排名中間值上半部，所有列將得到共用群組的最高排名。<br><br>如果共用群組中的排名落在整個排名的中間值，所有列的值將相當於整個資料行區段中最高與最低排名兩者的平均。 |
| 1 | 所有列的最低排名。 |
| 2 | 所有列的平均排名。 |
| 3 | 所有列的最高排名。 |
| 4 | 第一列的最低排名，然後每列遞增 1。 |

###### fmt

第三個引數 fmt 可使用下列值：

fmtfmt 範例

| 值 | 描述 |
| --- | --- |
| 0 (預設) | 低值 - 所有列的高值 (例如 3 - 4)。 |
| 1 | 所有列的低值。 |
| 2 | 第一列的低值，在後續列上則空白。 |

mode 4 與 fmt 2 的列順序取決於圖表維度的排序順序。

範例與結果：

從維度 Product 和 Sales 建立兩個視覺化，再從 Product 和 UnitSales 建立另一個視覺化。如下表所示新增量值。

排名範例

| 範例 | 結果 |
| --- | --- |
| 範例 1。建立一個具有維度 `Customer` 和 `Sales` 及量值 `Rank(Sales)` 的表格 | 結果取決於維度的排序順序。如果表格針對 Customer 排序，該表格會列出 Astrida 的所有 Sales 值，然後列出 Betacab，以此類推。Rank(Sales) 的結果會顯示 Sales 值 12 為 10、Sales 值 13 為 9，以此類推，而針對 Sales 值 78 傳回的排名值為 1。下一個資料行區段是從 Betacab 開始，而區段中的第一個 Sales 值是 12。其 Rank(Sales) 排名值指定為 11。<br><br>如果表格針對 Sales 排序，資料行區段會包含 Sales 值和對應的 Customer。因為有兩個 Sales 值都是 12 (Astrida 和 Betacab)，針對該資料行區段，Customer 每個值的 Rank(Sales) 值是 1-2。這是因為 Sales 值 12 有兩個 Customer 值。若有 4 個值，所有列的結果就會是 1-4。這顯示了引數 fmt 預設值 (0) 結果的外觀。 |
| 範例 2。以維度 [Customer] 取代 [Product]，並新增量值 `Rank(Sales,1,2)` | 這樣系統會針對每個資料行區段的第一列傳回 1，並讓所有其他列保留空白，因為引數 mode 和 fmt 分別設為 1 和 2。 |

範例 1 的結果，表格針對 Customer 排序：

結果表格

| Customer | Sales | Rank(Sales) |
| --- | --- | --- |
| Astrida | 12 | 10 |
| Astrida | 13 | 9 |
| Astrida | 20 | 8 |
| Astrida | 22 | 7 |
| Astrida | 45 | 6 |
| Astrida | 46 | 5 |
| Astrida | 60 | 4 |
| Astrida | 65 | 3 |
| Astrida | 70 | 2 |
| Astrida | 78 | 1 |
| Betcab | 12 | 11 |

範例 1 的結果，表格針對 Sales 排序：

結果表格

| Customer | Sales | Rank(Sales) |
| --- | --- | --- |
| Astrida | 12 | 1-2 |
| Betacab | 12 | 1-2 |
| Astrida | 13 | 1 |
| Betacab | 15 | 1 |
| Astrida | 20 | 1 |
| Astrida | 22 | 1-2 |
| Betacab | 22 | 1-2 |
| Betacab | 24 | 1-2 |
| Canutility | 24 | 1-2 |

` `

範例中使用的資料：

`ProductData:` `Load * inline [` `Customer|Product|UnitSales|UnitPrice` `Astrida|AA|4|16` `Astrida|AA|10|15` `Astrida|BB|9|9` `Betacab|BB|5|10` `Betacab|CC|2|20` `Betacab|DD|0|25` `Canutility|AA|8|15` `Canutility|CC|0|19` `] (delimiter is '|');` ` ``Sales2013:``crosstable (Month, Sales) LOAD * inline [``Customer|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec``Astrida|46|60|70|13|78|20|45|65|78|12|78|22``Betacab|65|56|22|79|12|56|45|24|32|78|55|15``Canutility|77|68|34|91|24|68|57|36|44|90|67|27``Divadip|57|36|44|90|67|27|57|68|47|90|80|94``] (delimiter is '|');`` `

## 瞭解更多資訊

* [Sum - 圖表函數](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/BasicAggregationFunctions/sum.htm)