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. 函数之间的区别

排名函数之间的区别请看下图:
排名函数 - 图1

注意:row_number是数据库函数,由数据库返回计算,可与fixed进行嵌套计算,其余rank函数为表计算函数,是内存计算,不可嵌套fixed函数。


rank系列函数是基于当前表格内容进行计算,当进行筛选过后,排名会出现变化。若想要保持排名结果不受筛选器的影响可以使用fixed加row_number实现。

示例:{fixed 地区:row_number() over(order by sum(销售额) desc)}

排名函数 - 图2