ネイティブ クエリでのクエリ フォールディング

Power Query では、ネイティブ クエリを定義し、データ ソースに対して実行できます。 「ネイティブ データベース クエリを使用したデータベースからのデータのインポート」に関する記事では、複数のデータ ソースでこのプロセスを実行する方法について説明しています。 ただし、この記事で説明されているプロセスを使用すると、クエリでは後続のクエリ ステップからのクエリ フォールディングを利用できなくなります。

この記事では、Value.NativeQuery 関数を使用してデータ ソースに対してネイティブ クエリを作成し、クエリの後続の手順でクエリ フォールディング メカニズムをアクティブにしておく別の方法をご紹介します。

Note

この記事全体で使用される概念について理解を深めるために、クエリ フォールディングクエリ フォールディング インジケーターに関するドキュメントを参照することをお勧めします。

サポートされているデータ コネクタ

次のセクションで説明する方法は、次のデータ コネクタに適用されます。

データソースからターゲットに接続する

Note

このプロセスを紹介するために、この記事では SQL Server コネクタと AdventureWorks2019 サンプル データベースを使用します。 エクスペリエンスはコネクタによって異なる場合がありますが、この記事では、サポートされているコネクタのネイティブ クエリに対してクエリ フォールディング機能を有効にする方法の基本について説明します。

データ ソースに接続するときは、ネイティブ クエリを実行するノードまたはレベルに接続することが重要です。 この記事の例では、そのノードはサーバー内のデータベース レベルになります。

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 番目のパラメーターに省略可能なレコードを使用することです。

Value.NativeQuery 関数と明示的な SQL クエリを使用した新しいカスタム ステップ式。

Note

Value.NativeQuery 関数の詳細については、公式ドキュメントの記事を参照してください。

数式を入力すると、特定のステップでネイティブ クエリを実行できるようにするよう求める警告が表示されます。 この手順を評価するには、[続行] をクリックします。

この SQL ステートメントでは、3 つの行と 2 つの列のみを含むテーブルが生成されます。

ターゲット データベースに対して評価されたネイティブ クエリ。

クエリ フォールディングをテストする

クエリのクエリ フォールディングをテストするには、いずれかの列にフィルターを適用して、適用されたステップ セクションのクエリ フォールディング インジケーターにステップがフォールディングされていることを示すかどうかを確認します。 この場合、DepartmentID 列をフィルター処理して、2 に等しくない値を含めることができます。

2 に等しくない値のみを含むように、DepartmentID 列をフィルタリングします。

このフィルターを追加した後、クエリ フォールディング インジケーターが、この新しいステップで発生しているクエリ フォールディングを引き続き示していることを確認できます。

適用されたステップ セクションのデータ ソースに折り返し表示されるフィルター ステップ。

データ ソースに送信されるクエリをさらに検証するには、[フィルター処理された行] ステップを右クリックし、[クエリ プランの表示] というオプションを選択して、そのステップのクエリ プランを確認します。

クエリ プラン ビューでは、画面の左側にある Value.NativeQuery という名前のノードに、詳細を表示するハイパーリンク テキストが含まれていることがわかります。 このハイパーリンク テキストをクリックすると、SQL Server データベースに送信されている正確なクエリを表示できます。

ネイティブ クエリは別の SELECT ステートメントにラップされ、元のクエリのサブクエリが作成されます。 Power Query は、使用される変換と提供されるネイティブ クエリを考慮して、最適なクエリを作成するために最善を尽くします。

[フィルター処理された行] ステップのクエリ プラン。

ヒント

クエリ フォールディングが不可能だったためにエラーが発生するシナリオでは、元のネイティブ クエリのサブクエリとしてステップを検証して、構文またはコンテキストの競合があるかどうかを確認することをお勧めします。