Power Query 非连续行相减生成「其他所有国家」计算行问题求助
Power Query 计算并追加「All Other Countries」行操作步骤
实现逻辑:先分离区域总计行和国家明细行,按区域汇总现有国家指标总和,用区域总计减去该总和得到补全行数值,最后追加回原表即可,无需依赖排序或索引。
- 步骤1:拆分区域总计记录与国家明细记录
新增自定义列标记行类型,判断逻辑为如果「国家」列等于对应区域总计标识(根据你的表实际标识调整,比如总计行国家字段为「区域总计」),则标记为总计行,否则标记为明细行,再筛选拆分出两个子表:区域总计表、国家明细表。 - 步骤2:按区域汇总现有国家的指标总和
对「国家明细表」执行分组操作,分组依据为「区域」列,聚合操作分别为各指标求和,示例聚合配置:- earnings 求和,列名命名为
现有国家earnings合计 - opex 求和,列名命名为
现有国家opex合计 - volumes 求和,列名命名为
现有国家volumes合计
- earnings 求和,列名命名为
- 步骤3:关联计算补全行数值
将「区域总计表」和步骤2得到的「区域国家合计表」按「区域」列做左外合并,提取合并后的各字段后配置补全行字段:- 国家列值固定为
All Other Countries - earnings 列值 = [区域总计earnings] - [现有国家earnings合计]
- opex 列值 = [区域总计opex] - [现有国家opex合计]
- volumes 列值 = [区域总计volumes] - [现有国家volumes合计]
清洗多余字段后得到补全行表。
- 国家列值固定为
- 步骤4:合并表得到最终结果
将国家明细表、区域总计表(如果需要保留总计行的话)、补全行表做追加合并,即可得到符合要求的结果表。
示例M代码
// 需根据你的实际表名、列名、总计行标识调整对应参数 let 源 = Excel.CurrentWorkbook(){[Name="原始数据表"]}[Content], // 拆分总计行和明细行,示例假设总计行的[国家]列值为"区域总计" 标记行类型 = Table.AddColumn(源, "行类型", each if [国家] = "区域总计" then "总计行" else "明细行"), 区域总计表 = Table.SelectRows(标记行类型, each [行类型] = "总计行"), 国家明细表 = Table.SelectRows(标记行类型, each [行类型] = "明细行"), // 按区域分组汇总现有国家指标 按区域汇总 = Table.Group(国家明细表, {"区域"}, { {"现有earnings合计", each List.Sum([earnings]), type number}, {"现有opex合计", each List.Sum([opex]), type number}, {"现有volumes合计", each List.Sum([volumes]), type number} }), // 关联计算补全行数值 合并总计和汇总 = Table.NestedJoin(区域总计表, {"区域"}, 按区域汇总, {"区域"}, "汇总数据", JoinKind.LeftOuter), 展开汇总数据 = Table.ExpandTableColumn(合并总计和汇总, "汇总数据", {"现有earnings合计", "现有opex合计", "现有volumes合计"}, {"现有earnings合计", "现有opex合计", "现有volumes合计"}), 生成补全行 = Table.AddColumn(展开汇总数据, "国家", each "All Other Countries"), 计算补全指标 = Table.TransformColumns(生成补全行, { {"earnings", each _ - 生成补全行[现有earnings合计]{0}, type number}, {"opex", each _ - 生成补全行[现有opex合计]{0}, type number}, {"volumes", each _ - 生成补全行[现有volumes合计]{0}, type number} }), 补全行表 = Table.SelectColumns(计算补全指标, {"区域", "国家", "earnings", "opex", "volumes"}), // 合并输出最终结果,不需要保留总计行可删除`区域总计表`参数 最终结果 = Table.Combine({国家明细表, 区域总计表, 补全行表}), 清理多余列 = Table.RemoveColumns(最终结果, {"行类型"}) in 清理多余列
内容的提问来源于stack exchange,提问作者Mede
相关产品推荐
相关产品推荐

