Delen via


Inzicht in het groeperen met Query Diagnostics

Een van de meest voorkomende redenen om Query Diagnostics te gebruiken is om beter inzicht te krijgen in de bewerkingen die door Power Query zijn doorgeschoven om te worden uitgevoerd door de back-end gegevensbron, wat ook bekend staat als 'folding'. Als we willen zien wat 'gevouwen' is, kunnen we kijken naar wat de 'meest specifieke' query of queries zijn die naar de back-end gegevensbron worden verzonden. We kunnen dit bekijken voor zowel ODATA als SQL.

De bewerking die is beschreven in het artikel over opnamediagnose doet in feite vier dingen:

  • Verbinding maken met de gegevensbron
  • Haalt de klanttabel op
  • Hiermee filtert u de rol Klant-id naar 'Verkoopvertegenwoordiger'
  • Groepen op 'Land'

Omdat de ODATA-connector momenteel geen ondersteuning biedt voor folding COUNT() naar het eindpunt en omdat dit eindpunt ook enigszins beperkt is in de bewerkingen, verwachten we niet dat die laatste stap moet worden gevouwen. Aan de andere kant is filteren relatief triviaal. Dit is precies wat we zien als we kijken naar de meest specifieke query die hierboven is verzonden:

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

We kunnen zien dat we de tabel filteren op ContactTitle die gelijk is aan 'Verkoopvertegenwoordiger', en we retourneren alleen twee kolommen: klant-id en land. Land is natuurlijk nodig voor de groeperingsbewerking, die omdat het niet wordt uitgevoerd door het ODATA-eindpunt lokaal moet worden uitgevoerd. We kunnen concluderen wat wel en wat niet gevouwen wordt.

Als we ook kijken naar de specifieke en uiteindelijke query die wordt verzonden in de SQL-diagnose, zien we iets anders:

    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]

Hier zien we dat Power Query een subselectie maakt waarbij ContactTitle wordt gefilterd op 'Verkoopvertegenwoordiger', en vervolgens groepeert op Land op deze subselectie. Al onze activiteiten zijn gestopt.

Met Query Diagnostics kunnen we onderzoeken welke soorten bewerkingen gevouwen zijn. In de toekomst hopen we dat deze mogelijkheid gemakkelijker te gebruiken zal zijn.