Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.