webdevqa.jp.net

Power QuerySQLクエリのパラメータ化されたIN句

スプレッドシートのテーブルのセルから読み取った値を使用してPowerQuerySQLステートメントをパラメーター化する (およびコード化されたもの)を見てきました。しかし、これらは常にmyField = <parameter>のような単純な論理条件を扱います。 IN句(myField IN <values>)をパラメータ化したいと思います。ここでは、任意の数のvaluesがExcelテーブル(これも同じファイル内)から読み取られます。誰かがこれを行う方法を知っていますか?

1
Dmitry B.

醜いですが、うまくいくようです。

  1. 必要なパラメータ値の単一列「parameterValue」テーブルをキャプチャするPQクエリを作成します
  2. ダミー列を追加し、すべての行をダミーでグループ化します
  3. text.Combineを使用してパラメータリストを作成し、他の列を削除します
  4. セル値にドリルダウン
  5. iN句なしで目的のSQLクエリを作成します(効率のために「selecttop 1 ...」を使用します)
  6. advanced Editorを使用して、sql query delete'top 1 'を変更し、ステップ1のクエリをINパラメーターとして受け入れます。

query1:

let
    source = *yourData*,
    addDummy = Table.AddColumn(source, "Custom", each 1),
    group = Table.Group(addDummy, {"Custom"}, {{"Count", each _, type table}}),
    string = Table.AddColumn(group, "queryString", each Text.Combine([Count][parameterValue],"','")),
    removeOtherColumns = Table.SelectColumns(string,{"queryString"}),
    queryString = removeOtherColumns{0}[queryString]
in
    queryString

その後

query2:

let
    Source = Sql.Database("*serverName*", "*dbName*", [Query=
Text.Replace("
select * from x
where parameterValue in('" & query1 & ")", ")", "')" )
])
in 
Source
1
stretch

Ken Pulsは、Power Queryでのパラメーターテーブルの使用について、次のブログで優れた記事を書いています: http://www.excelguru.ca/blog/2014/11/26/building-a-parameter-table- for-power-query /

エグゼクティブサマリー:パラメーターのテーブルを作成し、指定されたパラメーターを読み取る関数を記述し、Mコードでその関数を使用して、目的のパラメーターを動的に適用します。

SQLステートメントを文字列として作成するには、このアプローチを拡張する必要がある場合があります。

0
teylyn

最初にPowerQueryを作成します。 Excelテーブルの行で読み取る「値」。 Load To = ConnectionOnlyに設定します。

次に、メインのSQLベースのクエリで、その新しい「値」クエリとマージし、結合の種類=内部を設定します。

0
Mike Honey