PowerQuery无需拆分表格:自动合并月度数据并添加日期列
解决步骤
1. 导入数据并添加索引列
- 将原始数据导入PowerQuery后,在「添加列」选项卡点击「索引列」,选择「从1开始」。这列用来标记每行位置,方便区分日期/设施/单位/数据行。
2. 标记行类型与分组
- 添加自定义列
组号,公式:Number.RoundDown(([索引]-1)/4)。该公式会把每4行划分为一组(如索引1-4为组0,5-8为组1,以此类推)。 - 再添加自定义列
行类型,公式:([索引]-1) mod 4,用数字标记每行类型:- 0 = 日期行
- 1 = 设施行
- 2 = 单位行
- 3 = 数据行
3. 提取每组对应日期
- 筛选出
行类型=0的所有日期行,仅保留「组号」和存储日期的列(假设为Column1),将日期列重命名为对应日期。 - 返回包含索引、组号、行类型的主表,点击「合并查询」,选择刚才生成的日期表,以「组号」为匹配条件合并,最后展开
对应日期列。
4. 筛选数据行并清理格式
- 筛选
行类型=3的所有数据行,删除索引、组号、行类型这些辅助列。 - 重命名数据列:选中目标列右键选择「重命名」,或在「转换」选项卡批量修改。若列名需从单位行提取,可重复步骤3的逻辑提取对应内容作为列名。
5. 批量处理多月份数据
- 若12个月数据为多个独立文件,直接通过「获取数据」→「文件夹」导入所有文件,上述处理步骤会自动应用到所有文件,无需逐个拆分。
M代码示例(可直接替换数据源后使用)
let // 替换为你的数据源(如Excel表、CSV路径等) 源 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], // 添加从1开始的索引列 添加索引 = Table.AddIndexColumn(源, "索引", 1, 1, Int64.Type), // 生成组号与行类型标记 添加组号 = Table.AddColumn(添加索引, "组号", each Number.RoundDown(([索引]-1)/4), Int64.Type), 添加行类型 = Table.AddColumn(添加组号, "行类型", each ([索引]-1) mod 4, Int64.Type), // 提取日期行并整理 日期行筛选 = Table.SelectRows(添加行类型, each ([行类型] = 0)), 日期表 = Table.RenameColumns(Table.SelectColumns(日期行筛选, {"组号", "Column1"}), {{"Column1", "对应日期"}}), // 将日期合并到主表 合并日期 = Table.NestedJoin(添加行类型, {"组号"}, 日期表, {"组号"}, "日期表", JoinKind.LeftOuter), 展开日期列 = Table.ExpandTableColumn(合并日期, "日期表", {"对应日期"}, {"对应日期"}), // 筛选数据行并清理 筛选有效数据 = Table.SelectRows(展开日期列, each ([行类型] = 3)), 清理与重命名 = Table.RenameColumns(Table.RemoveColumns(筛选有效数据, {"索引", "组号", "行类型"}), {{"Column2", "设备A数值"}, {"Column3", "设备B数值"}}) in 清理与重命名
注意事项
- 若日期不在第一列,替换代码中的
Column1为实际日期列名。 - 若每组行数不是固定4行,调整公式中的数字
4为实际每组行数。 - 重命名列时,根据你的实际数据列修改
{"Column2", "设备A数值"}这类映射关系。
内容的提问来源于stack exchange,提问作者thisisnotluisa
相关产品推荐
相关产品推荐

