Rank、DenseRank 和 RankReal 函数 参考以下表格:
函数 | 说明 |
---|---|
DenseRank(Arg1, Arg2, Arg3...) | 将返回选定列中各值的整数值排名。第一个参数是要进行排名的列。 可选参数是字符串,可决定使用升序排名 (默认) 还是降序排名。要检索排名 1 以获得最大值,使用参数“desc”;要检索排名 1 以获得最小值,使用“asc”。 相同的排名值不分先后,最大排名量等于列中唯一值的数量。 列应拆分为单独排名的类别时,可以使用其他列参数(可选)。 示例: DenseRank([Sales]) DenseRank([Sales], "desc", [Region]) |
Rank(Arg1, Arg2, Arg3...) | 将返回选定列中各值的整数值排名。第一个参数是要进行排名的列。 可选参数是字符串,可决定使用升序排名 (默认) 还是降序排名。要检索排名 1 以获得最大值,使用参数“desc”;要检索排名 1 以获得最小值,使用“asc”。 排名值不分先后,具体取决于可选参数值: "ties.method=minimum" (默认), "ties.method=maximum",或者 "ties.method=first"。 有关可用参数的更多信息,请参见关于排名等级的更多信息。 列应拆分为单独排名的类别时,可以使用其他列参数(可选)。 示例: Rank([Sales]) Rank([Sales], "desc", [Region]) Rank([Sales], "ties.method=first") |
RankReal(Arg1, Arg2, Arg3...) | 将返回选定列中各值的实数值排名。第一个参数是要进行排名的列。 可选参数是字符串,可决定使用升序排名 (默认) 还是降序排名。要检索排名 1 以获得最大值,使用参数“desc”;要检索排名 1 以获得最小值,使用“asc”。 排名值不分先后,具体取决于可选参数值: "ties.method=minimum" (默认), "ties.method=maximum", "ties.method=first",或者 "ties.method=average"。 有关可用参数的更多信息,请参见关于排名等级的更多信息。使用斯皮尔曼等级计算数据关系时,将使用平均等级方法。 列应拆分为单独排名的类别时,可以使用其他列参数(可选)。 示例: RankReal([Sales]) RankReal([Sales], "desc", [Region]) RankReal([Sales], "ties.method=average") |
一、可选参数 ties.method 的解释
关于排名等级的更多信息:
通过函数排名和 RankReal,可以根据您希望如何对等值进行排名来添加可选层级方法参数。
参数 | 说明 |
"ties.method=minimum" | 为所有层级提供层级值的最小排名值。 |
"ties.method=maximum" | 为所有层级提供层级值的最大排名值。 |
"ties.method=first" | 为第一个找到的层级值提供最小排名值,并继续对下一个层级使用后续排名值。 |
"ties.method=average" | 为所有层级提供排名值的平均值。 |
对 Rank 函数的解释:
Tableau 计算排名或行号_种麦南山下的博客-CSDN博客
示例1:
对列表进行排名后,其值排在所有已排序值的第一位。然后,根据已排序列表中的顺序,为已排序的值指定排名值。为层级值指定的排名取决于层级方法。空值保留为空,并且不会获得任何排名。
值列表 | 排名为 "ties.method=minimum" | 排名为 "ties.method=maximum" | 排名为 "ties.method=first" | 排名为 "ties.method=average" |
1 | 1 | 1 | 1 | 1 |
2 | 2 | 3 | 2 | 2.5 |
3 | 4 | 4 | 4 | 4 |
2 | 2 | 3 | 3 | 2.5 |
(空) | (空) | (空) | (空) | (空) |
5 | 5 | 5 | 5 | 5 |
如果使用 DenseRank,示例中的结果排名值将为 1 2 3 4。
示例2:
现有以下3个表达式:
// test1
Rank([Single],"ties.method=first",[Initial Completion])
// test2
Rank([Single],"ties.method=first")
//test3
Rank([Single])
//test4
Rank([Single],"ties.method=maximum"))
结果如下:
(1)这里将逻辑简化,仅看test2,test3,test4。因为涉及到其他逻辑,Total Drilling a有相同值,test3就存在相同的排名值。即 "ties.method=minimum" (默认),可省略不写
(2)对于test1 多了一个字段 [Initial Completion],相对于Initial Completion的分组排序
二、Rank 是对表中所有行排序
上面表格中,都有一个排序规则:第一个参数是要进行排名的列。
比如表达式:Rank([Start Time],[Legal WellName]) ,按照 [Start Time] 和 [Legal WellName] 进行排序。
结果:
因为第一个参数是要排名的列,那么我在右侧的筛选器中将时间范围选为2020/1/1 0:00:00到2021/1/1 0:00:00
如下图,排名rank 从454开始,并没有从1开始,重新排序。在筛选的时间范围内,排名还是原来的排名,并没有重新开始排。
上面的表达式排序 是直接操纵 数据库表的,它会对整个表全局排序,跟筛选器怎样筛选无关。