Power Query中如何将后续行值合并到前一行的新列中?
在Power Query中生成Options列并合并指定行内容
核心思路
先给每一行标记分组ID:将#列非空的行作为分组起始,后续所有#列为空的行归到同一个分组;再按分组ID聚合,把组内需要合并的字段(对应示例中黄色行的内容)过滤空值后用逗号拼接,最后将结果匹配回原表。
具体步骤与M代码
假设你的源表名为Source,需要合并的字段叫内容列(请根据实际表结构替换),操作如下:
添加分组标识列
新增自定义列分组ID,通过累计计数来标记每个分组:let Source = 你的数据源, // 添加分组ID:#列非空时计数+1,否则继承上一行的ID 添加分组ID = Table.AddColumn(Source, "分组ID", (current) => let 之前行 = Table.FirstN(Source, Table.PositionOf(Source, current)), 非空行数 = List.Count(List.Select(之前行[#], each _ <> null and _ <> "")), 当前行非空 = if current[#] <> null and current[#] <> "" then 1 else 0 in 非空行数 + 当前行非空, Int64.Type) in 添加分组ID按分组ID聚合合并内容
对分组后的行进行聚合,过滤空值后用逗号拼接:let // 接上一步的"添加分组ID"步骤 分组聚合 = Table.Group(添加分组ID, {"分组ID"}, { {"Options", each Text.Combine(List.RemoveNulls(List.Select([内容列], each _ <> "")), ", "), type text}, {"原行数据", each _, type table} }), // 展开原行数据,保留所有原始列 展开数据 = Table.ExpandTableColumn(分组聚合, "原行数据", Table.ColumnNames(Source)) in 展开数据整理最终结果
此时Options列已经生成,每个#列非空的行对应的Options会包含后续所有空行的内容;如果不需要保留分组ID列,可以直接删除。
注意事项
- 替换代码中的
你的数据源和内容列为实际的表名和需要合并的字段名 - 如果需要合并多个字段,可以调整
List.Select部分,把多个字段的内容合并后再处理 List.RemoveNulls和each _ <> ""是为了同时过滤空值和空文本,确保最终拼接结果没有多余的逗号
内容的提问来源于stack exchange,提问作者Robotic
相关产品推荐
相关产品推荐

