销售明细、成绩单、门店日报里,分析师经常要给每一行加上名次或百分位:全表第几、每个门店内第几、分数落在哪个百分位。行不能少,行的先后也不应被重排——只要多一列名次。

如果采用传统手工方式,只能先排序再手工填 1、2、3,遇到并列还要心算「跳号还是不跳号」。排完序底稿顺序已被打乱;只要前 N 名时又容易把其余行删掉。过程无法沉淀为可回溯、可自动复跑的工作流。

DT-Bot 的 「明细排名」 算子专为解决此类名次或百分位贴列而设计。它给每一行加上名次或百分位,行数不变,行的先后不变。可全表排,也可组内排。默认大的第 1、并列跳号。未点名结果表时就地改原表。只按列排好顺序、不加名次列,请用「表操作」;只要前 N 行、其余不要,请用「筛选器」。

一、 核心能力与适用场景

「明细排名」算子聚焦于在明细上写出名次或百分位,覆盖以下四大核心能力:

核心能力 解决什么业务问题 典型业务场景
全表排名(默认大的第 1、并列跳号) 按一列给全表每行一个名次;并列占用名次,下一个跳号。 按销售额加排名;两行都是 150 则并列第 2,下一个跳到第 4。
组内第几名 每个分组自己排,组与组的相同数值互不影响。 每个门店内按销售额加第几名。
并列不跳号(密集名次) 并列共享同一名次,下一个连续 +1,不跳号。 按分数加密集名次,两个 90 都是第 1,下一个是第 2。
百分位排名 按从大到小给出 0 到 1 的百分位。 按分数算百分位;最高分是 0、最低分是 1。

二、 边界指南:它与相近算子有何区别?

在构建数据工作流时,理解算子之间的职责边界至关重要:

比较维度 「明细排名」算子 「表操作」算子 「筛选器」算子 「聚合计算」算子
主要定位 名次/百分位贴列 整表行集合与行序治理 抽出子集另存新表 压行汇总出短表
输出机制 默认就地加列,行数与行序不变 就地删行/去重/排序,不加名次列 源表只读,另写筛选结果 源表只读,另写短表
典型动作 全表或组内第几名、密集名次、百分位 按金额从大到小排序 只要前 N 行 先汇总再取前几名(在短表上)
如何选择 “行都要留着,只要多一列名次” “只要排好序,不要名次列” “只要前几名,其余行不要” “先压成每组一行,再在短表上取头几名”

从 1 起的序号(不是按度量比大小的名次)请用「新增列」。组内合计/占比请用「组内加列」。

三、 提示词编写规范与公式

「明细排名」算子支持自然语言直接表达,建议遵循以下标准的三要素编写公式:

【目标表】 + 【按哪一列排、全表或组内、并列是否跳号】 + 【结果表名或名次列名(可选)】

1. 目标表范围表达

  • 单表精准点名:例如 “销售明细” :...、“成绩表” :...;
  • 默认当前流转表:未显式提及表名时,继承上一节点连线流入的数据表。

2. 按哪一列排

  • 全表、默认规则:按 “销售额” 加排名——大的第 1,并列跳号;
  • 组内:每个门店内,按销售额加第几名;
  • 并列不跳号:按分数加密集名次,并列不跳号;
  • 百分位:按分数算百分位排名。

3. 输出

  • 不写结果表名则就地加列。原文案例中,名次列为「销售额_排名」或「分数_排名」,百分位列为「分数_百分位」。行的先后不变,只是多了一列。
“销售明细” :按 “销售额” 加排名。

四、 核心功能与图解实战

以下结合真实企业数据场景,展示「明细排名」在不同需求下的处理效果:

场景 1:全表排名(大的第 1、并列跳号)

业务背景:品类会要按销售额排出全表名次。两行都是 150 必须并列第 2,下一行跳到第 4,不能写成 1、2、3、4 的连号。

【处理前:销售明细】

门店 品类 销售额
东门店 饮料 200
西门店 零食 150
东门店 零食 150
北门店 饮料 80

【执行提示词】

“销售明细” :按 “销售额” 加排名。

【处理后:销售明细(就地加列)】

门店 品类 销售额 销售额_排名 变更说明
东门店 饮料 200 1 最大,第 1
西门店 零食 150 2 与下一行并列第 2
东门店 零食 150 2 并列第 2
北门店 饮料 80 4 跳过 3,落到第 4

逻辑详解:行的先后与处理前完全一致,只是多了「销售额_排名」。这不是排序:西门店零食仍在第二行。默认大的第 1、并列跳号。


场景 2:组内第几名

业务背景:总部要看「每个门店自己的销售额第几名」。东门店的 80 和西门店的 80 不能抢同一个全表名次。

【处理前:销售明细】

门店 品类 销售额
东门店 饮料 200
东门店 零食 80
西门店 饮料 90
西门店 零食 80

【执行提示词】

“销售明细” :每个门店内,按销售额加第几名。

【处理后:销售明细(就地加列)】

门店 品类 销售额 销售额_排名 变更说明
东门店 饮料 200 1 东门店组内第 1
东门店 零食 80 2 东门店组内第 2
西门店 饮料 90 1 西门店组内第 1(不受东门店 200 影响)
西门店 零食 80 2 西门店组内第 2,与东门店的 80 互不影响

逻辑详解:分组后各自从 1 起排。两行 80 分属不同门店,都是本组第 2,不会合成全表并列。


场景 3:并列不跳号(密集名次)

业务背景:成绩公示要求「并列不占下一个名次」:两个 90 都是第 1,70 分应是第 2,而不是第 3。

【处理前:成绩表】

姓名 分数
张三 90
李四 90
王五 70

【执行提示词】

“成绩表” :按分数加密集名次,并列不跳号。

【处理后:成绩表(就地加列,密集名次)】

姓名 分数 分数_排名 变更说明
张三 90 1 并列最高
李四 90 1 并列最高
王五 70 2 不跳号,是第 2 而不是第 3

逻辑详解:与场景 1 的「并列跳号」相反。新列为「分数_排名」。行序不变。


场景 4:百分位排名

业务背景:教研要按分数给出百分位,口径是从 0 到 1,且按从大到小排:最高分是 0、最低分是 1。

【处理前:成绩表】

姓名 分数
张三 90
李四 90
王五 70

【执行提示词】

“成绩表” :按分数算百分位排名。

【处理后:成绩表(就地加列,百分位)】

姓名 分数 分数_百分位 变更说明
张三 90 0 最高分(并列),百分位为 0
李四 90 0 与张三并列最高
王五 70 1 最低分,百分位为 1

逻辑详解:百分位从 0 到 1。按从大到小排时,最高分是 0、最低分是 1。新列为「分数_百分位」。行数与行序不变。

五、 常见问题与操作贴士(FAQ)

Q1:为什么排完名后,表格没有按名次重新排序?

答:本算子只加名次列,不改行序。行的先后与处理前一致。若只要排好顺序、不要名次列,请用 「表操作」。

Q2:默认是「大的第 1」还是「小的第 1」?并列默认跳号吗?

答:默认大的第 1、并列跳号(两个第 2,下一个是第 4)。要并列不跳号时,必须写明「密集名次,并列不跳号」。

Q3:百分位为什么最高分是 0、最低分是 1?

答:这是原文约定:百分位从 0 到 1,按从大到小排时最高分是 0、最低分是 1。不要按「最高分 = 1」去改预期。

Q4:只要前 3 名、或先汇总再取前几名,该用谁?

答:只要前 N 行、其余不要,请用 「筛选器」。先汇总再取前几名,请先走 「聚合计算」。从 1 起的序号(不是按度量排名)请用 「新增列」。

六、 关联算子导航