Del via


Forstå folding med spørringsdiagnose

En av de vanligste grunnene til å bruke Query Diagnostics er å få en bedre forståelse av hvilke operasjoner som ble 'presset ned' av Power Query for å utføres av back-end datakilden, som også er kjent som 'folding'. Hvis vi vil se hva som ble foldet, kan vi se på hva som er den 'mest spesifikke' spørringen, eller spørringene, som sendes til backend-datakilden. Vi kan se på dette for både ODATA og SQL.

Operasjonen som ble beskrevet i artikkelen om Opptaksdiagnostikk gjør i hovedsak fire ting:

  • Kobler til datakilden
  • Tar tak i kundebordet
  • Filtrerer kunde-ID-rollen til 'Salgsrepresentant'
  • Grupper etter 'land'

Siden ODATA-kontakten for øyeblikket ikke støtter folding av COUNT() til endepunktet, og siden dette endepunktet også er noe begrenset i sine operasjoner, forventer vi ikke at det siste steget skal foldes. På den annen side er filtrering relativt trivielt. Dette er akkurat det vi ser hvis vi ser på det mest spesifikke spørsmålet som ble sendt ovenfor:

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

Vi kan se at vi filtrerer tabellen for KontaktTittel som tilsvarer 'Salgsrepresentant', og vi returnerer bare to kolonner – Kunde-ID og Land. Land er selvfølgelig nødvendig for grupperingsoperasjonen, som siden den ikke utføres av ODATA-endepunktet må utføres lokalt. Vi kan konkludere med hva som foldes og ikke folder seg her.

På samme måte, hvis vi ser på den spesifikke og siste forespørselen som sendes ut i SQL-diagnostikken, ser vi noe litt annerledes:

    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]

Her kan vi se at Power Query lager et underutvalg hvor ContactTitle filtreres til 'Sales Representative', deretter grupperes etter land på dette underutvalget. Alle våre operasjoner gikk konkurs.

Ved å bruke Query Diagnostics kan vi undersøke hvilke typer operasjoner som ble lagt sammen – i fremtiden håper vi å gjøre denne funksjonaliteten enklere å bruke.