出于某种原因,我需要提取一个表,在动态查询中动态选择列。
例如,
在查询1中,我有Columns ("ID", "column1", "column2","column3","column4", "column5", "column6")
在查询2中,这是来自另一个源的列表,其中包含我需要的列标签列表,例如。 ("column1", "column5", "column6") <--- String
所以我希望在我的决赛桌中有列("ID", "column1", "column5", "column6")
。
对此有什么好的建议吗?
答案 0 :(得分:3)
这是一个可能的解决方案......
假设您的Query1如下所示:
您的Query2就是我在高级编辑器中创建的列表,其列表包含以下代码:
let
Source = {"column1", "column5", "column6"}
in
Source
然后,在Query1中,您可以使用Home&gt;删除列(下拉箭头)&gt;删除其他列以开始使用,然后使用List.Combine({{"ID"},Query2})
将花括号(包括花括号本身)替换为零件。例如,如果在选择“删除其他列”时选择了如上所述的“查询1 ID”列,则会看到= Table.SelectColumns(Source,{"ID"})
。在这种情况下,您可以将{"ID"}
替换为List.Combine({{"ID"},Query2})
。
List.Combine
将添加ID列,因为它不是Query2列表的一部分。
结果如下:
这是Query1代码的样子(它从excel中提取表格):
let
Source = Excel.CurrentWorkbook(){[Name="Query1"]}[Content],
#"Removed Other Columns" = Table.SelectColumns(Source, List.Combine({{"ID"},Query2}))
in
#"Removed Other Columns"
P.S。如果您将列标签列表作为字符串放入表中的单行列中,则将其作为Query2:
您可以通过Transform&gt;将其更改为列列表拆分柱&gt;通过分隔符&gt; (选择逗号,每次出现分隔符,高级选项,拆分为行并单击确定)。然后你会想做Transform&gt;格式&gt;修剪,去除杂散的前导空间。
在这种情况下,您还必须将上面讨论的删除其他列代码从List.Combine({{"ID"},Query2})
更改为List.Combine({{"ID"},Query2[Column Names]})
,以说明您正在使用列中的列表名为Query2的表中命名的列名,而不是上面最初完成的名为Query2的直列表。