2017-05-10 3 views
2

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 

"サーバー" がテーブル名であり、 "ServerSearch" は列ヘッダです。私がCriteria01/etcのステップをチェックすると、私が使用する必要のあるそのテーブルの正しい値が表示されます。

元のクエリはSql-Serverで行われました。 LIKE '%MANUALVALUES%'行だけでクエリを実行しても問題はありません。

私の主な目標は、WHERE TABLEPREF.COLUMNHERE「%VALUEHEREの%」等を比較するための入力として使用されるシート、内のテーブルから「MANUALVALUES」のN個の値を取得自動的です。私はこれを使用しなければならず、私はテーブル/データベース全体を手に入れることができません。

ただし、この時点では、このテーブルの最初の3つの値(上記のクエリの{0} {1} {2})のみを使用しています。私はCriteria01ようTABLEPREF.COLUMNHEREような何かをしようとした場合しかし、私は次のエラーを取得する:

DataSource.Error: Microsoft SQL: Invalid column name 'Criteria01'. 
Details: 
    DataSourceKind=SQL 
    DataSourcePath=dalsql390;itdw 
    Message=Invalid column name 'Criteria01'. 
    Number=207 
    Class=16 

は、だから私の質問は以下のとおりです。

  1. 私は右で表のセルの値を取得しています方法?意味: Excel.CurrentWorkbook(){[Name = "Servers"]} [Content] [ServerSearch] {0}
  2. クエリでこの値を参照するにはどうすればよいですか?私が を書いた方法は、その質問が私にそのエラーを買ったので。どのように、固定された1及び2の後

    Expression.SyntaxError: Token Comma expected. 
    
  3. ことができます。

    また、私は 次のエラーを取得する "Criteria01" のような Criteria01にCHG1.CI_Nameのようなものであれば変更TABLEPREF.COLUMNHEREに注意してください。私はこれを動的に使用しますか? の例では、インデックス1 2 3の値を取得する代わりに、 テーブル全体を使用したい場合はどうすればよいですか?私はそれを知っています Excel.CurrentWorkbook(){[Name = "Servers"]} [内容]は私に値のテーブル(1列、未知数の行)を持ってきますが、 どうすればこのテーブルを使用しますか私の質問で1のコンテンツ1?

答えて

1

これは値を取得しますが、内部にステップ名を入れてテキスト値の内部のステップを参照することはできません。

これを動的に行うためのオプションがいくつかあります。

  1. Value.NativeQueryを使用して、パラメータとして他の値を渡すことができるパラメータ化されたクエリを作成します。たとえば、Value.NativeQuery(Sql.Database("SERVERNAMEHERE", "DATABASENAMEHERE"), "select @a, @b", [a = 1, b = "x"])はテーブル[1、x]を返します。レコード名にステップ名を入れて渡すことができます(たとえば、 "x"をCriteria01に置き換えます)。
  2. クエリフィールドにテキスト値を直接追加します(例: [Query = "select " & Criteria01 ";"]。これはSQLインジェクションの問題につながる可能性があるため、これは避けてください。

3番目の質問では、値のリストで何をしたいかによって異なります。ある時点では、List.Accumulateが必要になります。クエリ値に入れることができる単一のテキスト値に変換し、それらをパラメータ値に入れるレコードに変換することができます。

関連する問題