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

如何用Power Query合并含重复表头的多子表并新增城市列?

Power Query 整合多城市天气数据方案

以下是纯Power Query的分步实现方法,无需依赖Excel公式:


步骤1:导入原始数据到Power Query

将包含所有子表的原始数据导入Power Query(可通过数据>自表格/区域或对应数据源导入)。导入后你会看到包含重复表头、城市行、数据行和空白行的原始表格。

步骤2:添加索引列与标记城市起始行

  1. 点击添加列>索引列>从1开始,生成一个从1递增的索引列,用于定位每个城市块的起始位置。
  2. 添加自定义列,标记每个城市块的第一行(即包含城市名和预报时间的行):
    • 点击添加列>自定义列,输入公式:
      not isblank([Column1]) and Text.Contains([Column2]?, "Hourly Forecast")
      
    • 将该列命名为IsCityRow,结果为true的行就是每个城市块的起始行。

步骤3:生成城市块分组ID

添加另一个自定义列,为每个城市块分配唯一的分组ID:

  • 自定义列公式:
    List.Count(List.Select(Table.FirstN(#"Marked City Rows", [Index]), (x)=>x[IsCityRow]))
    
  • 命名为GroupID,同一城市块内的所有行(包括城市行、表头行、数据行、空白行)会拥有相同的GroupID。

步骤4:按分组ID处理每个城市块

点击转换>分组依据,设置:

  • 分组依据:GroupID
  • 新增列1:名称CityName,操作首行,列选择原始数据的第一列(如Column1)
  • 新增列2:名称ForecastTime,操作首行,列选择原始数据的第二列(如Column2)
  • 新增列3:名称DataRows,操作所有行,然后点击高级编辑器,将该列的代码修改为:
    each Table.Skip(_, 2) |> Table.RemoveLastN(1) |> Table.PromoteHeaders([PromoteAllScalars=true])
    
    这段代码的作用是:跳过当前组的前两行(城市行和列标题行),移除最后一行空白行,然后将剩余行的第一行设为表头。

步骤5:展开数据并整理列

  1. 点击DataRows列右侧的展开按钮,选择所有列进行展开。
  2. 调整列顺序,将CityName和ForecastTime移到表格最前面,方便查看。
  3. 最后检查数据,过滤掉可能残留的空值或无效行(如果有的话)。

关键说明

  • 若原始数据的列名不是Column1/Column2,需替换为实际列名。
  • 若每个城市块的数据行数不是360行,Table.RemoveLastN(1)仍适用,因为它只移除最后一行空白行,无需硬编码行数。
  • 此方法自动识别每个城市块的边界,无需手动拆分表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:21:29