Power BI /查询,动态选择列

时间:2018-05-28 09:30:33

标签: powerbi powerquery

出于某种原因,我需要提取一个表,在动态查询中动态选择列。

例如,

在查询1中,我有Columns ("ID", "column1", "column2","column3","column4", "column5", "column6")

在查询2中,这是来自另一个源的列表,其中包含我需要的列标签列表,例如。 ("column1", "column5", "column6") <--- String

所以我希望在我的决赛桌中有列("ID", "column1", "column5", "column6")

对此有什么好的建议吗?

1 个答案:

答案 0 :(得分:3)

这是一个可能的解决方案......

假设您的Query1如下所示:

enter image description here

您的Query2就是我在高级编辑器中创建的列表,其列表包含以下代码:

let
    Source = {"column1", "column5", "column6"}
in
    Source

enter image description here

然后,在Query1中,您可以使用Home&gt;删除列(下拉箭头)&gt;删除其他列以开始使用,然后使用List.Combine({{"ID"},Query2})将花括号(包括花括号本身)替换为零件。例如,如果在选择“删除其他列”时选择了如上所述的“查询1 ID”列,则会看到= Table.SelectColumns(Source,{"ID"})。在这种情况下,您可以将{"ID"}替换为List.Combine({{"ID"},Query2})

List.Combine将添加ID列,因为它不是Query2列表的一部分。

结果如下:

enter image description here

这是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:

enter image description here

您可以通过Transform&gt;将其更改为列列表拆分柱&gt;通过分隔符&gt; (选择逗号,每次出现分隔符,高级选项,拆分为行并单击确定)。然后你会想做Transform&gt;格式&gt;修剪,去除杂散的前导空间。

在这种情况下,您还必须将上面讨论的删除其他列代码从List.Combine({{"ID"},Query2})更改为List.Combine({{"ID"},Query2[Column Names]}),以说明您正在使用列中的列表名为Query2的表中命名的列名,而不是上面最初完成的名为Query2的直列表。