使用查詢診斷工具的最常見原因之一,是更深入了解 Power Query 將哪些操作「推送」至後端資料來源以進行處理,這也被稱為「摺疊」。 如果我們想知道哪些是被摺疊的,可以看看哪些查詢是「最具體」的,或具體的查詢被送到後端資料來源。 我們可以同時針對 ODATA 和 SQL 進行分析。
在《錄製診斷》 文章 中描述的操作基本上包含四件事:
- 連接至資料來源
- 抓取客戶表格
- 將客戶識別角色篩選為「銷售代表」
- 按「國家」分類的團體
由於 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
我們可以看到,我們正在篩選表格,條件是聯絡人標題等於“銷售代表”,並且我們只返回兩個欄位——客戶 ID 和國家。 當然,分組操作需要 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 篩選成「銷售代表」,然後在這個子選項中依國家分組。 我們所有的營運都停擺了。
利用查詢診斷,我們可以檢視哪些操作被合併—未來我們希望能使這項功能更加易於使用。