Power BI/Power Query:如何用列值作为自定义列名并合并多格式Excel?
Power BI批量处理多年份Excel文件&动态列名自定义列实现
一、批量加载所有年份的Excel文件
- 点击主页选项卡→获取数据→文件夹,选择存放所有年份Excel文件的文件夹。
- 在加载的文件夹数据中,添加自定义列,输入公式(适配文件表名规则):
// 若所有文件表名统一,替换为你的表名 = Excel.CurrentWorkbook(){[Name="销售数据表"]}[Content] // 若表名不统一,取文件内第一个表 = Table.First(Excel.CurrentWorkbook())[Content] - 展开自定义列的所有字段,完成批量合并。
- 添加年份列:从文件名/路径提取年份,比如文件名是「2022销售数据.xlsx」,用公式:
调整参数匹配你的文件名规则。= Number.From(Text.BeforeDelimiter([Name], "销售"))
二、按年份生成总计列(结合辅助表)
假设你已生成结构为「年份+文件总计」的辅助表TotalTable,主表也已提取年份列,以下是两种实现方案:
方案1:匹配辅助表生成固定列名的总计列
若只需单列展示对应年份的总计,用合并查询关联:
- 主表和辅助表都选中年份列,点击主页→合并查询→合并查询作为新列。
- 选择辅助表,关联方式选「左外部」,展开合并列中的文件总计字段即可。
方案2:提取辅助表值作为动态列名(自定义查询)
若需按年份生成不同列名(如「2022总计」「2023总计」),用以下代码实现:
let // 主表前期处理步骤(如批量加载、提取年份) Source = 你的主表查询名, // 合并主表与辅助表,关联年份列 MergedTables = Table.NestedJoin(Source, {"年份"}, TotalTable, {"年份"}, "TotalRecord", JoinKind.LeftOuter), // 生成包含动态列名的记录 AddedDynamicColumn = Table.AddColumn(MergedTables, "动态总计", (row) => let // 从辅助表记录中提取列名和对应值 ColumnName = "年份" & Text.From(row[年份]) & "总计", TotalValue = row[TotalRecord][文件总计] in Record.FromList({TotalValue}, {ColumnName}) ), // 展开所有动态生成的列 ExpandedColumns = Table.ExpandRecordColumn(AddedDynamicColumn, "动态总计", List.Distinct(List.Transform(TotalTable[年份], each "年份" & Text.From(_) & "总计")), List.Distinct(List.Transform(TotalTable[年份], each "年份" & Text.From(_) & "总计")) ) in ExpandedColumns
纠正你的示例代码问题
原代码中each [T1]无法识别变量T1作为列名,正确的动态引用写法需用Record.Field:
let // 从辅助表提取目标列名(示例:取Position列的值作为列名) T1 = TotalTable{0}[Position], // 动态引用列名添加总计列 AddedTotalColumn = Table.AddColumn(#"Added custom 3", "Total", each Record.Field(_, T1)) in AddedTotalColumn
三、按年份拆分数据(可选)
若需将数据按年份拆分为单独表/工作表,点击主页→拆分列→按年份列拆分,选择「拆分为工作表」或「拆分为查询」即可。
内容的提问来源于stack exchange,提问作者Kristof
相关产品推荐
相关产品推荐

