我正在尝试动态调用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上找到的客户数据的查询。
因为我将使用许多表(不仅仅是客户)执行此操作,我想我会创建一个函数,您可以传入模型名称(即“Customer”),然后将它串在一起以调用查询
我发现PowerBI停止运行并不断重新运行不必要的查询,这会破坏我的PC和网络速度。我认为一个简单的方法就是创建看起来像SQL Server结果的虚拟数据,但是本地存储在我的机器上。这样,如果我无法访问互联网,我也可以编写查询。
答案 0 :(得分:2)
#shared包含所有可用查询和库函数的列表,因此您可以执行以下操作:
Record.Field(#shared, "It " & "Worked")
答案 1 :(得分:1)
如果您使用此:
= Expression.Evaluate("Source"&"1", #shared)
您可以动态引用其他查询。但不是同一查询中的其他步骤(似乎)。所以它必须坐在一个新的查询中。
或者你的问题是:
Text.Combine({"It", "Worked"}, " ")
答案 2 :(得分:0)
由于@ImkeF提供的信息,我完成了这项工作。
我首先必须拆分两个查询,以便使用完整的in
#shared
表达式对Source1进行评估,然后可以通过let
Source1 = Table.FromList(
{
[Word1="It",Word2="Worked"]
},
Record.FieldValues,
{"Word1","Word2"}
)
in
Source1
访问。
QUERY 1
let
Source2 = Expression.Evaluate("Source"&"1", #shared)
in
Source2
查询2
╔═══════╦════════╗
║ Word1 ║ Word2 ║
╠═══════╬════════╣
║ It ║ Worked ║
╚═══════╩════════╝
这有QUERY 2导致:
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Module Module1
Sub ReadInformation() 'Line 1
Dim oXL As Excel.Application
Dim oWB As Excel.Workbook
Dim oWS As Excel.Worksheet
Dim filepath2 As String 'Line 5
filepath2 = "C:\Users\IEN 271\Desktop\sample.xlsx"
If FileInUse(filepath2) Then
oXL = New Excel.Application
oXL = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"), Excel.Application)
oWB = GetObject("C:\Users\IEN 271\Desktop\sample.xlsx")
oWS = oWB.Worksheets("sampleSheet")
oWS.Activate()
Else
oXL = New Excel.Application
oXL.Visible = True
oWB = oXL.Workbooks.Open("C:\Users\IEN 271\Desktop\sample.xlsx", [ReadOnly]:=False)
oWS = oWB.Worksheets("sampleSheet")
oWS.Activate()
End If
'Script for reading process (fine)
End Sub
感谢@ImkeF和@Alejandro的帮助。