Power Query导入时重命名第n次出现的重复列方法求助
Power BI Power Query 重复列名重命名解决方案
当导入文件出现重复列名(比如多个specialty)时,Table.RenameColumns无法直接通过索引区分重复列名,你可以用以下方法处理:
通用批量重命名所有重复列
替换你现有#"Rename Headers"步骤为以下代码:
#"Rename Duplicate Columns" = let // 获取当前数据集的所有列名 ColumnNames = Table.ColumnNames(#"Promoted Headers"), // 生成带序号的新列名:重复列自动添加数字后缀 NewColumnNames = List.Transform(ColumnNames, (ColName) => let // 统计当前列名出现的总次数 DuplicateCount = List.Count(List.Select(ColumnNames, (n) => n = ColName)), // 获取当前列在列表中的位置(从1开始计数) ColIndex = List.PositionOf(ColumnNames, ColName, Occurrence.All){List.PositionOf(ColumnNames, ColName)} + 1 in // 重复列添加序号,非重复列保持原名 if DuplicateCount > 1 then ColName & Text.From(ColIndex) else ColName ), // 生成原列名与新列名的映射列表 RenameMap = List.Zip({ColumnNames, NewColumnNames}) in // 执行重命名操作 Table.RenameColumns(#"Promoted Headers", RenameMap, MissingField.Ignore)
这段代码会自动给所有重复列名添加序号后缀,比如第一个specialty保留原名,第二个变为specialty2,第三个变为specialty3,以此类推。
单独指定重命名某一列
如果只需要处理specialty这一列,也可以用更针对性的写法:
#"Rename Specialty Columns" = let // 获取所有列名 ColumnNames = Table.ColumnNames(#"Promoted Headers"), // 找到所有名为specialty的列的位置 SpecialtyPositions = List.PositionOf(ColumnNames, "specialty", Occurrence.All), // 生成重命名映射:第一个保留,第二个改为specialty2 RenameMap = List.Transform(SpecialtyPositions, (pos) => {ColumnNames{pos}, if pos = List.First(SpecialtyPositions) then "specialty" else "specialty2"} ) in Table.RenameColumns(#"Promoted Headers", RenameMap, MissingField.Ignore)
内容的提问来源于stack exchange,提问作者sxs
相关产品推荐
相关产品推荐

