能够迭代重命名重复列的动态合并查询

问题描述 投票:0回答:1

我为任何感兴趣的人准备了一个有趣的挑战……

基本上,我正在寻找一种在动态合并语句中迭代重命名重复列的方法。我想复制如何在嵌套表列上单击“展开”来处理用 .1、.2、.3、.4 等重命名重复列...我想可能是一个递归函数,但我无法得到才能工作。

我有一长串相互依赖的查询。它以 2 个独立的查询开始,每个查询只是导入一个表。然后,这两个查询通过“合并为新”并“扩展”第二个查询所在的嵌套表列连接在一起。

第一个挑战是 Power BI 硬编码列名称,因此我需要使合并动态化,因为经常对要连接的 2 个查询进行更改,并且需要反映在合并列中。应该注意两件事 - 1,主键和外键具有不同的名称(在以下所有查询中这在大多数情况下也是如此),2,查询 1 和查询 2 中存在重复的列。因此,在此语句中,我添加了一个子句来标记查询 2 中存在于查询 1 中的任何重复列,并在其名称后附加“.1”:

让 Source = Table.NestedJoin(query1, {"PrimaryKey"}, query2, {"ForeignKey"}, "query2", JoinKind.LeftOuter), Expanded = Table.ExpandTableColumn(Source, "query2", Table.ColumnNames(query2), List.Transform(Table.ColumnNames(query2) as list, every if List.Contains(Table.ColumnNames(Source) as list, _) then _ & ".1" 其他 _)) 在 展开

现在这效果很好,直到我进一步下游到其他合并查询。更多的独立表被引入,合并到合并,合并甚至合并到合并。我最终遇到的问题是“column.1”已经存在,这破坏了后续的查询。

最终,代码需要检查正在合并的 2 个查询中是否有任何重复的列。如果识别出重复项但尚未用 .# 标记,则应将 .1 附加到第二个查询列的列名。同样,如果识别出重复项且以 .1 结尾,则应将其更改为 .2。等等等等。我知道有某种方法可以做到这一点,可能是通过某种迭代循环,但这超出了我的专业知识。

有什么办法可以做到这一点吗?如果你能给我写工作代码,那就加分了。提前非常感谢!

dynamic merge powerquery
1个回答
0
投票

这段代码

let Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
Mutate= List.Transform(Table.ColumnNames(Source), each if List.Contains(Table.ColumnNames(Table1),_) then _&".1" else _),
#"Rename" = Table.RenameColumns(Source,List.Zip({Table.ColumnNames(Source),Mutate}))
in #"Rename"

通过每次附加 .1 重命名 Table2 中的列,以不重复 Table1 中的列

© www.soinside.com 2019 - 2024. All rights reserved.