附加多个现有查询

时间:2017-07-20 11:41:19

标签: powerquery

把头发拉出来......

我正在尝试整合多个仅连接查询(查询Sharepoint Excel和csv文件)。每个文件都有一个唯一的转换,因此需要对每个文件进行唯一查询。这在仅连接查询和转储到表中以进行测试时非常有效。

到目前为止,我的方式是这些关键线:

let
Source = #sections,
Section1 = Source[Section1],
#"QueryList" = Record.ToTable(Section1),
#"Test Errors" = //Omitted tests for error queries
#"Remove Errors" = //Omitted removes error queries
#"FilterOut" = //Omitted filters out queries I don't want
#"Expanded Value" = Table.ExpandTableColumn(#"FilterOut", "Value", {...fields...}, {...fieldsagain...}), ...yada yada rest of code...

它合并得很漂亮......但它只返回缓存中加载的数据以进行预览,而不是完整的数据刷新(即使使用“全部刷新”按钮,也可以通过VBA)。

我尽可能多地搜索解决方案,将想法从同事那里扯下来,除了设置查询之外没多少其他建议:

  • 禁用后台刷新
  • 打开时刷新

真的希望这会解决问题......但事实并非如此。

重新查看Append Query,并尝试使用列表中的“Each”子句附加查询...但是收到错误:

    let

//Set the Header Row
#"BaseTable" = //Create the headers ... side-step query firewall issues

//Get List of Query Names
Source = #sections,
Section1 = Source[Section1],
#"QueryList" = Record.ToTable(Section1),
#"Test Errors" = //Omitted tests for error queries
#"Remove Errors" = //Omitted removes error queries
#"FilterOut" = //Omitted filters out queries I don't want
//Custom field to get the query names just right
#"CustomName" //Custom field [QUERY_N] to get the query names just right
#"Removed Other Columns1" = Table.SelectColumns(#"CustomName",{"QUERY_N"}),
//Final table with a single column listing all the query names
QueryListing = #"Removed Other Columns1",

//Appending
#"Appended Query" = Table.Combine({#"BaseTable", each QueryListing}) in#"Appended Query" 

现在我收到了错误:

Expression.Error: We cannot convert a value of type Function to type Table. Details: Value=Function Type=Type

尝试使用备用命名修补查询名称,以确保它不是列表位中的杂散字符集:

#"CustomName" //Custom field [QUERY_N] to get the query names just right,
#"Removed Other Columns1" = Table.SelectColumns(#"CustomName",{"QUERY_N"}),
QueryListing = Table.ToList(#"Removed Other Columns1"),

//Appending
#"Appended Query" = Table.Combine({#"BaseTable", each "#" & """" & QueryListing & """"})

但是nope,不是字符串错误,刷新后会出现相同的错误消息。

关于如何让它发挥作用的任何想法?

1 个答案:

答案 0 :(得分:1)

each创建了一个函数,因为each ...是编写(_) => ...的较短方式。您可以使用&运算符组合两个列表。

如果您将查询值表格向下钻取到#sections,则应直接使用这些值而不是获取其名称。如果QueryValues是包含表值的一列表的步骤的名称,并且该列名称为Column,那么这应该有效:

Table.Combine({BaseTable} & QueryListing[Column])

对于第一种方法,您如何知道缺少字段?是缺少列,还是它包含所有列而不是所有行?