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

Power Query中如何将后续行值合并到前一行的新列中?

在Power Query中生成Options列并合并指定行内容

核心思路

先给每一行标记分组ID:将#列非空的行作为分组起始,后续所有#列为空的行归到同一个分组;再按分组ID聚合,把组内需要合并的字段(对应示例中黄色行的内容)过滤空值后用逗号拼接,最后将结果匹配回原表。

具体步骤与M代码

假设你的源表名为Source,需要合并的字段叫内容列(请根据实际表结构替换),操作如下:

  1. 添加分组标识列
    新增自定义列分组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
    
  2. 按分组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
        展开数据
    
  3. 整理最终结果
    此时Options列已经生成,每个#列非空的行对应的Options会包含后续所有空行的内容;如果不需要保留分组ID列,可以直接删除。

注意事项

  • 替换代码中的你的数据源和内容列为实际的表名和需要合并的字段名
  • 如果需要合并多个字段,可以调整List.Select部分,把多个字段的内容合并后再处理
  • List.RemoveNulls和each _ <> ""是为了同时过滤空值和空文本,确保最终拼接结果没有多余的逗号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:57:09