如何在Power Query中导入按年份分组列的多工作表数据并规整格式?
Power Query 数据规整解决方案
步骤1:导入多份工作表
- 打开Excel,点击
数据>获取数据>自文件>自工作簿,选择目标文件,在导航器中勾选所有需要处理的工作表,点击转换数据进入Power Query编辑器。
步骤2:设置复合表头(年份+方向)
- 选中第一行(年份行),右键选择
将行作为标题>将第一行用作标题,此时表头会显示为Column1、Column2、2024、2024、2025、2025... - 选中第二行(方向行),右键选择
将行作为标题>合并标题与第一行,设置分隔符为下划线_,此时表头会变成Column1、Column2、2024_D、2024_A、2025_D、2025_A... - 删除已合并到表头的原方向行:点击
主页>删除行>删除顶部行。 - 重命名前两列为
Month和Hour:双击列名修改即可。
步骤3:逆透视数据列
- 选中
Month和Hour列,点击转换>逆透视列>逆透视其他列,此时会生成两列:属性(内容为2024_D这类组合值)和值(对应数值)。
步骤4:拆分年份与方向
- 选中
属性列,点击转换>拆分列>按分隔符,选择自定义输入下划线_,选择拆分为列,将新列分别命名为Year和Direction。
步骤5:整理最终结构
- 删除
属性列,调整列顺序为Month、Hour、Year、Direction、Value。 - 设置各列数据类型:比如
Year设为整数,Month设为文本或整数,Value设为小数。
批量处理多工作表
如果需要批量处理所有导入的工作表,可将上述步骤转为自定义函数:
- 完成单份工作表的处理后,点击
高级编辑器,复制所有M代码。 - 点击
主页>新建源>空白查询,右键查询重命名为ProcessSheet。 - 打开
高级编辑器,将代码修改为函数格式,示例:
let ProcessSheet = (SheetName as text) as table => let Source = Excel.CurrentWorkbook(){[Name=SheetName]}[Content], #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]), #"Merged Headers" = Table.MergeColumns(#"Promoted Headers", List.Skip(Table.ColumnNames(#"Promoted Headers"),2), Combiner.CombineTextByDelimiter("_", QuoteStyle.None), "Merged"), #"Removed Top Rows" = Table.Skip(#"Merged Headers",1), #"Renamed Columns" = Table.RenameColumns(#"Removed Top Rows",{{"Column1", "Month"}, {"Column2", "Hour"}}), #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Renamed Columns", {"Month", "Hour"}, "Attribute", "Value"), #"Split Column by Delimiter" = Table.SplitColumn(#"Unpivoted Other Columns", "Attribute", Splitter.SplitTextByDelimiter("_", QuoteStyle.Csv), {"Year", "Direction"}), #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Month", Int64.Type}, {"Hour", Int64.Type}, {"Year", Int64.Type}, {"Direction", type text}, {"Value", type number}}), #"Reordered Columns" = Table.ReorderColumns(#"Changed Type",{"Month", "Hour", "Year", "Direction", "Value"}) in #"Reordered Columns" in ProcessSheet
- 新建另一个空白查询,输入代码
List.Transform(Table.ColumnNames(Excel.CurrentWorkbook()), each ProcessSheet(_)),然后点击转换>表格化,再点击主页>关闭并上载即可得到所有工作表合并后的规整数据。
内容的提问来源于stack exchange,提问作者Malcoolm
相关产品推荐
相关产品推荐

