如何在Power Query M中无需固定列名实现按行求和目标两列
在Power Query M中实现动态列的行内求和(列名不固定场景)
核心问题分析
你之前用PA1+PA2的写法会把列名(文本值)直接拼接,而非取当前行对应列的数值求和;而固定列名的写法[#"'Floor'"] + [#"'Backroom"]无法适配列名变更的场景,需要通过动态匹配列的方式解决。
解决方案
根据列名变更的规律,提供两种常用实现方式:
1. 按列位置匹配(固定相加前两列)
如果需要求和的两列始终是表格的前两列,不管列名是什么,用以下代码:
#"Add Dynamic Total" = Table.AddColumn(Source, "总计", each List.Sum(Record.FieldValues(Record.SelectFields(_, List.FirstN(Table.ColumnNames(Source), 2)))) )
List.FirstN(Table.ColumnNames(Source), 2):提取表格的前两列列名Record.SelectFields(_, ...):从当前行(_代表当前行记录)中筛选出这两列的字段Record.FieldValues:将筛选后的字段转为值的列表List.Sum:对列表内的数值求和
2. 按列名关键词匹配(基于含义关键词筛选)
如果列名会变更但始终包含固定关键词(比如中文的"楼面"/"后台",英文的"Floor"/"Backroom"),用关键词匹配的方式:
#"Add Dynamic Total" = Table.AddColumn(Source, "总计", each List.Sum(Record.FieldValues(Record.SelectFields(_, List.Select(Table.ColumnNames(Source), each Text.Contains(_, "楼面") or Text.Contains(_, "后台"))))) )
List.Select(Table.ColumnNames(Source), ...):筛选出包含指定关键词的列名- 后续逻辑和按位置匹配一致,最终对匹配到的列的行内数值求和
验证示例
针对你提供的示例表格:
| 楼面 | 后台 | 总计 |
|---|---|---|
| 2 | 4 | 6 |
| 10 | 3 | 13 |
使用上述任意一种方式,都能正确计算出"总计"列的数值,且当"楼面"/"后台"更换为其他同含义列名时(比如"卖场"/"库房"),只要符合位置或关键词规则,代码依然有效。
内容的提问来源于stack exchange,提问作者Dan Wilson
相关产品推荐
相关产品推荐

