Lazy loaded imageEP019:理解上下文(each)和((x)=>)嵌套,解决中国式排名问题

type
status
date
slug
summary
tags
category
icon
password
notion image

上节课《EP018:理解上下文(each)和((x)=>)嵌套,解决国际标准排名问题》,我们实现了国际标准的排名问题,也就是:
国际式排名(也叫“跳号排名”)的规则是:
  • 并列多少名,会跳号
  • 所以,如果有3个人并列第1名,那么下一个人就是第4名,跳过了第2名和第3名。
要实现中国式排名(即并列第1,下一个是第2,不跳号),核心逻辑从 “数人头” 变成了 “数分数的档位”
需要把之前的 Table.RowCount(数行数)换成 List.Count(数列表元素),并在中间加一步 去重取列
这是修改后的代码,严格保留了你的代码风格和注释习惯:

🔍 修改点详细说明(对照旧代码):

  1. 外层函数变了
      • 旧:Table.RowCount(...) —— 数表格有几行。
      • 新:List.Count(...) —— 数列表有几个值。
  1. 中间加了去重
      • 新:List.Distinct(...) —— 这是中国式排名的灵魂,把比你高的分数去重。比如有两个90分,去重后只算1个“比你高”的档位。
  1. 最关键的尾巴
      • 新:在 Table.SelectRows(...) 的屁股后面加了 [业绩]
      • 原因List.Distinct 只能处理列表(List),不能处理表(Table)。所以筛选完表格后,必须马上把“业绩”这一列抽出来,变成列表扔给去重函数。

嵌套函数逐层释义

为了让你看得更清楚,我们将这套嵌套函数的处理过程来一个逐帧慢动作回放,我们假设当前正在处理的一行“张三”(业绩 80)。 同时,全公司有 4 个人:张三(80)、李四(90)、王五(70)、赵六(90)。
我们由最内层向最外层,一层层剥开这个代码的核心逻辑:

第 1 层(最内层):筛选比我强的人

代码:
  • 动作:拿着张三的业绩(80),去全公司名单里一个个比对。
  • 逻辑
    • 李四(90) > 80? -> 留下。
    • 王五(70) > 80? -> 踢掉。
    • 赵六(90) > 80? -> 留下。
  • 结果:此时得到了一个 Table(表),里面有 2 行数据(李四和赵六)。

第 2 层(关键转换):只要分数,不要人

代码:
  • 位置:紧跟在 Table.SelectRows(...) 的屁股后面。
  • 动作:把刚才那张表里的“业绩”这一列单独抽出来。
  • 意义:因为 List.Distinct(去重)只能处理列表,不能处理表格,所以必须在这里把“面”变成“线”。
  • 结果:此时变成了一个 List(列表),内容是: {90, 90}

第 3 层(灵魂步骤):去除重复的分数

代码:
  • 动作:看着手里的列表 {90, 90},把重复的数字删掉。
  • 逻辑:这就是中国式排名的核心!不管有几个人考了90分,在我头顶上,它们只代表 “这一个档次”
  • 结果:列表变成了 {90} (只剩下一个元素了)。

第 4 层(统计档位):数数有几个分

代码:
  • 动作:数一数刚才那个去重后的列表里,一共有几个数?
  • 计算:列表 {90} 里只有 1 个数。
  • 结果:数字 1
  • 人话翻译:意思是“比张三业绩高的分数档次,只有 1 个”。

第 5 层(最外层):计算最终排名

代码:
  • 动作:最终排名 = 比我大的分数档次数量 + 1。
  • 计算1 + 1 = 2
  • 结果:张三的排名是 第 2 名

总结对比

步骤
此时数据的形态
数据内容 (以张三为例)
含义
1. 筛选
Table (表)
李四(90), 赵六(90)
找出所有比我强的人
2. 取列
List (列表)
{90, 90}
只看他们的分数
3. 去重
List (列表)
{90}
关键! 合并同类项,算作同一档
4. 计数
Number (数字)
1
我头顶上有几个档次
5. 加一
Number (数字)
2
我是第几名
这就是为什么这段代码能算出 “中国式排名” 的完整过程!
 
【扫码识别下发二维码,获取本文使用到的及历史以来提及、发布的相关精选和原创资料,和我们一起充电,加入后可享受每月6次免费咨询提问,帮助解决您的特定问题!】

如果本篇文章对您有帮助或启发,请帮我们点赞、转发、推荐、关注,让更多想转型财务BP、锻造数据分析和可视化洞察能力的财务同行们看到,关注【老汪洞察】,不迷路!
notion image
notion image
 
温馨提示
🙏🏻
如果您不想错过【老汪洞察】的文章,请将我们设为"星标",这样每次最新文章推送才会第一时间出现在您的订阅列表里。 方法:点击文章页面左上角蓝色文字“老汪洞察”进入主页,点击关注后,再点主页右上角"...",然后选择"设为星标",即可完成,感谢您的支持。
 
上一篇
EP020:知识点综合实战之动态交互查询(上下文嵌套、筛选、精准钻取值、动态参数)
下一篇
一个案例学习理解let...in骨架函数的嵌套逻辑
Loading...
文章列表
让财税成为经营的力量
管理报表
从Power Query到Power BI,入门到精通
699课程讲义
VBA小工具
电脑与网络
知识运用