You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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), ...):筛选出包含指定关键词的列名
  • 后续逻辑和按位置匹配一致,最终对匹配到的列的行内数值求和

验证示例

针对你提供的示例表格:

楼面后台总计
246
10313

使用上述任意一种方式,都能正确计算出"总计"列的数值,且当"楼面"/"后台"更换为其他同含义列名时(比如"卖场"/"库房"),只要符合位置或关键词规则,代码依然有效。

内容的提问来源于stack exchange,提问作者Dan Wilson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:17:17