了解查询诊断折叠

使用查询诊断的一个重要原因是更好地了解 Power Query 中哪些操作被后端数据源执行,这也称为“折叠”(Folding)。 如果我们想查看哪些内容被折叠,可以查看发送到后端数据源的“最具体”查询。 我们可以针对 ODATA 和 SQL 来了解这一点。

记录诊断 文章 中所述的操作基本上具有四个功能:

  • 连接到数据源
  • 获取客户表
  • 将客户 ID 角色筛选为“销售代表”
  • 按“国家/地区”分组

由于 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 等于“销售代表”的表,并且我们仅返回两列--客户 ID 和国家/地区。 当然,分组操作需要国家,因为 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 筛选为“销售代表”,然后按国家/地区对此子选择进行分组。 所有业务都结束了。

使用查询诊断,我们可以检查被折叠的操作类型。我们希望在将来使此功能更易于使用。