共用方式為


了解查詢診斷的折疊

使用查詢診斷最常見的原因之一,是進一步瞭解 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

我們可以看到我們正在篩選 ContactTitle 等於 「銷售代表」的數據表,而我們只傳回兩個數據行--客戶標識符和國家/地區。 當然,群組作業需要國家/地區,因為 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 會篩選為 「銷售代表」,然後依國家/地區在此子選取區段上分組。 我們所有的作業都折疊了。

使用查詢診斷,我們可以檢查未來折疊的作業類型,我們希望讓這項功能更容易使用。