Compreenda a dobra usando o Diagnóstico de Consultas

Uma das razões mais comuns para usar o Diagnóstico de Consultas é compreender melhor que operações o Power Query envia para a fonte de dados do back-end para realizar. Este processo também é conhecido como dobragem. Para ver quais as operações que se dobram, observe a consulta ou consultas mais específicas que o Power Query envia para a fonte de dados do back-end. Pode analisar este processo tanto para ODATA como para SQL.

A operação descrita em Registar diagnósticos de consulta no Power BI inclui quatro passos:

  • Liga-se à fonte de dados
  • Recupera a tabela do cliente
  • Filtra a função ID do Cliente por Sales Representative
  • Agrupar por Country

Uma vez que o conector ODATA atualmente não suporta a delegação de COUNT() para o ponto final e que este ponto final também é limitado nas operações que suporta, não esperamos que essa etapa final possa ser delegada. Por outro lado, filtrar é relativamente trivial. Isto é exatamente o que vemos se olharmos para a consulta mais específica emitida:

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

Podemos ver que estamos a filtrar a tabela por ContactTitle igual a Sales Representative, e estamos a devolver apenas duas colunas: Customer ID e Country. Country é necessário para a operação de agrupamento, que deve ser realizada localmente porque não é realizada pelo endpoint ODATA. Podemos concluir aqui o que se dobra e o que não se dobra.

De forma semelhante, se olharmos para a consulta específica e final emitida no diagnóstico SQL, vemos algo ligeiramente diferente:

    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]

Pode ver que o Power Query cria uma subseleção onde ContactTitle é filtrado para Sales Representative, depois agrupa por Country nesta subseleção. Todas as nossas operações cessaram.

Utilizando o Query Diagnostics, podemos examinar que tipo de operações foram objeto de folding. No futuro, esperamos tornar esta funcionalidade mais fácil de usar.