排名函数
1. 概述
通过排名函数,您可以按照分区计算数据排名。本文介绍排名函数用法以及函数之间的区别。
2. 示例
RANK
返回分区中当前行的唯一排名。为相同的值分配相同的排名,允许并列,以并列值排名的第一位作为排名,并跳过并列名次。使用可选的 "asc" 或者"desc" 参数指定升序或降序顺序,默认为降序。
语法:RANK(表达式, ["asc"|"desc"]) along [维度表达式]
示例:RANK(sum([销售额]), "desc") along [部门]
利用此函数,可以按照部门的销售额求和进行降序排名,其中的排名有并列且会跳过并列名次,以并列的第一位排名展示,若销售额分别为(9, 7, 7, 6) 则排名结果为(1, 2, 2, 4)。
RANK_UNIQUE
返回分区中当前行的唯一排名。为相同的值分配不同的排名,不允许并列。使用可选的 "asc" | "desc" 参数指定升序或降序顺序,默认为降序。
语法:RANK_UNIQUE(表达式, ["asc"|"desc"]) along [维度表达式]
示例:RANK_UNIQUE(sum([销售额]), "desc") along [部门]
利用此函数,可以按照部门的销售额求和进行降序排名,且排名不会并列,若销售额分别为(9, 7, 7, 6),则排名结果为(1, 2, 3, 4)。
RANK_MODIFIED
返回分区中当前行的调整后竞争排名。为相同的值分配相同的排名,以并列值排名的最后一位作为排名,跳过并列名次。使用可选的 'asc' | 'desc' 参数指定升序或降序顺序,默认为降序。
语法:RANK_MODIFIED(表达式, ['asc'|'desc']) along [维度]
示例:RANK_DENSE(sum([销售额]), "desc") along [部门]
利用此函数,可以按照部门的销售额求和进行降序排名,其中的排名有并列,以并列的最后一位排名展示,若销售额分别为 (9, 7, 7, 6) ,则排名结尾为 (1, 3, 3, 4)。
RANK_DENSE
返回分区中当前行的排名。为相同的值分配相同的排名,允许并列,但不会跳过并列名次。使用可选的 "asc" 或者 "desc" 参数指定升序或降序顺序,默认为降序。
语法:RANK_DENSE(表达式, ["asc"|"desc"]) along [维度表达式]
示例:RANK_DENSE(sum([销售额]), "desc") along [部门]
利用此函数,可以按照部门的销售额求和进行降序排名,其中的排名有并列但不会跳过名次,若销售额分别为(9, 7, 7, 6) 则排名结果为(1, 2, 2, 3)。
ROW_NUMBER
为每个唯一行分配连续的行ID。不会跳过任何行号值。使用可选的 "asc" 或者 "desc" 参数指定升序或降序顺序。
语法:ROW_NUMBER() OVER(PARTITION BY 维度表达式 ORDER BY 度量表达式 [ASC|DESC])
示例:ROW_NUMBER() OVER(ORDER BY sum(销售额) DESC)
利用此函数,可以按照部门的销售额求和进行降序排名,排名不会并列,若销售额分别为(9, 7, 7, 6) 则排名结果为(1, 2, 3, 4)。
3. 函数之间的区别
排名函数之间的区别请看下图:
注意:row_number是数据库函数,由数据库返回计算,可与fixed进行嵌套计算,其余rank函数为表计算函数,是内存计算,不可嵌套fixed函数。
rank系列函数是基于当前表格内容进行计算,当进行筛选过后,排名会出现变化。若想要保持排名结果不受筛选器的影响可以使用fixed加row_number实现。
示例:{fixed 地区:row_number() over(order by sum(销售额) desc)}
以上内容对您是否有帮助?