我正在尝试动态调用 Power Query M 中的表。我在下面创建了一个简单的查询来解释我想要做什么。
我希望结果是“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 Server 上找到的客户数据的查询。
因为我将对许多表(不仅仅是客户)执行此操作,所以我想创建一个函数,您可以在其中传递模型名称(即“客户”),然后它将它串在一起以调用查询。
我只是发现 PowerBI 逐渐停止并不断地重新运行不必要的查询,这会降低我的 PC 和网络速度。我认为解决这个问题的一个简单方法是创建虚拟数据,该数据看起来像 SQL Server 的结果,但存储在我的计算机本地。这样,如果我无法访问互联网,我也可以编写查询。
#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
查询 2 的结果是:
╔═══════╦════════╗
║ Word1 ║ Word2 ║
╠═══════╬════════╣
║ It ║ Worked ║
╚═══════╩════════╝
感谢@ImkeF 和@Alejandro 的帮助。
我知道这是一个老问题,已经解决了,我是新手,但我有一个类似的解决方案 - 分享,以防有帮助/如果没有帮助,则获取反馈:-)
TLDR:通过将要引用的步骤封装在记录中来引用同一查询中的动态步骤集
用例:生成一个表,其中包含每个节点树的信息,其中树的深度是动态的。 具体来说,我的树是一个组织结构,其中每个节点都是一个组织单元。
备注:
let ... in
表达式是 a 的语法糖
记录。使用记录结构允许访问每个元素而不是
不仅仅是in
代码:
Max_Level = ...
fx_Get_Level = ( Level as number , Prev_Level_Data as table ) as table => ...
Level_List = List.Transform( { 1 .. Max_Level } , each "L" & Text.From( _ ) ) ,
Levels = Record.SelectFields(
[ L1 = ..
, L2 = fx_Get_Level( 2 , L1 )
...
, L10 = fx_Get_Level( 10 , L9 )
]
, Level_List ) ,
TEST_Append = Table.Combine( Record.FieldValues( Levels ) ) ,