Spørringsplan for Power Query (forhåndsvisning)
Spørringsplan for Power Query er en funksjon som gir en bedre visning av evalueringen av spørringen. Det er nyttig å finne ut hvorfor en bestemt spørring kanskje ikke brettes på et bestemt trinn.
Gjennom et praktisk eksempel vil denne artikkelen demonstrere hovedbrukstilfellet og potensielle fordeler ved å bruke funksjonen for spørringsplan til å se gjennom spørringstrinnene. Eksemplene som brukes i denne artikkelen, er opprettet ved hjelp av eksempeldatabasen AdventureWorksLT for Azure SQL Server, som du kan laste ned fra eksempeldatabaser for AdventureWorks.
Obs!
Funksjonen for spørringsplan for Power Query er bare tilgjengelig i Power Query Online.
Denne artikkelen er delt i en rekke anbefalte trinn for å tolke spørringsplanen. Disse trinnene er:
- Se gjennom spørringsdelegeringsindikatorene.
- Velg spørringstrinnet for å se gjennom spørringsplanen.
- Implementere endringer i spørringen.
Bruk følgende fremgangsmåte for å opprette spørringen i ditt eget Power Query Online-miljø.
Velg Tom spørring fra Power Query – Velg datakilde.
Erstatt skriptet for den tomme spørringen med følgende spørring.
let Source = Sql.Database("servername", "database"), Navigation = Source{[Schema = "Sales", Item = "SalesOrderHeader"]}[Data], #"Removed other columns" = Table.SelectColumns(Navigation, {"SalesOrderID", "OrderDate", "SalesOrderNumber", "PurchaseOrderNumber", "AccountNumber", "CustomerID", "TotalDue"}), #"Filtered rows" = Table.SelectRows(#"Removed other columns", each [TotalDue] > 1000), #"Kept bottom rows" = Table.LastN(#"Filtered rows", 5) in #"Kept bottom rows"
Endre
servername
ogdatabase
med de riktige navnene for ditt eget miljø.(Valgfritt) Hvis du prøver å koble til en server og database for et lokalt miljø, må du passe på å konfigurere en gateway for dette miljøet.
Velg Neste.
Velg Konfigurer tilkobling i Power Query-redigering, og oppgi legitimasjonen til datakilden.
Obs!
Hvis du vil ha mer informasjon om hvordan du kobler til en SQL Server, kan du gå til SQL Server-databasen.
Når du har fulgt disse trinnene, vil spørringen se ut som den i bildet nedenfor.
Denne spørringen kobles til SalesOrderHeader-tabellen, og velger noen få kolonner fra de siste fem ordrene med en TotalDue-verdi over 1000.
Obs!
Denne artikkelen bruker et forenklet eksempel til å vise frem denne funksjonen, men begrepene som er beskrevet i denne artikkelen, gjelder for alle spørringer. Vi anbefaler at du har god kunnskap om spørringsdelegering før du leser spørringsplanen. Hvis du vil lære mer om spørringsdelegering, kan du gå til grunnleggende spørringsdelegering.
Obs!
Før du leser denne delen, anbefaler vi at du ser gjennom artikkelen om spørringsdelegeringsindikatorer.
Det første trinnet i denne prosessen er å se gjennom spørringen og følge nøye med på spørringsdelegeringsindikatorene. Målet er å se gjennom trinnene som er merket som ikke brettet. Deretter kan du se om det å gjøre endringer i den generelle spørringen kan få disse transformasjonene til å brettes fullstendig.
I dette eksemplet er det eneste trinnet som ikke kan brettes, at de nederste radene beholdes, noe som er enkelt å identifisere gjennom den ikke brettede trinnindikatoren. Dette trinnet er også det siste trinnet i spørringen.
Målet nå er å se gjennom dette trinnet og forstå hva som brettes tilbake til datakilden og hva som ikke kan brettes.
Du har identifisert behold nederste radtrinn som et trinn av interesse siden det ikke brettes tilbake til datakilden. Høyreklikk trinnet, og velg alternativet Vis spørringsplan . Denne handlingen viser en ny dialogboks som inneholder et diagram for spørringsplanen for det valgte trinnet.
Power Query prøver å optimalisere spørringen ved å dra nytte av lat evaluering og spørringsdelegering, som nevnt i grunnleggende spørringsdelegering. Denne spørringsplanen representerer den optimaliserte oversettelsen av M-spørringen til den opprinnelige spørringen som sendes til datakilden. Den inneholder også alle transformeringer som utføres av Power Query Engine. Rekkefølgen som nodene vises i, følger rekkefølgen på spørringen som starter fra det siste trinnet eller utdataene i spørringen, som er representert helt til venstre i diagrammet, og i dette tilfellet er Table.LastN-noden som representerer trinnet Beholdt nederste rader .
Nederst i dialogboksen finnes det en stolpe med ikoner som hjelper deg med å zoome inn eller ut av visningen for spørringsplan, og andre knapper for å hjelpe deg med å administrere visningen. For det forrige bildet ble alternativet Tilpass til visning fra denne linjen brukt til bedre å sette pris på nodene.
Obs!
Spørringsplanen representerer den optimaliserte planen. Når motoren evaluerer en spørring, prøver den å brette alle operatorer til en datakilde. I noen tilfeller kan det til og med gjøre en intern omorganisering av trinnene for å maksimere foldingen. Med dette i tankene inneholder nodene/operatorene som er igjen i denne optimaliserte spørringsplanen, vanligvis datakildespørringen og eventuelle operatorer som ikke kunne brettes og evalueres lokalt.
Du kan identifisere nodene i dette diagrammet som to grupper:
- Foldede noder: Denne noden kan være enten
Value.NativeQuery
eller datakildenoder, for eksempelSql.Database
. Disse kan også identifiseres med etikettfjernkontrollen under funksjonsnavnet. - Ikke-foldede noder: Andre tabelloperatorer, for eksempel
Table.SelectRows
,Table.SelectColumns
og andre funksjoner som ikke kunne brettes. Disse kan også identifiseres med etikettene Full skanning og strømming.
Bildet nedenfor viser de brettede nodene i det røde rektangelet. Resten av nodene kan ikke brettes tilbake til datakilden. Du må se gjennom resten av nodene siden målet er å prøve å få disse nodene til å brettes tilbake til datakilden.
Du kan velge Vis detaljer nederst på noen noder for å vise utvidet informasjon. Detaljene Value.NativeQuery
for noden viser for eksempel den opprinnelige spørringen (i SQL) som sendes til datakilden.
Spørringen som vises her, er kanskje ikke nøyaktig den samme spørringen som sendes til datakilden, men det er en god tilnærming. I dette tilfellet forteller den deg nøyaktig hvilke kolonner som skal spørres fra SalesOrderHeader-tabellen, og deretter hvordan den filtrerer tabellen ved hjelp av TotalDue-feltet for å bare hente rader der verdien for feltet er større enn 1000. Noden ved siden av den, Table.LastN, beregnes lokalt av Power Query-motoren, da den ikke kan brettes.
Obs!
Operatorene samsvarer kanskje ikke nøyaktig med funksjonene som brukes i spørringens skript.
Du har nå funnet ut hvilke noder som ikke kunne brettes og vil bli evaluert lokalt. Denne saken har Table.LastN
bare noden, men i andre scenarioer kan den ha mange flere.
Målet er å bruke endringer i spørringen slik at trinnet kan brettes. Noen av endringene du kan implementere, kan variere fra å omorganisere trinnene til å bruke en alternativ logikk i spørringen som er mer eksplisitt for datakilden. Dette betyr ikke at alle spørringer og alle operasjoner kan brettes ved å bruke noen endringer. Men det er en god praksis å avgjøre gjennom prøveversjon og feiling om spørringen kan brettes tilbake.
Siden datakilden er en SQL Server-database, hvis målet er å hente de siste fem ordrene fra tabellen, vil et godt alternativ være å dra nytte av TOP- og ORDER BY-setningene i SQL. Siden det ikke finnes noen BOTTOM-setningsdel i SQL, kan ikke transformasjonen Table.LastN
i PowerQuery oversettes til SQL. Du kan fjerne Table.LastN
trinnet og erstatte det med:
- Et synkende sorteringstrinn etter SalesOrderID-kolonnen i tabellen, siden denne kolonnen bestemmer hvilken rekkefølge som går først og hvilken som er angitt sist.
- Velg de fem øverste radene siden tabellen er sortert, denne transformasjonen oppnår det samme som om det var en Holdt nederste rader (
Table.LastN
).
Dette alternativet tilsvarer den opprinnelige spørringen. Selv om dette alternativet i teorien virker bra, må du gjøre endringene for å se om dette alternativet vil gjøre denne noden fullstendig foldet tilbake til datakilden.
Implementere alternativet som ble diskutert i forrige del:
Lukk dialogboksen for spørringsplan, og gå tilbake til Power Query-redigering.
Fjern trinnet Beholdt nederste rader.
Sorter SalesOrderID-kolonnen i synkende rekkefølge.
Velg tabellikonet øverst til venstre i forhåndsvisningsvisningen for data, og velg alternativet som leser Behold de øverste radene. Send tallet fem som argument i dialogboksen, og trykk OK.
Når du har implementert endringene, kontrollerer du spørringsdelegeringsindikatorene på nytt og ser om det gir deg en brettet indikator.
Nå er det på tide å se gjennom spørringsplanen for det siste trinnet, som nå er Behold de øverste radene. Nå er det bare foldede noder. Velg Vis detaljer under Value.NativeQuery
for å bekrefte hvilken spørring som sendes til databasen.
Selv om denne artikkelen foreslår hvilket alternativ du vil bruke, er hovedmålet at du skal lære hvordan du bruker spørringsplanen til å undersøke spørringsdelegering. Denne artikkelen gir også synlighet for hva som sendes til datakilden, og hvilke transformasjoner som skal gjøres lokalt.
Du kan justere koden for å se hvilken innvirkning den har i spørringen. Ved å bruke spørringsdelegeringsindikatorene får du også en bedre oversikt over hvilke trinn som hindrer spørringen i å brettes.