使用查询诊断了解折叠
使用查询诊断的最常见原因之一是为了更好地了解 Power Query 将哪些操作“推送”到后端数据源执行,这也称为“折叠”。 如果想要查看折叠的内容,可以查看发送到后端数据源的“最具体”查询。 我们可以查看 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 筛选为“销售代表”,然后按国家/地区对此子选择进行分组。 所有操作都折叠了。
使用查询诊断,我们可以检查折叠的操作类型。将来,我们希望能让此功能更易于使用。