1

我正在尝试动态调用 Power Query M 中的表。我在下面创建了一个简单的查询来解释我想要做什么。

我希望结果是“它有效”,而不是我目前得到的“Source1”。

let
  Source1 =  Table.FromList(
    {
      [Word1="It",Word2="Worked"]
    },
    Record.FieldValues,
    {"Word1","Word2"}
  ),
  Source2 = "Source" & "1"
in
  Source2

用例详细信息:

我正在尝试这样做,以便可以根据条件调用查询。如:

if ENV = "production" then
  Customer_s
else
  Customer_m

WhereCustomer_s是检索在 CSV 文件中找到的客户数据的查询,是检索Customer_m在 SQL Server 上找到的客户数据的查询。

因为我将使用许多表(不仅仅是客户)来执行此操作,所以我想我会创建一个函数,您可以在其中传递模型名称(即“客户”),然后它将它串在一起以调用查询。

我只是发现 PowerBI 停止运行并不断地重新运行不必要的查询,这正在扼杀我的 PC 和网络速度。我认为解决此问题的一种简单方法是创建看起来像 SQL Server 的结果但存储在本地计算机上的虚拟数据。这样,如果我无法访问互联网,我也可以编写查询。

4

3 回答 3

2

#shared 包含所有可用查询和库函数的列表,因此您可以执行以下操作: Record.Field(#shared, "It " & "Worked")

于 2016-03-14T17:33:41.740 回答
1

如果你使用这个:

= Expression.Evaluate("Source"&"1", #shared)

您可以动态引用其他查询。但不是同一查询中的其他步骤(看起来)。所以它必须坐在一个新的查询中。

或者您的问题是:

 Text.Combine({"It", "Worked"}, " ")

?

于 2016-03-14T20:57:10.163 回答
0

感谢@ImkeF 提供的信息,我完成了这项工作。

我首先必须拆分这两个查询,以便使用完整let in表达式对 Source1 进行评估,然后可以通过#shared.

查询 1

let
  Source1 =  Table.FromList(
    {
      [Word1="It",Word2="Worked"]
    },
    Record.FieldValues,
    {"Word1","Word2"}
  )
in
  Source1

查询 2

let
    Source2 = Expression.Evaluate("Source"&"1", #shared)
in
    Source2

这有 QUERY 2 导致:

╔═══════╦════════╗
║ Word1 ║ Word2  ║
╠═══════╬════════╣
║ It    ║ Worked ║
╚═══════╩════════╝

感谢@ImkeF 和@Alejandro 的帮助。

于 2016-03-14T23:17:23.317 回答