Power Queryでのクエリ評価とクエリ フォールディングの概要

Power Queryは、M クエリを評価して、結果に必要なデータと変換を決定します。 評価中、クエリ フォールディングは、サポートされている変換をデータ ソースが実行できる操作に変換しようとします。 フォールドできない変換は、Power Query エンジンで実行されます。

Power Query M スクリプトとは

M スクリプト (M コードとも呼ばれます) は、Power Query がクエリ結果を生成するために評価する Power Query M 数式言語 の関数と構文のセットです。 すべてのクエリには M スクリプトがあります。それが Power Query によって作成されたものであれ、詳細エディターで自分で記述したものであれ、空白のクエリに入力したものであれ、同じです。

ヒント

M スクリプトは、データを準備する方法を説明するレシピと考えることができます。

M スクリプトを作成する最も一般的な方法は、Power Query エディターを使用する方法です。 たとえば、SQL Server データベースなどのデータ ソースに接続すると、画面の右側に、適用されたステップと呼ばれるセクションがあることに注意してください。 このセクションでは、クエリで使用されるすべての手順または変換を示します。 この意味で、Power Query エディターは、必要な変換に適した M スクリプトを作成するのに役立つインターフェイスとして機能し、使用するコードが有効であることを確認します。

M スクリプトは、Power Query エディターで次の操作を行うために使用されます。

  • クエリを一連の手順として表示し、ステップを作成または変更できるようにします。
  • ダイアグラム ビューを表示します。

適用されたステップとデータ プレビュー ビューのスクリーンショット。

このSQL Server例では、[適用されたステップ] ウィンドウに次の手順が含まれています。

  • ソース: データ ソースへの接続を確立します。 この場合は、SQL Server データベースへの接続です。
  • ナビゲーション: データベース内の特定のテーブルに移動します。
  • その他の列を削除しました: 保持するテーブルの列を選択します。
  • 並べ替えられた行: 1 つ以上の列を使用してテーブルを並べ替えます。
  • 上位の行を保持する: テーブルの一部の行のみをテーブルの先頭から保持するようにテーブルをフィルター処理します。

Power Queryで M スクリプトを表示および編集する

この一連のステップ名は、Power Queryが作成したMスクリプトを親しみやすく表示する方法です。 M スクリプト全体は、いくつかの方法で表示できます。 Power Queryで、[表示] タブで詳細エディターを選択します。[ホーム] タブ[クエリ] グループから詳細エディターを選択することもできます。Power Queryの一部のバージョンでは、[ビュー] タブに移動し、[レイアウト] グループから [スクリプト ビュー] >Query スクリプトを選択して、数式バーのビューを変更してクエリ スクリプトを表示することもできます。

完全な M スクリプトと、適用されたステップの対応する名前を含むスクリーンショット。

[ 適用されたステップ ] ウィンドウに表示されるほとんどの名前は、M スクリプトの場合と同様に使用されます。 M 言語の 識別子 を使用して、クエリのステップに名前を付けます。 M のステップ名の周囲に余分な文字が折り返されることがありますが、これらの文字は適用されたステップに表示されません。 たとえば、 #"Kept top rows"は、これらの余分な文字のために 引用符で囲まれた識別子 として分類されます。 引用符で囲まれた識別子を使用すると、キーワード、空白文字、コメント、演算子、区切り記号など、0 個以上の Unicode 文字のシーケンスを識別子として使用できます。 M 言語の 識別子 の詳細については、 字句構造を参照してください。

Power Query エディターを使用してクエリに加えた変更は、クエリの M スクリプトを自動的に更新します。 たとえば、[ 上位の行を保持 する] ステップ名を [上位 20 行] に変更すると、クエリ スクリプト ビューでも名前が変更されます。

適用されたステップ名が上位 20 行に変更され、M スクリプトも更新されるスクリーンショット。

Power Query エディターを使用して M スクリプトの全部または大部分を作成することをお勧めしますが、M スクリプトの一部を手動で追加または変更できます。 詳細については、 M 言語リファレンスを参照してください

この記事では、M スクリプトはクエリ内の Power Query M コードを参照します。これは、詳細エディターまたは数式バーのクエリ スクリプト ビューからアクセスできます。

Power Query が M クエリを評価する方法

Power Queryは、必要な出力とその生成方法を決定して、M スクリプトを評価します。 外部データ ソースを使用するクエリの場合、評価には、ソースからのデータの要求、Power Query エンジンで実行されるすべての変換の処理、および変換先への結果の読み込みが含まれます。

次の図では、Power Queryでクエリが評価されるときに発生するプロセスを調べられます。

M スクリプトから最終的な出力までのクエリ評価のパスを示す図。

  1. 高度なエディター内にある M スクリプトは、Power Query エンジンに送信されます。 資格情報やデータ ソースのプライバシー レベルなど、その他の重要な情報も含まれます。
  2. Power Queryは、データ ソースから抽出する必要があるデータを決定し、データ ソースに要求を送信します。
  3. データ ソースは、要求されたデータをPower Queryに転送することで、Power Queryからの要求に応答します。
  4. Power Queryデータ ソースから受信データを受信し、必要に応じてPower Query エンジンを使用して変換を実行します。
  5. Power Query は、変換結果を読み込み先に読み込みます。

このフローには、SQL Server データベースから読み取るクエリが表示されます。 外部データ ソースのないクエリの場合、Power Queryは M スクリプトを評価して結果を生成しますが、データ ソースの要求と転送のステージは適用されません。

クエリ フォールディングによってクエリの評価がどのように最適化されるか

Power QueryがMスクリプトを読み取ると、そのスクリプトは最適化プロセスを経て実行され、クエリがより効率的に評価されます。 このプロセスでは、クエリからデータ ソースにオフロードできるステップ (変換) を決定します。 また、Power Query エンジンを使用して評価する必要がある他のステップも決定します。

この最適化プロセスは 、クエリ フォールディングと呼ばれます。 クエリ フォールディングは、サポートされている M 変換をデータ ソースが実行できる操作に変換します。 Power Queryは、データ ソースで可能な限り多くのクエリを実行し、Power Query エンジン内の残りの変換を評価します。

Important

Power Query M 数式言語 (M 言語とも呼ばれます) のすべての規則に従います。 最も注目すべき点は、最適化プロセス中に レイジー評価 が重要な役割を果たします。 このプロセスでは、Power Queryクエリからの特定の変換を評価する必要があるかを理解します。 Power Queryは、クエリの出力に含まれないため評価する必要がない他の変換を理解します。

さらに、複数のソースが関係する場合は、クエリを評価するときに、各データ ソースのデータ プライバシー レベルが考慮されます。 詳細情報: データ プライバシー ファイアウォールの背後にある

次の図は、この最適化プロセスで実行される手順を示しています。

クエリ評価中の最適化プロセスを示す図。

  1. 高度なエディター内にある M スクリプトは、Power Query エンジンに送信されます。 資格情報やデータ ソースのプライバシー レベルなど、その他の重要な情報も提供されます。
  2. クエリ フォールディング メカニズムは、メタデータ要求を送信して、データ ソースの機能、テーブル スキーマ、データ ソースのテーブル間のリレーションシップ、およびその他のメタデータを決定します。
  3. 受信したメタデータに基づいて、クエリ フォールディング メカニズムによって、データ ソースから抽出する情報と、Power Query エンジン内で実行する必要がある変換が決定されます。 データ ソースからデータを取得し、必要に応じて Power Query エンジン内の受信データを変換する命令を他の 2 つのコンポーネントに送信します。
  4. Power Queryの内部コンポーネントが命令を受け取った後、Power Queryはデータ ソース クエリを使用してデータ ソースに要求を送信します。
  5. データ ソースは、Power Queryから要求を受け取り、Power Query エンジンにデータを転送します。
  6. データがPower Query内に入ると、Power Query内の変換エンジン (マッシュアップ エンジンとも呼ばれます) は、折り返したりデータ ソースにオフロードしたりできなかった変換を実行します。
  7. Power Query は、変換された結果を読み込み先に読み込みます。

M スクリプトで使用される変換とデータ ソースに応じて、Power Queryは受信データをストリーミングするかバッファーにするかを決定します。

Power Queryでのクエリ フォールディングの機能

クエリ フォールディングの目的は、クエリの変換を計算できるデータ ソースに対して、クエリの評価の多くをオフロードまたはプッシュすることです。

クエリ フォールディング メカニズムは、M スクリプトをデータ ソースが解釈して実行できる言語に変換することで、この目標を達成します。 その後、評価がデータ ソースにプッシュされ、その評価の結果がPower Queryに送信されます。

多くの場合、この操作では、データ ソースから必要なすべてのデータを抽出し、Power Query エンジンで必要なすべての変換を実行するよりも、クエリの実行が高速になります。

get データ エクスペリエンスを使用する場合は、最終的にデータ ソースに接続できるプロセスについてPower Queryガイドします。 その場合、Power Query は、データをアクセスする関数として分類される M 言語の一連の関数を使用します。 これらの特定の関数では、メカニズムとプロトコルを使用して、データ ソースが理解できる言語を使用してデータ ソースに接続します。

データ ソース関数の後の変換の場合、クエリ フォールディング メカニズムは、Power Query エンジンで処理するのではなく、データ ソースにオフロードできるかどうかを確認します。

Important

データ ソース関数は、クエリの ソース ステップとして一般的に表示され、データ ソースのデータをネイティブ言語でクエリします。 データ ソース関数の後の変換の場合、Power Queryはコネクタと変換でサポートされている場合にのみクエリ フォールディングを試みます。 このメカニズムでは、サポートされている変換を 1 つのデータ ソース クエリに変換して結合できます。

Power Query におけるクエリ フォールディングの結果

クエリの構造によっては、クエリ フォールディング メカニズムに次の 3 つの結果が考えられます。

クエリフォールディングの結果 データ ソースでの処理 Power Query エンジンでの処理
フル クエリ フォールディング データ ソースは、すべてのクエリ変換を処理します。 Power Query エンジンでは最小限の処理が行われます。
部分クエリ フォールディング データ ソースは、Power Queryネイティブ クエリ言語に変換できる変換を処理します。 Power Query エンジンは、残りの変換を処理します。
クエリフォールディングなし データ ソースは、クエリ変換を処理せずに、要求されたソース データを返します。 Power Query エンジンは、必要なすべての変換を処理します。

クエリ フォールディングをサポートするデータ ソース

クエリ フォールディングのサポートは、コネクタ、データ ソース、およびクエリ内の変換によって異なります。 SQL ServerOData フィードなどのクエリ処理機能を備えた構造化データ ソース用のコネクタは、一般的にクエリ フォールディングをサポートします。 CSV ファイルやExcel ファイルなどのクエリ エンジンのないソースでは、クエリ フォールディングはサポートされていません。

最適化中に、Power Query エンジンはクエリ ステップを並べ替える場合があります。 より多くの処理リソースとクエリ フォールディング機能を備えたデータ ソースを使用すると、Power Query エンジンではなくデータ ソースで処理が行われるため、クエリの読み込み時間を短縮できます。

Power Query Online でクエリ フォールディングを確認する

Power Query Online では、適用されたステップの横にあるクエリ フォールディング インジケーターを使用して、どのステップがフォールドするかを識別します。 クエリ プランを使用して、データ ソースで実行される操作と、Power Query エンジンで実行される操作を確認することもできます。 これらの機能は、Power Query Online でのみ使用できます。

使用可能な場合は、ネイティブ クエリの表示またはデータ ソースの表示クエリを使用して、データ ソースに送信Power Query要求を検査します。 可用性はコネクタによって異なります。