クエリ診断を使用する最も一般的な理由の 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 IDとCountryの 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 では、ContactTitle が Sales Representative にフィルター処理されたサブ選択が作成され、次にこのサブ選択が Country でグループ化されることがわかります。 私たちのすべての業務が停止しました。
クエリ診断を使うと、どの種類の操作がフォールディングされたかを確認できます。 今後は、この機能をより使いやすくしたいと考えています。