2016-10-24 2 views
0

Oracle Databaseから取得する一部のデータをロードして解釈するために、Excel 2016でパワークエリーを使用することにしました。私は、特定の実行コード、EXE_IDに基づいてロードしたいいくつかのシートを持っていますが、これは私が見たいデータに応じて異なる場合があります。パワークエリー - Oracle SQLクエリーでExcel 2016セル値を使用する方法

私がやりたかったのは、これまで見たことのあるチュートリアルによれば、比較的単純なものでなければなりません:1つのシートにEXE_IDを指定して、それを読み取ってそれに応じて情報をロードすることができる。問題は、私はいつも何らかのエラーが出ているということです。

ここに私の最新の試みです:

:43

は、その後、私は次のコードを追加した空のクエリを作成し、

私はCurrent_EXE_IDというヘッダと単一の値怒鳴るとの単純なテーブルを作成しました

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" 

ideiaは単にテーブルの値を読み込み、43、それをテキストに変換して# "Current_EXE_ID"変数に格納して、別のシートから取得できるようにしました。

私は別のシートにクエリ内の変数を含めると、それは私が次のエラーメッセージが出ていアクセスをしようとしてみてください。

[Expression.Error] The import CUrrent_EXE_ID matches no exports. Did you miss a module reference?

ここで私はそれをやっている方法は次のとおりです。

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 

私はまた、同様にブランクQueryページを介して結合した次のコードでパラメータテーブルを作成するなど、さまざまなアプローチを、試してみました

私は、関数fnGetExeIdを命名し、Oracle SQLクエリ

がEXE_ID = "& TABLE_NAME#(LF)SELECT * FROM#(LF) "[クエリ=、" ソース= Oracle.Databaseを(" 聞かせて、それを組み込みました ソース

でfnGetExeId(「EXE_ID」) ]) が、私はこのエラーを取得してしまった:誰かが、少なくともエラーが、それは素晴らしいことだ原因を説明することができれば

Expression.Error: We cannot apply operator & to types Text and Number. Details: Operator=& Left=SELECT * #(lf)FROM TABLE_NAME#(lf)WHERE EXE_ID = Right=43

ありがとうございます! Miguel

答えて

0

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)

これは好ましい解決策である、それはへのさらなる変換を折るために電源クエリを可能にするため、クエリはサーバーに送信され、SQLインジェクションのリスクが除去されます。

関連する問題