Rank - 图表函数
Rank() 用于在表达式中计算图表的行数,并且对于每一行显示在表达式中计算的维度值的相对位置。当计算表达式的值时,该函数将结果与包含当前列片段的其他行的结果比较,然后返回片段中当前行的排名。
对于非表格图表,将定义当前列段数据,就像显示在图表的垂直表等同物中一样。
语法:
Rank([TOTAL expr[, mode[, fmt]])
返回数据类型: 双
参数:
- expr: 表达式或字段包含要度量的数据。
- mode: 指定函数结果的数字呈现形式。
- fmt: 指定函数结果的文本呈现形式。
- TOTAL:如果图表是一维或如果表达式前面有 TOTAL 限定符,则该函数用于评估整列。 如果表格或表格等同物有多个垂直维度,当前列段数据将只包括值与所有维度列的当前行相同的行,但按内部字段排序显示最后维度的列除外。
排行以对偶值形式返回,在每一行拥有一个唯一排行的情况下,排行是一个介于 1 和当前列段数据行数之间的整数。
当多行共享同一个排名时,文本和数字呈现形式可使用 mode 和 fmt 参数进行控制。
mode
第二个参数 mode 可获取以下值:
值 | 说明 |
---|---|
0(默认) |
如果共享组中的全部排行处在整个排行中间值的下半部分,全部行都获得共享组的最低排行。 如果共享组中的全部排行处在整个排行中间值的上半部分,全部行都获得共享组的最高排行。 如果共享组中的排行跨越整个排行的中间值,全部行都获得整个列片断中最高和最低排行的平均值。 |
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 '|');