Power Query Excel如何基于同列其他行值更新对应行数据
Power Query 实现分组填充列方案
操作步骤
- 第一步:从SQL Server导入原始数据到Power Query编辑器,确认
Visit Date、Rep、Chestionar、Customer、Brand、PLANOGRAME Type 1、PLANOGRAME Type 2、POZITIONARE字段完整加载。 - 第二步:按要求维度分组:点击顶部「转换」选项卡 → 选择「分组依据」→ 切换到「高级」模式,依次添加4个分组列:
Visit Date、Rep、Chestionar、Customer;新列名输入组内明细,操作选择「所有行」,点击确定生成分组结果。 - 第三步:添加自定义列处理每组数据,自定义列公式如下:
let currentGroup = [组内明细], // 提取同组内Planograme Type 1对应的值 p1Val = Table.SelectRows(currentGroup, each [Brand] = "Planograme Type 1"){0}[PLANOGRAME Type 1]?, // 提取同组内Planograme Type 2对应的值 p2Val = Table.SelectRows(currentGroup, each [Brand] = "Planograme Type 2"){0}[PLANOGRAME Type 2]?, // 提取同组内非两类Planograme对应的POZITIONARE值 pozVal = Table.SelectRows(currentGroup, each not List.Contains({"Planograme Type 1", "Planograme Type 2"}, [Brand])){0}[POZITIONARE]?, // 给组内所有行批量赋值 updatedGroup = Table.AddColumn(currentGroup, "PLANOGRAME Type 1_新", each p1Val), updatedGroup = Table.AddColumn(updatedGroup, "PLANOGRAME Type 2_新", each p2Val), updatedGroup = Table.AddColumn(updatedGroup, "POZITIONARE_新", each pozVal), // 容错处理空值,没有匹配值时保留原值 updatedGroup = Table.ReplaceValue(updatedGroup, null, each _, Replacer.ReplaceValue, {"PLANOGRAME Type 1_新", "PLANOGRAME Type 2_新", "POZITIONARE_新"}) in updatedGroup
公式末尾的?为容错符,避免分组内无匹配数据时抛出错误。
- 第四步:删除原始的
组内明细列,点击自定义列右上角的展开按钮,展开所有字段;删除原来的旧目标列,将带_新后缀的列重命名为原有列名即可得到预期结果。
性能优化提示
如果数据量较大导致加载慢,可在分组前先按四个分组字段做升序/降序排序,Power Query对排序后的数据分组会大幅提升计算效率,避免全表反复扫描。
内容的提问来源于stack exchange,提问作者Deeriss
相关产品推荐
相关产品推荐

