我正在尝试使用单元格作为Excel powerquery中的参数。查询在没有这个的情况下工作,但我必须手动输入值,我需要在查询中不断更改它们以获得我想要的结果。
查询(高级编辑):
let
Criteria01 = Excel.CurrentWorkbook(){[Name="Servers"]}[Content][ServerSearch]{0},
Criteria02 = Excel.CurrentWorkbook(){[Name="Servers"]}[Content][ServerSearch]{1},
Criteria03 = Excel.CurrentWorkbook(){[Name="Servers"]}[Content][ServerSearch]{2},
Source = Sql.Database("SERVERNAMEHERE", "DATABASENAMEHERE", [Query="SELECT DISTINCT [...........] AND (TABLEPREF.COLUMNHERE like '%MANUALVALUE01%' OR#(lf)TABLEPREF.COLUMNHERE like '%MANUALVALUE02%' OR#(lf)TABLEPREF.COLUMNHERE like '%MANUALVALUE03%' OR#(lf)TABLEPREF.COLUMNHERE like Criteria01)#(lf)#(lf)#(lf)order by 1 asc"])
in
Source
“Servers”是表名,“ServerSearch”是列标题。如果我检查Criteria01 / etc的步骤,它将显示我需要使用的该表的正确值。
在Sql-Server中完成的原始查询。使用 LIKE'%MANUALVALUES%'行运行查询时没有问题。
我的主要目标是从表格中的表格中自动获取“MANUALVALUES”的N值,这将用作比较的输入 WHERE TABLEPREF.COLUMNHERE,如'%VALUEHERE %'。我必须使用这个,我无法获得整个表/数据库,因为除了我想要的结果之外,还有太多的结果。
然而,出于测试目的,我尝试仅使用1-3个值,即此表的前3个(上面的查询中的条件{0} {1} {2})。但是,如果我尝试执行像
DataSource.Error: Microsoft SQL: Invalid column name 'Criteria01'.
Details:
DataSourceKind=SQL
DataSourcePath=dalsql390;itdw
Message=Invalid column name 'Criteria01'.
Number=207
Class=16
所以我的问题是:
如何在查询中引用此值?自从我写的方式 那个问题给我带来了那个错误。
另请注意,如果更改 TABLEPREF.COLUMNHERE之类的话 Criteria01 到 CHG1.CI_Name就像“Criteria01”我得到了 以下错误:
Expression.SyntaxError: Token Comma expected.
答案 0 :(得分:1)
这将获得该值,但您不能通过在其中放置步骤名称来引用文本值内的步骤。
您可以选择动态执行此操作。
Value.NativeQuery
创建参数化查询,您可以在其中传入其他值作为参数。例如,Value.NativeQuery(Sql.Database("SERVERNAMEHERE", "DATABASENAMEHERE"), "select @a, @b", [a = 1, b = "x"])
将返回表[1,x]。您可以在记录值中输入步骤名称来传递它(例如,将" x"替换为Criteria01)。[Query = "select " & Criteria01 ";"]
。这是非常不鼓励的,因为这可能导致SQL注入问题。对于第三个问题,它取决于您想要对值列表执行的操作。在某些时候,您可能需要List.Accumulate
将它们全部转换为单个文本值,该值可以放在查询值中,也可以将它们转换为记录以放入参数值。