使用查询诊断了解折叠

使用查询诊断的最常见原因之一是更好地了解Power Query推送到后端数据源要执行的操作。 此过程也称为 折叠。 若要查看哪些操作被折叠,请查看 Power Query 发送到后端数据源的最具体的一个或多个查询。 您可以针对 ODATA 和 SQL 查看这一过程。

Power BI中记录查询诊断中所述的操作执行四个步骤:

  • 连接到数据源
  • 检索客户表
  • 将客户 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 IDCountryCountry 需要分组操作,因为 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 进行分组。 所有业务都结束了。

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