功能介绍 |
函数 | 含义 | 开窗示例 |
rank | 有并列,有占位。出现相同排名时跳过相同排名,排序结构一般是:1,2,2,4,5,5,7…… | rank( ) over(partition by [分组字段] order by [排序字段]) --分组后升序排名 |
dense_rank | 有并列,无占位。出现相同排名时不跳过相同排名,排序结构一般是:1,2,2,3,4,4,5…… | dense_rank( ) over(partition by [分组字段] order by [排序字段] desc) --分组后降序排名 |
row_number | 依次排序,无并列。 排序结构是:1,2,3,4,5,6,7…… | row_number( ) over(partition by 1 order by [排序字段]) --全局升序排名 |
多线图分析时,为了避免因维度过多出现很不易读的“意大利面条图” ,经常会需要对维度做 Top N筛选,以下图为例,横轴为日期维度,按「省份」进行对比,分析各「省份」的「销售金额」的月变化趋势;当「省份」较多时,希望仅显示图表中时间范围内「销售金额」合计排名Top N的「省份」。
新建多线图,把需要的字段分别拖入维度、对比、数值栏,此时线条较多较乱。把数值栏用的字段「销售金额」也拖入“更多工具提示”栏,聚合方式默认使用“求和”,点击“高级计算 — 排名”,按照下图设置,确定保存,然后给字段重命名即可。
注意:因为要按照省份的合计值排名,「省份」字段是对比项,所以排序类型要用“维度项排名”。
效果图如下图,光标放上去时,排名信息会显示在浮窗里。
1. 在卡片里新建2个计算字段:
「省销售额合计」: sum([销售金额])over(partition by [省份]) 「排名」:dense_rank()over(partition by 1 order by [省销售额合计] desc)
2. 把 「排名」拖入筛选栏,设置范围为 “小于等于3” 即可。两个方案的最终展示效果基本一致,仅有浮窗和图例显示稍有不同。
按销量排名计算商品小类的累计销量占比 。具体方案请参考 按销量排名计算商品小类的累计销量占比 。
系统自带的排名功能,是先把数据聚合到最小行数后再排名,所以排序方式可以从 rank、dense_rank,、row_number里按需选择。但是窗口函数相当于在原数据集上排名,并不会把一个分组聚合成一条数据,所以在卡片里仅建议使用函数dense_rank(因为允许并列、无占位)。
卡片里3个函数开窗计算结果(聚合方式为“无处理”)对比如下图,可以看到,rank、row_number的排名都受数据集原始行数影响,排序结果并不符合预期。如果一定要使用这两种排序逻辑,则建议优先使用系统自带的排名功能,不满足需求的话需要在ETL里先把数据聚合到需要的维度再使用对应的窗口函数计算。