クエリ診断を使用した折りたたみについて

クエリ診断を使用する最も一般的な理由の 1 つは、Power Query が処理を実行するためにどの操作をバックエンド データ ソースにプッシュダウンするのかをよりよく理解することです。 このプロセスは 折りたたみとも呼ばれます。 どの操作がクエリ フォールディングされるかを確認するには、Power Query がバックエンド データ ソースに送信する最も具体的なクエリまたはクエリ群を確認します。 ODATA と SQL の両方について、このプロセスを調べることができます。

「Power BIでのクエリ診断の記録」で説明されている操作では、次の 4 つの手順を実行します。

  • データ ソースに接続します
  • 顧客テーブルを取得します
  • 顧客 ID ロールを Sales Representative に絞り込みます
  • Country ごとにグループ化

ODATA コネクタは現在、エンドポイントへの COUNT() の折りたたみをサポートしていないため、このエンドポイントの操作も制限されているため、最終的なステップがフォールドされるとは考えられません。 一方、フィルター処理は比較的簡単です。 これは、生成された最も具体的なクエリを見ると正確にわかります。

Request:
GET https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry HTTP/1.1

Response:
https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry
HTTP/1.1 200 OK

ContactTitleと等しいSales Representativeに対してテーブルをフィルター処理しており、Customer IDCountryの 2 つの列のみが返されていることがわかります。 Country はグループ化操作に必要です。これは、ODATA エンドポイントによって実行されないため、ローカルで実行する必要があります。 ここでは何を折りたたみ、折らないかを結論付けることができます。

同様に、SQL 診断で出力された特定のクエリと最終的なクエリを見ると、少し異なることがわかります。

    count(1) as [Count]
from 
(
    select [_].[Country]
    from [dbo].[Customers] as [_]
    where [_].[ContactTitle] = 'Sales Representative' and [_].[ContactTitle] is not null
) as [rows]
group by [Country]

Power Query では、ContactTitleSales Representative にフィルター処理されたサブ選択が作成され、次にこのサブ選択が Country でグループ化されることがわかります。 私たちのすべての業務が停止しました。

クエリ診断を使うと、どの種類の操作がフォールディングされたかを確認できます。 今後は、この機能をより使いやすくしたいと考えています。