PowerQuery合并重复项后多行信息合并为单行的实现方法咨询
在Power Query中合并同一Person的多行分散信息为单行
这问题我之前处理过,用Power Query的分组+自定义列就能轻松搞定,给你两种实现方式,选你顺手的来:
方式一:可视化界面操作(适合不想写代码的同学)
- 选中你的数据源中的
Person列,切换到转换选项卡,点击分组依据按钮 - 在弹出的分组窗口里:
- 「分组依据」选择
Person - 「新列名」可以填
CombinedData,「操作」选择所有行,点击确定
- 「分组依据」选择
- 此时你的表会变成两列:
Person和CombinedData(后者是每个Person对应的所有原始行的嵌套表) - 点击添加列选项卡 → 自定义列,在公式框里输入:
把新列命名为List.RemoveNulls([CombinedData][Member]){0}?Member,点击确定 - 重复上一步,添加名为
Alum的自定义列,公式改为:List.RemoveNulls([CombinedData][Alum]){0}? - 最后右键点击
CombinedData列,选择删除,就得到你想要的目标表了
方式二:直接编写M代码(适合追求效率的同学)
如果你的数据源表名为Source,可以直接把这段代码替换到Power Query的高级编辑器里:
let Source = 替换成你的数据源引用, // 按Person分组,保留对应所有行 GroupedRows = Table.Group(Source, {"Person"}, {{"CombinedData", each _, type table [Person=text, Member=text, Alum=text]}}), // 提取Member列的非空值,无有效值则返回null AddedMember = Table.AddColumn(GroupedRows, "Member", each List.RemoveNulls([CombinedData][Member]){0}?), // 提取Alum列的非空值,无有效值则返回null AddedAlum = Table.AddColumn(AddedMember, "Alum", each List.RemoveNulls([CombinedData][Alum]){0}?), // 删除中间过渡列 RemovedColumns = Table.RemoveColumns(AddedAlum,{"CombinedData"}) in RemovedColumns
原理说明
List.RemoveNulls会把对应列里的空值全部过滤掉,{0}?用来取过滤后的第一个有效值;如果某列所有值都是null(比如示例里的Z),{0}?会返回null,刚好符合你的需求。
内容的提问来源于stack exchange,提问作者Ari Monger
相关产品推荐
相关产品推荐

