Partilhar via


Noções básicas sobre dobramento com o Diagnóstico de Consulta

Uma das razões mais comuns para utilizar o Diagnóstico de Consultas é compreender melhor quais as operações que foram 'empurradas para baixo' pelo Power Query para serem executadas pela fonte de dados back-end, que também é conhecida como 'dobragem'. Se quisermos ver o que se duplicou, podemos ver qual é a consulta "mais específica", ou consultas, que são enviadas para a fonte de dados de back-end. Podemos analisar isso tanto para ODATA quanto para SQL.

A operação descrita no artigo sobre Diagnóstico de Gravação faz essencialmente quatro coisas:

  • Conecta-se à fonte de dados
  • Agarra a mesa do cliente
  • Filtra a função ID do Cliente para 'Representante de vendas'
  • Grupos por 'País'

Como o conector ODATA atualmente não suporta dobrar COUNT() para o ponto de extremidade, e como esse ponto de extremidade também é um pouco limitado em suas operações, não esperamos que essa etapa final seja dobrada. Por outro lado, a filtragem é relativamente trivial. Isto é exatamente o que vemos se olharmos para a consulta mais específica emitida acima:

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 filtrando a tabela para ContactTitle igual a "Representante de vendas", e estamos retornando apenas duas colunas: ID do cliente e País. O país, é claro, é necessário para a operação de agrupamento, que, uma vez que não está sendo executada pelo ponto de extremidade ODATA, deve ser executada localmente. Podemos concluir o que dobra e o que não dobra aqui.

Da mesma forma, se olharmos para a consulta específica e final emitida no diagnóstico SQL, veremos 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]

Aqui, podemos ver que o Power Query cria uma subseleção em que ContactTitle é filtrado para 'Representante de Vendas' e, em seguida, agrupa por País nesta subseleção. Todas as nossas operações foram encerradas.

Usando o Query Diagnostics, podemos examinar que tipo de operações foram dobradas - no futuro, esperamos tornar esse recurso mais fácil de usar.