动态Excel电源查询

动态Excel电源查询,excel,powerpivot,powerquery,Excel,Powerpivot,Powerquery,我在Excel工作簿中有一个名为“ParameterTable”的表。在这个表中,我存储了要传递给通过Excel Power Query执行的SQL查询的参数 为了从工作簿中提取这些参数,我使用了一个名为“fnGetParameter”的函数。函数代码如下所示: let //Function name and parameters fnGetParameter = (ParameterName as text, ColumnNum as text) => let //Assign Tab

我在Excel工作簿中有一个名为“ParameterTable”的表。在这个表中,我存储了要传递给通过Excel Power Query执行的SQL查询的参数

为了从工作簿中提取这些参数,我使用了一个名为“fnGetParameter”的函数。函数代码如下所示:

let //Function name and parameters
fnGetParameter = (ParameterName as text, ColumnNum as text) =>
let

//Assign Table and Column for function
ParamSource = Excel.CurrentWorkbook(){[Name="ParameterTable"]}[Content],
ParamRow = Table.SelectRows(ParamSource, each ([Parameter Name] = ParameterName)),

//Assign value for return
Value=

if Table.IsEmpty(ParamRow)=true
    then null
else if ColumnNum = "1"
    then Record.Field(ParamRow{0},"Value1")
else if ColumnNum = "2"
    then Record.Field(ParamRow{0},"Value2")
else null

in

Value

in
    fnGetParameter
所以,基本上我可以指定一个参数名和一个列号,这个函数在其他Power查询中调用时会传递它

示例调用如下所示:

let
PassedParameter = Expression.Evaluate("fnGetParameter{"ParamLabel","1"}",[fnGetParameter=fnGetParameter]),
Source = Sql.Database("ServerName", "Databasename", [Query="select * from table where Column1 = " PassedParameter" ])
in Source
我的问题在于,我希望将SQL查询保存到文本文件中并连接到该文本文件,而不是将查询存储在Excel中。出于某种原因,当Power Query尝试调用fnGetParameter函数(工作簿中的用户定义函数)时,SQL查询似乎无法“查看”PQ UDF

我这样做的主要原因(将SQL查询PQs保存到文本文件)是它使编辑文本文件中的查询更容易,并且避免了在其他工作簿使用类似查询时多次更改查询


想法?

下面是一个从文本文件加载power query的示例。我认为您忽略了power query的全部要点,即您可以在UI上随意点击,轻松地转换数据,而它的引擎会为您动态生成SQL。对于这种情况,您最好直接在VBA、.NET或类似工具中编写整个解决方案。下面是一个从文本文件加载power query的示例。我认为您已经错过了power query的全部要点,即您可以在UI上随意点击,轻松地转换数据,而它的引擎会为您动态生成SQL。对于这种情况,您最好直接在VBA、.NET或类似工具中编写整个解决方案。