如何将列值用作计算列变量实现跨表条件计数?
在Power Query中为PassCount表添加统计符合条件行数的计算列
场景说明
现有两个表:
Grades表
| Grade |
|---|
| 88 |
| 91 |
| 97 |
| 92 |
| 84 |
PassCount表
| Value |
|---|
| 80 |
| 85 |
| 90 |
| 95 |
需求:为PassCount表添加名为Count的计算列,统计Grades表中Grade列值大于当前行Value的行数,预期结果如下:
| Value | Count |
|---|---|
| 80 | 5 |
| 85 | 4 |
| 90 | 3 |
| 95 | 1 |
问题分析
你尝试的两种写法存在以下问题:
- 第一种写法中
[PassValue]并非当前行的列名(实际列名为Value),且未在筛选上下文里正确捕获当前行的值 - 第二种写法直接引用整个
PassCount[PassValue]列,导致循环引用——因为计算列属于PassCount表本身,不能直接引用整个表的列进行逐行计算
解决方案
方法一:使用变量捕获当前行值(清晰易读)
在PassCount表中添加自定义列,使用以下M语言代码:
Count = let // 捕获当前行的Value值到变量中 CurrentThreshold = [Value], // 筛选Grades中Grade大于当前阈值的行 FilteredRows = Table.SelectRows(Grades, each [Grade] > CurrentThreshold) in // 返回筛选后的行数 Table.RowCount(FilteredRows)
方法二:使用List函数简化写法(更高效)
直接用列表操作完成统计,代码更简洁:
Count = List.Count(List.Select(Grades[Grade], each _ > [Value]))
或者用List.GreaterThan函数实现相同效果:
Count = List.Count(List.GreaterThan(Grades[Grade], [Value]))
以上两种方法都能正确引用当前行的Value作为筛选阈值,避免循环引用和未找到列的问题,最终得到预期的统计结果。
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

