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

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 は、使用される変換と提供されるネイティブ クエリを考慮して、最適なクエリを作成するために最善を尽くします。

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

ヒント

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