# Rank - 图表函数

Rank() 用于在表达式中计算图表的行数，并且对于每一行显示在表达式中计算的维度值的相对位置。当计算表达式的值时，该函数将结果与包含当前列片段的其他行的结果比较，然后返回片段中当前行的排名。

对于非表格图表，将定义当前列段数据，就像显示在图表的垂直表等同物中一样。

语法：

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

返回数据类型： 双

参数：

* expr: 表达式或字段包含要度量的数据。

* mode: 指定函数结果的数字呈现形式。

* fmt: 指定函数结果的文本呈现形式。

* TOTAL:如果图表是一维或如果表达式前面有 TOTAL 限定符，则该函数用于评估整列。 如果表格或表格等同物有多个垂直维度，当前列段数据将只包括值与所有维度列的当前行相同的行，但按内部字段排序显示最后维度的列除外。

  [定义聚合范围](https://help.qlik.com/zh-CN/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/ChartFunctions/define-aggregation-scope.htm)

排行以对偶值形式返回，在每一行拥有一个唯一排行的情况下，排行是一个介于 1 和当前列段数据行数之间的整数。

当多行共享同一个排名时，文本和数字呈现形式可使用 mode 和 fmt 参数进行控制。

###### mode

第二个参数 mode 可获取以下值：

第二参数值

| 值 | 说明 |
| --- | --- |
| 0（默认） | 如果共享组中的全部排行处在整个排行中间值的下半部分，全部行都获得共享组的最低排行。<br><br>如果共享组中的全部排行处在整个排行中间值的上半部分，全部行都获得共享组的最高排行。<br><br>如果共享组中的排行跨越整个排行的中间值，全部行都获得整个列片断中最高和最低排行的平均值。 |
| 1 | 全部行的最低排行。 |
| 2 | 全部行的平均排行。 |
| 3 | 全部行的最高排行。 |
| 4 | 第一行的最低排行，然后每一行都提高一位。 |

###### fmt

第三个参数 fmt 可获取以下值：

第三参数值

| 值 | 说明 |
| --- | --- |
| 0（默认） | 全部行中的低值 - 高值（如 3 - 4）。 |
| 1 | 全部行的高值。 |
| 2 | 第一行的低值，以后各行都为空白。 |

mode 4 和 fmt 2 的行顺序由图表维度的排序决定。

示例和结果：

使用维度 Product 和 Sales 创建两个图表，使用 Product 和 UnitSales 创建其他可视化。添加度量，如下表所示。

示例 1:

使用维度 `Customer` 和 `Sales` 以及度量 `Rank(Sales)` 创建表格。

结果取决于维度的排序顺序。如果按 Customer 对表格排序，表格会列出 Astrida 的所有 Sales 值，然后列出 Betacab 的所有同类型值，以此类推。 Sales 值为 12 的 Rank(Sales) 结果将显示 10，Sales 值为 13 的相同字段结果将显示 9，以此类推，并且对 Sales 只为 78 的排行值返回 1。下一个列段数据从 Betacab 开始，其中 Sales 的第一个值是 12。此字段的排行值 Rank(Sales) 显示为 11。

如果此表格按 Sales 排序，则列段数据包含 Sales 值以及相应的 Customer。因为有两个 Sales 值是 12（对于 Astrida 和 Betacab），因此该列段数据每个 Customer 值的 Rank(Sales) 值都是 1-2。这是因为有两个 Customer 值的 Sales 值都是 12。如果有 4 个值，则所有行的结果都是 1-4。这显示了使用参数 fmt 默认值 (0) 时的结果。

示例 2:

将维度 Customer 替换为 Product，并添加度量 `Rank(Sales,1,2)`。

这样将在每个列段数据的第一行中返回 1，并将所有其他行留空，因为参数 mode 和 fmt 分别设置为 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-CN/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/ChartFunctions/BasicAggregationFunctions/sum.htm)