使用动态标识符调用 table

Call a table using a dynamic identifier

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

我希望结果是 "It Worked" 而不是我目前得到的 "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

其中 Customer_s 是检索在 CSV 文件中找到的客户数据的查询,Customer_m 是检索在 SQL 服务器上找到的客户数据的查询。

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

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

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

如果你使用这个:

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

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

或者您的问题是:

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

?

感谢@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 的帮助。