【问题标题】:Power Query - How to use an Excel 2016 cell value in a Oracle SQL queryPower Query - 如何在 Oracle SQL 查询中使用 Excel 2016 单元格值
【发布时间】:2017-03-06 06:42:58
【问题描述】:

我决定在 Excel 2016 中使用 Power Query 来加载和解释我从 Oracle 数据库中检索的一些数据。我有几张要根据特定执行代码 EXE_ID 加载的工作表,根据我打算查看的数据,这些工作表可能会有所不同。

我想要做的应该是相对简单的,至少根据我到目前为止看到的所有教程:我只想在一张表中指定 EXE_ID 并希望每张表中的所有查询都是能够阅读并相应地加载信息。问题是我总是遇到某种错误。

这是我最近的尝试:

我创建了一个简单的表,其中包含一个名为 Current_EXE_ID 的表头和下面的单个值 43。

之后我创建了一个空白查询,并在其中添加了以下代码:

let
  Source = Excel.CurrentWorkbook(){[Name="GetExeId"]}[Content],
  #"Changed Type" = Table.TransformColumnTypes(Source,{{"Current_EXE_ID", type text}}),
  #"Current_EXE_ID" = #"Changed Type"{0}[Current_EXE_ID]
in
  #"Current_EXE_ID"

我的想法只是读取表中的值 43,将其转换为文本并将其存储在 #"Current_EXE_ID" 变量中,以便我可以从不同的工作表中检索它。

当我尝试在不同工作表的查询中包含变量并尝试访问它时,我收到以下错误消息:

[Expression.Error] 导入 CUrrent_EXE_ID 不匹配导出。做过 你错过了一个模块参考?

这是我的做法:

let
    Source = Oracle.Database("<DB_NAME>", [Query="SELECT * #(lf)FROM TABLE_NAME#(lf)WHERE EXE_ID = " & #"Current_EXE_ID"])
in
    Source

我也尝试了不同的方法,例如创建一个参数表,并通过空白查询页面附加以下代码:

(ParameterName as text) =>
let
ParamSource = Excel.CurrentWorkbook(){[Name="Parameters"]}[Content],
ParamRow = Table.SelectRows(ParamSource, each ([Parameter] = ParameterName)),
Value=
if Table.IsEmpty(ParamRow)=true
then null
else Record.Field(ParamRow{0},"Value")
in
Value

我将函数命名为 fnGetExeId 并将其合并到 Oracle SQL 查询中

让 Source = Oracle.Database("", [Query="SELECT * #(lf)FROM TABLE_NAME#(lf)WHERE EXE_ID =" & fnGetExeId("EXE_ID") ]) 在 来源

但我最终得到了这个错误:

Expression.Error:我们不能将运算符 & 应用于文本和数字类型。 细节: 运算符=& Left=SELECT * #(lf)FROM TABLE_NAME#(lf)WHERE EXE_ID = 右=43

如果有人至少可以解释错误原因,那就太好了!

提前致谢! 米格尔

【问题讨论】:

    标签: oracle powerquery


    【解决方案1】:

    1) 第一个 Expression.Error 看起来像是一个错字。是否有任何地方将查询引用为#"CUrrent_EXE_ID" 而不是#"Current_EXE_ID"?

    2) 看起来Record.Field(ParamRow{0},"Value") 在您发布的函数中返回了一个数字。如果您打算只使用它来构建 SQL 查询,您可以将其更改为 Number.ToText(Record.Field(ParamRow{0},"Value")),然后它应该可以工作了。

    如果你只需要做一个简单的 WHERE 语句,但是,你也可以像这样使用Table.SelectRows:

    Table.SelectRows(Source, each [EXE_ID] = Current_EXE_ID)

    这是首选解决方案,因为它允许 Power Query 将进一步的转换折叠到它发送到服务器的查询中,并且消除了 SQL 注入的风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多