この記事では、M クエリを処理してデータ ソース要求に変換する方法の基本的な概要について説明します。
Power Query M スクリプト
Power Queryによって作成されたクエリ、高度なエディターで手動で記述されたクエリ、または空白のドキュメントを使用して入力されたクエリは、Power Query M 数式言語の関数と構文で構成されます。 このクエリは、結果を出力するために、Power Query エンジンによって解釈および評価されます。 M スクリプトは、クエリを評価するために必要な一連の命令として機能します。
ヒント
M スクリプトは、データを準備する方法を説明するレシピと考えることができます。
M スクリプトを作成する最も一般的な方法は、Power Query エディターを使用する方法です。 たとえば、SQL Server データベースなどのデータ ソースに接続すると、画面の右側に、適用された手順というセクションがあることに注意してください。 このセクションには、クエリで使用されるすべてのステップまたは変換が表示されます。 この意味で、Power Query エディターは、後の変換に適した M スクリプトを作成するのに役立つインターフェイスとして機能し、使用するコードが有効であることを確認します。
注
M スクリプトは、Power Query エディターで次の操作を行うために使用されます。
- クエリを一連のステップとして表示し、新しいステップの作成または変更を許可します。
- ダイアグラム ビューを表示します。
前の図では、適用された手順セクションが強調されています。このセクションには、次の手順が含まれています。
- ソース: データ ソースへの接続を確立します。 この場合は、SQL Server データベースへの接続です。
- ナビゲーション: データベース内の特定のテーブルに移動します。
- その他の列を削除しました: 保持するテーブルの列を選択します。
- 並べ替えられた行: 1 つ以上の列を使用してテーブルを並べ替えます。
- 上位の行を保持する: テーブルの一部の行のみをテーブルの先頭から保持するようにテーブルをフィルター処理します。
この一連のステップ名は、Power Queryが作成したMスクリプトを親しみやすく表示する方法です。 M スクリプト全体を表示するには、いくつかの方法があります。 Power Queryでは、View タブで 詳細エディター を選択できます。また、Home タブの Query グループから 詳細エディター を選択することもできます。一部のバージョンのPower Queryでは、View タブに移動し、Layout グループから数式バーのビューを変更してクエリ スクリプトを表示することもできます。その場合、Script view>Query script を選択します。
[ 適用されたステップ ] ウィンドウにあるほとんどの名前は、M スクリプトの場合と同様に使用されます。 クエリのステップには、M 言語の 識別子 と呼ばれる名前が付けられます。 M のステップ名の周りに余分な文字がラップされることがありますが、これらの文字は適用されたステップには表示されません。 たとえば、 #"Kept top rows"は、これらの余分な文字のために 引用符で囲まれた識別子 として分類されます。 引用符で囲まれた識別子を使用すると、キーワード、空白文字、コメント、演算子、区切り記号など、0 個以上の Unicode 文字のシーケンスを識別子として使用できます。 M 言語の 識別子の 詳細については、 字句構造に関するページを参照してください。
Power Query エディターでクエリを変更すると、クエリの M スクリプトが自動的に更新されます。 たとえば、前のイメージを開始点として使用して、[ 上位行を保持 する] ステップ名を [上位 20 行] に変更すると、スクリプト ビューでこの変更が自動的に更新されます。
Power Query エディターを使用して M スクリプトの全部または大部分を作成することをお勧めしますが、M スクリプトの一部を手動で追加または変更できます。 M 言語の詳細については、M 言語の 公式ドキュメント サイトを参照してください。
注
M スクリプトは M コードとも呼ばれ、Power Query M 言語を使用するすべてのコードに使用される用語です。 この記事のコンテキストでは、M スクリプトは、Power Query クエリ内で見つかり、詳細エディター ウィンドウまたは数式バーのスクリプト ビューからアクセスできるコードも参照します。
Power Queryでのクエリ評価
次の図では、Power Queryでクエリが評価されるときに発生するプロセスを調べられます。
- 高度なエディター内にある M スクリプトは、Power Query エンジンに送信されます。 資格情報やデータ ソースのプライバシー レベルなど、その他の重要な情報も含まれます。
- Power Queryは、データ ソースから抽出する必要があるデータを決定し、データ ソースに要求を送信します。
- データ ソースは、要求されたデータをPower Queryに転送することで、Power Queryからの要求に応答します。
- Power Queryデータ ソースから受信データを受信し、必要に応じてPower Query エンジンを使用して変換を実行します。
- 前のポイントから得られた結果は、宛先に読み込まれます。
注
この例では、SQL Database をデータ ソースとして使用するクエリを紹介していますが、この概念は、データ ソースの有無に関係なくクエリに適用されます。
Power QueryがMスクリプトを読み取ると、そのスクリプトは最適化プロセスを経て実行され、クエリがより効率的に評価されます。 このプロセスでは、クエリからデータ ソースにオフロードできるステップ (変換) を決定します。 また、Power Query エンジンを使用して評価する必要がある他のステップも決定します。 この最適化プロセスは query folding と呼ばれ、Power Queryは可能な限り多くの実行をデータ ソースにプッシュしてクエリの実行を最適化しようとします。
Important
Power Query M 数式言語 (M 言語とも呼ばれます) のすべての規則に従います。 最も注目すべき点は、最適化プロセス中に レイジー評価 が重要な役割を果たします。 このプロセスでは、Power Queryクエリからの特定の変換を評価する必要があるかを理解します。 Power Queryは、クエリの出力に含まれないため評価する必要がない他の変換を理解します。
さらに、複数のソースが関係する場合は、クエリを評価するときに、各データ ソースのデータ プライバシー レベルが考慮されます。 詳細情報: データ プライバシー ファイアウォールの背後にある
次の図は、この最適化プロセスで実行される手順を示しています。
- 高度なエディター内にある M スクリプトは、Power Query エンジンに送信されます。 資格情報やデータ ソースのプライバシー レベルなど、その他の重要な情報も提供されます。
- クエリ フォールディング メカニズムは、データ ソースにメタデータ要求を送信して、データ ソースの機能、テーブル スキーマ、データ ソースの異なるテーブル間のリレーションシップなどを決定します。
- 受信したメタデータに基づいて、クエリ フォールディング メカニズムによって、データ ソースから抽出する情報と、Power Query エンジン内で実行する必要がある変換のセットが決まります。 この命令は、データ ソースからデータを取得し、必要に応じて Power Query エンジン内の受信データを変換する処理を行う他の 2 つのコンポーネントに命令を送信します。
- Power Queryの内部コンポーネントが命令を受け取ると、Power Queryはデータ ソース クエリを使用してデータ ソースに要求を送信します。
- データ ソースは、Power Queryから要求を受け取り、Power Query エンジンにデータを転送します。
- データがPower Query内に入ると、Power Query内の変換エンジン (マッシュアップ エンジンとも呼ばれます) は、折り返したりデータ ソースにオフロードしたりできなかった変換を実行します。
- 前のポイントから派生した結果は、宛先にロードされます。
注
M スクリプトで使用される変換とデータ ソースに応じて、Power Queryは受信データをストリーミングまたはバッファーするかどうかを決定します。
クエリ フォールディングの概要
クエリ フォールディングの目的は、クエリの変換を計算できるデータ ソースに対して、クエリの評価の多くをオフロードまたはプッシュすることです。
クエリ フォールディング メカニズムは、M スクリプトをデータ ソースが解釈して実行できる言語に変換することで、この目標を達成します。 その後、評価がデータ ソースにプッシュされ、その評価の結果がPower Queryに送信されます。
多くの場合、この操作では、データ ソースから必要なすべてのデータを抽出し、Power Query エンジンで必要なすべての変換を実行するよりも、クエリの実行が高速になります。
get データ エクスペリエンスを使用する場合は、最終的にデータ ソースに接続できるプロセスについてPower Queryガイドします。 その場合、Power Query は、データをアクセスする関数として分類される M 言語の一連の関数を使用します。 これらの特定の関数では、メカニズムとプロトコルを使用して、データ ソースが理解できる言語を使用してデータ ソースに接続します。
ただし、クエリで実行する手順は、クエリ フォールディング メカニズムが最適化を試みる手順または変換です。 その後、Power Query エンジンを使用して処理されるのではなく、データ ソースにオフロードできるかどうかを確認します。
Important
すべてのデータ ソース関数は、クエリの ソース ステップとして一般的に表示され、ネイティブ言語でデータ ソースのデータに対してクエリを実行します。 クエリ フォールディング メカニズムは、データ ソース関数の後にクエリに適用されるすべての変換で使用されます。 その後、変換して 1 つのデータ ソース クエリに結合することも、データ ソースにオフロードできる変換をいくつでも組み合わせることができます。
クエリの構造によっては、クエリ フォールディング メカニズムに次の 3 つの結果が考えられます。
- フル クエリ フォールディング: すべてのクエリ変換がデータ ソースにプッシュバックされ、Power Query エンジンで最小限の処理が行われる場合。
- 部分的なクエリ フォールディング: クエリ内の変換の数が少なく、すべてではない場合は、データ ソースにプッシュバックできます。 この場合、変換のサブセットのみがデータ ソースで実行され、残りのクエリ変換は Power Query エンジンで実行されます。
- クエリ フォールディングなし: 変換がサポートされていないか、コネクタがクエリ フォールディングをサポートしていないために、データ ソースのネイティブ クエリ言語に変換できない変換がクエリに含まれている場合。 この場合、Power Queryはデータ ソースから生データを取得し、Power Query エンジンを使用して、Power Query エンジン レベルで必要な変換を処理することで、必要な出力を実現します。
注
クエリ フォールディング メカニズムは、主に、
より多くの処理リソースを持ち、クエリ フォールディング機能を備えるデータ ソースを使用すると、Power Query エンジンではなくデータ ソースで処理が実行されるため、クエリの読み込み時間を短縮できます。