1. 概述
1.1 版本
FineBI版本 | 功能变动 |
---|---|
6.1.2 | - |
1.2 函数简介
语法 | RANK_AGG([分组字段1,分组字段2], [排序字段1,"排序方式",排序字段2,"排序方式"], "排序模式") | |
---|---|---|
参数1 | 分组字段 | 排序计算依据的分组字段,明细级别,可以缺省,缺省则不按照任何字段分组 |
参数2 | 排序字段 | 排序计算顺序的依据字段,明细级别,可以缺省,缺省则按照默认顺序计算 |
参数3 | 排序方式 | 支持 "asc"、"desc" 两个关键词,分别对应升序和降序排序,如缺省需要缺省所有排序方式,缺省则按照排序字段升序进行计算。 |
参数4 | 排序模式 | 指定排序规则,共支持4种,可以缺省,缺省默认为一般排序 一般排序:COMMON:1、2、2、4 密集排序: DENSE:1、2、2、3 连续排序: UNIQUE:1、2、3、4 比例排序: PERCENTILE:0、0.33、0.33、1 |
1.3 释义
排序规则有 4 种:
一般排序(COMMON):
定义:这是最常见的排序方法,每个数据点按其在排序中的位置赋值。如果有重复的值,它们共享相同的排序值,后续的排序值会跳过。
场景:适用于基本统计分析,特别是想要直接反映数据在集合中的排名情况。当你需要识别每个数据点在数据集中的具体排名,且关注每个重复值的相同重要性时使用。例如,在考试排名中,如果两位学生分数相同,他们可以共享相同的排名,且后面的名次会跳过,显示两个学生有相同的表现。
示例:对于数据 23、45、45、76,排序值是 1、2、2、4。这里的 1 是第一个最小的值,2是第二个值,4是最大的值的位置。
密集排序(DENSE):
定义:和一般排序类似,但即使数据值重复,排序值也不会跳跃。重复值共享同一排序值,下一个非重复值紧接着获得下一个排序值。
场景:适用于数据分析中保持数据的连续性,但不希望由于重复值而跳过排序值。这种排序可以用于想要简洁和连续的排名情况,例如运动比赛排名,当需要连续显示名次,而不是跳过位置。
示例:对于数据 23、45、45、76,排序值是 1、2、2、3。23 赋值 1,45赋值 2,而 76赋值 3。注意这里没有跳过 3,即使 45是重复数据。
连续排序(UNIQUE):
定义:每个值都被赋予唯一的排序值,确保数据不会出现重复排名,即使有重复的值也会继续增加排序值。
场景:适用于需要确保数据中的每个值有唯一的排序,不允许重复值的排名系统。例如在某些分析中,所有的项目都必须具有独特的排名,或者在去重分析场景中,这种排序方法可以避免数据混乱。例如,在金融投资回报率分析中,每个投资方案都应获得唯一的排名,即使两个方案回报率相同,系统也会给予它们不同的排名。
示例:对于数据 23、45、45、76,排序值是 1、2、3、4。每个唯一值都被赋予一个唯一的排序值,从 1 开始逐渐增加。
比例排序(PERCENTILE):
定义:将数据按其在整个数据集中所占的百分比位置分配排序值,生成0到1之间的比例值,表示该数据在集合中的相对位置。
场景:适用于需要将数据标准化或归一化,从而对数据分布进行评估。这在统计分析中非常常见,特别是在描述数据的相对位置时,例如判断数据值处于何种百分位数。这种排序在大数据分析、统计分布分析、以及社会科学研究中广泛使用。
示例:对于数据 23、45、45、76,排序值是 0、0.33、0.33、1。这意味着 23 排名在最下端(0%),45 排名在中间(33%),而 76 排名在最高端(100%)。
如果我们对班级学生的分数进行排序,不同排序模式下排序结果如下图所示:
一般排序:RANK_AGG([],[SUM_AGG(分数),"desc"],"COMMON")
密集排序:RANK_AGG([],[SUM_AGG(分数),"desc"],"DENSE")
连续排序:RANK_AGG([],[SUM_AGG(分数),"desc"],"UNIQUE")
比例排序:RANK_AGG([],[SUM_AGG(分数),"desc"],"PERCENTILE")
2. 注意事项
详情请参见:WINDOW函数概述-注意事项
RANK_AGG 函数输出的是聚合字段,在自助数据集中不支持直接输出,需要与 DEF 函数组合后输出明细级别字段。
3. 示例
公式 | 结果 | 备注 |
---|---|---|
RANK_AGG([省份],[SUM_AGG(销售额)]) | 省内按照销售额求和进行升序排列 |
4. 密集排序-并列排名不占位
详情参见文档:并列排名不占位
5. 交叉表求横向排名
5.1 制作交叉表
分析各「类别」下不同「子类别」,各「地区」的「销售额」情况,并对销售额设置数值格式。如下图所示:
5.2 计算不同地区销售额排名
按「类别、子类别」分组,对销售额降序排名,如下图所示:
公式=RANK_AGG([类别,子类别],[SUM_AGG(销售额),"desc"])
将字段拖入交叉表中,得到排名。如下图所示: