Partilhar via


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

Uma das razões mais comuns para usar o Diagnóstico de Consultas é compreender melhor quais as operações que foram 'empurradas para baixo' pelo Power Query para serem realizadas pela fonte de dados do back-end, o que também é conhecido como 'folding'. Se quisermos ver o que foi agrupado, podemos identificar qual é a consulta 'mais específica', ou consultas, que são enviadas para a fonte de dados do back-end. Podemos analisar isto tanto para ODATA como para SQL.

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

  • Liga-se à fonte de dados
  • Obtém a tabela de clientes
  • Filtra o papel de ID do Cliente para 'Representante de Vendas'
  • Grupos por 'País'

Como o conector ODATA não suporta atualmente a aplicação da função COUNT() para o endpoint, e como este endpoint também é algo limitado nas suas operações, não esperamos que essa etapa final seja aplicada. Por outro lado, filtrar é 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

Estamos a ver que filtramos a tabela para que ContactTitle seja igual a 'Representante de Vendas', devolvendo apenas duas colunas: Identificação do Cliente e País. Country, claro, é necessário para a operação de agrupamento, que, como não está a ser realizada pelo endpoint ODATA, deve ser realizada localmente. 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]

Aqui, podemos ver que o Power Query cria uma subseleção onde o ContactTitle é filtrado para 'Representante de Vendas' e depois agrupa por país nesta subseleção. Todas as nossas operações cessaram.

Usando o Diagnóstico de Consultas, podemos analisar que tipo de operações foram otimizadas — no futuro, esperamos tornar esta funcionalidade mais fácil de usar.