ネイティブ クエリでのクエリ フォールディング
Power Query では、ネイティブ クエリを定義し、データ ソースに対して実行できます。 「ネイティブ データベース クエリを使用したデータベースからのデータのインポート」に関する記事では、複数のデータ ソースでこのプロセスを実行する方法について説明しています。 ただし、この記事で説明されているプロセスを使用すると、クエリでは後続のクエリ ステップからのクエリ フォールディングを利用できなくなります。
この記事では、Value.NativeQuery 関数を使用してデータ ソースに対してネイティブ クエリを作成し、クエリの後続の手順でクエリ フォールディング メカニズムをアクティブにしておく別の方法をご紹介します。
Note
この記事全体で使用される概念について理解を深めるために、クエリ フォールディングとクエリ フォールディング インジケーターに関するドキュメントを参照することをお勧めします。
サポートされているデータ コネクタ
次のセクションで説明する方法は、次のデータ コネクタに適用されます。
- Amazon Redshift
- Dataverse (拡張コンピューティングを使用する場合)
- Google BigQuery
- PostgreSQL
- SAP HANA
- Snowflake
- SQL Server
データソースからターゲットに接続する
Note
このプロセスを紹介するために、この記事では SQL Server コネクタと AdventureWorks2019 サンプル データベースを使用します。 エクスペリエンスはコネクタによって異なる場合がありますが、この記事では、サポートされているコネクタのネイティブ クエリに対してクエリ フォールディング機能を有効にする方法の基本について説明します。
データ ソースに接続するときは、ネイティブ クエリを実行するノードまたはレベルに接続することが重要です。 この記事の例では、そのノードはサーバー内のデータベース レベルになります。
接続設定を定義し、接続の資格情報を指定すると、データ ソースのナビゲーション ダイアログが開きます。 ナビゲーション ダイアログには、接続できるすべてのオブジェクトが含まれています。
このリストから、ネイティブ クエリが実行されるオブジェクト (ターゲットとも呼ばれます) を選択する必要があります。 この例では、そのオブジェクトはデータベース レベルです。
Power Query のナビゲーター ウィンドウで、データベース ノードを選択して保持 (または右クリック) し、[データの変換] オプションを選択します。 このオプションを選択すると、データベース全体のビューの新しいクエリが作成されます。これは、ネイティブ クエリを実行するために必要なターゲットです。
クエリが Power Query エディターに表示されたら、[適用されたステップ] ウィンドウに [ソース] ステップのみが表示されます。 このステップには、データベース内で使用可能なすべてのオブジェクトを含むテーブルが含まれています。これは、ナビゲーター ウィンドウでの表示方法と同様です。
Value.NativeQuery 関数を使用する
このプロセスの目標は、次の SQL コードを実行し、Power Query を使用してソースに折り返すことができるさらに多くの変換を適用することです。
SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'
最初のステップは、正しいターゲットを定義することでした。この場合、それは SQL コードが実行されるデータベースです。
ステップに適切なターゲットが設定されたら、そのステップ (この場合は適用されたステップのソース) を選択し、数式バーの fx ボタンを選択してカスタム ステップを追加できます。 この例では、数式を次の Source
数式に置き換えます。
Value.NativeQuery(Source, "SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development' ", null, [EnableFolding = true])
この数式の最も重要なコンポーネントは、EnableFolding レコード フィールドが true に設定されている関数の 4 番目のパラメーターに省略可能なレコードを使用することです。
Note
Value.NativeQuery 関数の詳細については、公式ドキュメントの記事を参照してください。
数式を入力すると、特定のステップでネイティブ クエリを実行できるようにするよう求める警告が表示されます。 このステップを評価するには、[続行] を選択します。
この SQL ステートメントでは、3 つの行と 2 つの列のみを含むテーブルが生成されます。
クエリ フォールディングをテストする
クエリのクエリ フォールディングをテストするには、いずれかの列にフィルターを適用して、適用されたステップ セクションのクエリ フォールディング インジケーターにステップがフォールディングされていることを示すかどうかを確認します。 この場合、DepartmentID 列をフィルター処理して、2 に等しくない値を含めることができます。
このフィルターを追加した後、クエリ フォールディング インジケーターが、この新しいステップで発生しているクエリ フォールディングを引き続き示していることを確認できます。
データ ソースに送信されるクエリをさらに検証するには、[フィルター処理された行] ステップを選択して保持 (または右クリック) し、[クエリ プランの表示] オプションを選択して、そのステップのクエリ プランを確認します。
クエリ プラン ビューでは、Value.NativeQuery という名前のノードに、詳細を表示するハイパーリンク テキストが含まれていることがわかります。 このハイパーリンクを選択すると、SQL Server データベースに送信されている正確なクエリを表示できます。
ネイティブ クエリは別の SELECT ステートメントにラップされ、元のクエリのサブクエリが作成されます。 Power Query は、使用される変換と提供されるネイティブ クエリを考慮して、最適なクエリを作成するために最善を尽くします。
ヒント
クエリ フォールディングが不可能だったためにエラーが発生するシナリオでは、元のネイティブ クエリのサブクエリとしてステップを検証して、構文またはコンテキストの競合があるかどうかを確認することをお勧めします。