Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Denne artikkelen inneholder noen eksempelscenarioer for hvert av de tre mulige resultatene for spørringsdelegering. Den inneholder også noen forslag til hvordan du får mest mulig ut av spørringsdelegeringsmekanismen, og effekten den kan ha i spørringene dine.
Scenarioet
Se for deg et scenario der du, ved hjelp av Wide World Importers-databasen for Azure Synapse Analytics SQL-database, får i oppgave å opprette en spørring i Power Query som kobler til fact_Sale tabellen og henter de siste 10 salgene med bare følgende felt:
- Salgsnøkkel
- Kundenøkkel
- Nøkkel for fakturadato
- Bekrivelse
- Antall
Note
For demonstrasjonsformål bruker denne artikkelen databasen som er beskrevet i opplæringen om innlasting av Wide World Importers-databasen i Azure Synapse Analytics. Hovedforskjellen i denne artikkelen er at fact_Sale tabellen bare inneholder data for år 2000, med totalt 3 644 356 rader.
Selv om resultatene kanskje ikke samsvarer nøyaktig med resultatene du får ved å følge opplæringen fra Azure Synapse Analytics-dokumentasjonen, er målet med denne artikkelen å vise frem kjernekonseptene og innvirkningen som spørringsdelegering kan ha i spørringene dine.
Denne artikkelen viser tre måter å oppnå samme utdata på med ulike nivåer av spørringsdelegering:
- Ingen spørringsdelegering
- Delvis spørringsdelegering
- Full spørringsdelegering
Eksempel på ingen spørringsdelegering
Viktig!
Spørringer som utelukkende er avhengige av ustrukturerte datakilder, eller som ikke har en databehandlingsmotor, for eksempel CSV- eller Excel-filer, har ikke funksjoner for spørringsdelegering. Dette betyr at Power Query evaluerer alle nødvendige datatransformasjoner ved hjelp av Power Query-motoren.
Når du har koblet til databasen og navigert til fact_Sale tabellen, velger du transformeringen Behold nederste rader som finnes i Reduser rader-gruppen i Hjem-fanen .
Når du har valgt denne transformeringen, vises en ny dialogboks. I denne nye dialogboksen kan du angi antall rader du vil beholde. I dette tilfellet angir du verdien 10, og deretter velger du OK.
Tips
I dette tilfellet gir utførelse av denne operasjonen resultatet av de siste 10 salgene. I de fleste scenarioer anbefaler vi at du angir en mer eksplisitt logikk som definerer hvilke rader som regnes som sist ved å bruke en sorteringsoperasjon på tabellen.
Deretter velger du Transformasjonen Velg kolonner som finnes i gruppen Behandle kolonner i Hjem-fanen . Du kan deretter velge kolonnene du vil beholde fra tabellen, og fjerne resten.
Til slutt, i dialogboksen Velg kolonner, velg , Sale KeyCustomer Key, Invoice Date KeyDescription, og Quantity kolonner, og velg deretter OK.
Følgende kodeeksempel er det fullstendige M-skriptet for spørringen du opprettet:
let
Source = Sql.Database(ServerName, DatabaseName),
Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
#"Kept bottom rows" = Table.LastN(Navigation, 10),
#"Choose columns" = Table.SelectColumns(
#"Kept bottom rows",
{"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"}
)
in
#"Choose columns""
Ingen spørringsdelegering: Forstå spørringsevalueringen
Legg merke til at indikatorene for spørringsdelegering for Beholdt nederste rader og Velg-kolonner er merket som trinn som evalueres utenfor datakilden, eller med andre ord av Power Query-motoren, under Brukte trinn i Power Query-redigeringsprogrammet.
Du kan høyreklikke det siste trinnet i spørringen, det som heter Velg kolonner, og velge alternativet som leser Vis spørringsplan. Målet med spørringsplanen er å gi deg en detaljert oversikt over hvordan spørringen kjøres. Hvis du vil vite mer om denne funksjonen, kan du gå til Spørringsplan.
Hver boks i forrige bilde kalles en node. En node representerer operasjonsnedbrytningen for å oppfylle denne spørringen. Noder som representerer datakilder, for eksempel SQL Server i forrige eksempel og noden Value.NativeQuery , representerer hvilken del av spørringen som avlastes til datakilden. Resten av nodene, i dette tilfellet Table.LastN og Table.SelectColumns uthevet i rektangelet i det forrige bildet, evalueres av Power Query-motoren. Disse to nodene representerer de to transformeringene du la til, Beholdt nederste rader og Velg kolonner. Resten av nodene representerer operasjoner som skjer på datakildenivå.
Hvis du vil se den nøyaktige forespørselen som sendes til datakilden, velger du Vis detaljer i noden Value.NativeQuery .
Denne datakildeforespørselen er på standardspråket til datakilden. I dette tilfellet er dette språket SQL, og denne setningen representerer en forespørsel for alle radene og feltene fact_Sale fra tabellen.
Hvis du konsulterer denne datakildeforespørselen, kan det hjelpe deg med å forstå historien som spørringsplanen prøver å formidle:
-
Sql.Database: Denne noden representerer tilgangen til datakilden. Kobler til databasen og sender metadataforespørsler for å forstå funksjonene. -
Value.NativeQuery: Representerer forespørselen som ble generert av Power Query for å oppfylle spørringen. Power Query sender dataforespørslene i en opprinnelig SQL-setning til datakilden. I dette tilfellet representerer det alle poster og felt (kolonner) frafact_Saletabellen. For dette scenariet er dette tilfellet uønsket, siden tabellen inneholder millioner av rader og interessen bare er i de siste 10. -
Table.LastN: Når Power Query mottar alle oppføringerfact_Salefra tabellen, bruker den Power Query-motoren til å filtrere tabellen og beholde bare de siste 10 radene. -
Table.SelectColumns: Power Query bruker utdataene fra nodenTable.LastNog bruker en ny transformering kaltTable.SelectColumns, som velger de bestemte kolonnene du vil beholde fra en tabell.
For evalueringen måtte denne spørringen laste ned alle rader og felt fra fact_Sale tabellen. Denne spørringen tok i gjennomsnitt 6 minutter og 1 sekund å bli behandlet i en standardforekomst av Power BI-dataflyter (som står for evaluering og innlasting av data til dataflyter).
Eksempel på delvis spørringsdelegering
Når du har koblet til databasen og navigert til fact_Sale tabellen, starter du med å velge kolonnene du vil beholde fra tabellen. Velg Velg kolonner-transformeringen som finnes i Behandle kolonner-gruppen fra Hjem-fanen . Denne transformeringen hjelper deg med å eksplisitt velge kolonnene du vil beholde fra tabellen, og fjerne resten.
I dialogboksen Velg kolonner velger du kolonnene Sale Key, Customer Key, Invoice Date KeyDescription, og , og Quantity deretter velger du OK.
Nå oppretter du logikk som sorterer tabellen slik at den har de siste salgene nederst i tabellen. Velg Sale Key kolonnen, som er primærnøkkelen og den trinnvise sekvensen eller indeksen for tabellen. Sorter tabellen ved hjelp av bare dette feltet i stigende rekkefølge fra kontekstmenyen for kolonnen.
Deretter velger du hurtigmenyen for tabellen og velger transformeringen Behold nederste rader .
Skriv inn verdien 10 i Behold nederste rader, og velg deretter OK.
Følgende kodeeksempel er det fullstendige M-skriptet for spørringen du opprettet:
let
Source = Sql.Database(ServerName, DatabaseName),
Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
#"Choose columns" = Table.SelectColumns(
Navigation,
{"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"}
),
#"Sorted rows" = Table.Sort(#"Choose columns", {{"Sale Key", Order.Ascending}}),
#"Kept bottom rows" = Table.LastN(#"Sorted rows", 10)
in
#"Kept bottom rows"
Eksempel på delvis spørringsdelegering: Forstå spørringsevalueringen
Når du kontrollerer ruten for brukte trinn, legger du merke til at indikatorene for spørringsdelegering viser at den siste transformeringen du la til, Kept bottom rows, er merket som et trinn som evalueres utenfor datakilden, eller med andre ord av Power Query-motoren.
Du kan høyreklikke det siste trinnet i spørringen, det som heter Kept bottom rows, og velge alternativet Spørringsplan for å få en bedre forståelse av hvordan spørringen kan evalueres.
Hver boks i forrige bilde kalles en node. En node representerer hver prosess som må skje (fra venstre mot høyre) for at spørringen skal evalueres. Noen av disse nodene kan evalueres i datakilden, mens andre, for eksempel noden for Table.LastN, representert av trinnet Beholdt nederste rader , evalueres ved hjelp av Power Query-motoren.
Hvis du vil se den nøyaktige forespørselen som sendes til datakilden, velger du Vis detaljer i noden Value.NativeQuery .
Denne forespørselen er på morsmålet til datakilden. I dette tilfellet er dette språket SQL, og denne setningen representerer en forespørsel for alle radene, med bare de forespurte feltene fra fact_Sale tabellen sortert Sale Key av feltet.
Ved å konsultere denne datakildeforespørselen kan du bedre forstå historien som den fullstendige spørringsplanen prøver å formidle. Rekkefølgen på nodene er en sekvensiell prosess som starter med å be om dataene fra datakilden:
-
Sql.Database: Kobler til databasen og sender metadataforespørsler for å forstå funksjonene. -
Value.NativeQuery: Representerer forespørselen som genereres av Power Query for å oppfylle spørringen. Power Query sender dataforespørslene i en opprinnelig SQL-setning til datakilden. I dette tilfellet representerer det alle poster, med bare de forespurte feltene frafact_Saletabellen i databasen sortert i stigende rekkefølge etterSales Keyfeltet. -
Table.LastN: Når Power Query mottar alle oppføringerfact_Salefra tabellen, bruker den Power Query-motoren til å filtrere tabellen og beholde bare de siste 10 radene.
For evalueringen måtte denne spørringen laste ned alle radene og bare de obligatoriske feltene fact_Sale fra tabellen. Det tok i gjennomsnitt 3 minutter og 4 sekunder å bli behandlet i en standardforekomst av Power BI-dataflyter (som står for evaluering og innlasting av data til dataflyter).
Eksempel på fullstendig spørringsdelegering
Når du har koblet til databasen og navigert til tabellen, starter du med å fact_Sale velge kolonnene du vil beholde fra tabellen. Velg Velg kolonner-transformeringen som finnes i Behandle kolonner-gruppen fra Hjem-fanen . Denne transformeringen hjelper deg med å eksplisitt velge kolonnene du vil beholde fra tabellen, og fjerne resten.
Velg kolonnene , Sale Key, Customer KeyInvoice Date Key, og Description i Quantity, og velg deretter OK.
Nå oppretter du logikk som sorterer tabellen slik at de siste salgene vises øverst i tabellen. Velg Sale Key kolonnen, som er primærnøkkelen og den trinnvise sekvensen eller indeksen for tabellen. Sorter tabellen bare ved å bruke dette feltet i synkende rekkefølge fra kontekstmenyen for kolonnen.
Deretter velger du hurtigmenyen for tabellen og velger transformeringen Behold de øverste radene .
Skriv inn verdien 10 i Behold de øverste radene, og velg deretter OK.
Følgende kodeeksempel er det fullstendige M-skriptet for spørringen du opprettet:
let
Source = Sql.Database(ServerName, DatabaseName),
Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
#"Choose columns" = Table.SelectColumns(
Navigation,
{"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"}
),
#"Sorted rows" = Table.Sort(#"Choose columns", {{"Sale Key", Order.Descending}}),
#"Kept top rows" = Table.FirstN(#"Sorted rows", 10)
in
#"Kept top rows"
Eksempel på fullstendig spørringsdelegering: Forstå spørringsevalueringen
Når du kontrollerer ruten for brukte trinn, må du være oppmerksom på at indikatorene for spørringsdelegering viser at transformeringene du la til, Velg kolonner, Sorterte rader og Beholdt øverste rader, er merket som trinn som evalueres i datakilden.
Du kan høyreklikke det siste trinnet i spørringen, det som heter Beholdt øverste rader, og velge alternativet som leser Spørringsplan.
Denne forespørselen er på morsmålet til datakilden. I dette tilfellet er dette språket SQL, og denne setningen representerer en forespørsel for alle radene og feltene fact_Sale fra tabellen.
Ved å konsultere denne datakildespørringen kan du bedre forstå historien som den fullstendige spørringsplanen prøver å formidle:
-
Sql.Database: Kobler til databasen og sender metadataforespørsler for å forstå funksjonene. -
Value.NativeQuery: Representerer forespørselen som genereres av Power Query for å oppfylle spørringen. Power Query sender dataforespørslene i en opprinnelig SQL-setning til datakilden. I dette tilfellet representerer det en forespørsel om bare de 10 øverste postene ifact_Saletabellen, med bare de obligatoriske feltene etter at de er sortert i synkende rekkefølge ved hjelp avSale Keyfeltet.
Note
Selv om det ikke er noen setning som kan brukes til å VELGE de nederste radene i en tabell på T-SQL-språket, er det en TOP-setning som henter de øverste radene i en tabell.
For evalueringen laster denne spørringen bare ned 10 rader, med bare feltene du ba om fra fact_Sale tabellen. Denne spørringen tok i gjennomsnitt 31 sekunder å bli behandlet i en standardforekomst av Power BI-dataflyter (som står for evaluering og innlasting av data til dataflyter).
Sammenligning av ytelse
Hvis du vil forstå effekten spørringsdelegering har i disse spørringene, kan du oppdatere spørringene, registrere tiden det tar å oppdatere hver spørring fullstendig, og sammenligne dem. For enkelhets skyld gir denne artikkelen de gjennomsnittlige oppdateringstidspunktene som registreres ved hjelp av oppdateringsmekanikeren for Power BI-dataflyter mens du kobler til et dedikert Azure Synapse Analytics-miljø med DW2000c som tjenestenivå.
Oppdateringstiden for hver spørring var som følger:
| Eksempel | Etikett | Tid i sekunder |
|---|---|---|
| Ingen spørringsdelegering | Ingen | 361 |
| Delvis spørringsdelegering | Delvis | 184 |
| Full spørringsdelegering | Full | 31 |
Det er ofte slik at en spørring som brettes helt tilbake til datakilden, overgår lignende spørringer som ikke brettes helt tilbake til datakilden. Det kan være mange grunner til at dette er tilfelle. Disse årsakene spenner fra kompleksiteten til transformasjonene som spørringen utfører, til spørringsoptimaliseringene som er implementert i datakilden, for eksempel indekser og dedikert databehandling, og nettverksressurser. Likevel er det to spesifikke nøkkelprosesser som spørringsdelegering prøver å bruke, som minimerer effekten som begge disse prosessene har med Power Query:
- Data under overføring
- Transformasjoner utført av Power Query-motoren
Avsnittene nedenfor forklarer effekten som disse to prosessene har i de tidligere nevnte spørringene.
Data under overføring
Når en spørring utføres, prøver den å hente dataene fra datakilden som et av de første trinnene. Hvilke data som hentes fra datakilden, defineres av spørringsdelegeringsmekanismen. Denne mekanismen identifiserer trinnene fra spørringen som kan avlastes til datakilden.
Tabellen nedenfor viser antall rader som er forespurt fra fact_Sale tabellen i databasen. Tabellen inneholder også en kort beskrivelse av SQL-setningen som sendes for å be om slike data fra datakilden.
| Eksempel | Etikett | Rader forespurt | Bekrivelse |
|---|---|---|---|
| Ingen spørringsdelegering | Ingen | 3644356 | Forespørsel om alle felt og alle poster fra fact_Sale tabellen |
| Delvis spørringsdelegering | Delvis | 3644356 | Forespørsel om alle poster, men bare obligatoriske felt fra fact_Sale tabellen etter at den ble sortert Sale Key etter feltet |
| Full spørringsdelegering | Full | 10 | Be om bare de obligatoriske feltene og TOP 10-postene i fact_Sale tabellen etter å ha blitt sortert i synkende rekkefølge etter Sale Key feltet |
Når du ber om data fra en datakilde, må datakilden beregne resultatene for forespørselen og deretter sende dataene til anmoderen. Selv om databehandlingsressursene allerede er nevnt, kan nettverksressursene for å flytte dataene fra datakilden til Power Query, og deretter få Power Query til å effektivt motta dataene og klargjøre dem for transformasjonene som skjer lokalt, ta litt tid, avhengig av størrelsen på dataene.
For de viste eksemplene måtte Power Query be om over 3,6 millioner rader fra datakilden for eksemplene uten spørringsdelegering og delvis spørringsdelegering. For det fullstendige eksemplet med spørringsdelegering ba den bare om 10 rader. For feltene som ble forespurt, ba eksemplet uten spørringsdelegering om alle tilgjengelige felt fra tabellen. Både eksemplene på delvis spørringsdelegering og fullstendig spørringsdelegering sendte bare en forespørsel om nøyaktig de feltene de trengte.
Forsiktig!
Vi anbefaler at du implementerer løsninger for trinnvis oppdatering som bruker spørringsdelegering for spørringer eller tabeller med store datamengder. Ulike produktintegreringer av Power Query implementerer tidsavbrudd for å avslutte langvarige spørringer. Noen datakilder implementerer også tidsavbrudd på langvarige økter, og prøver å utføre dyre spørringer mot serverne deres. Mer informasjon: Bruke trinnvis oppdatering med dataflyter og trinnvis oppdatering for semantiske modeller
Transformasjoner utført av Power Query-motoren
Denne artikkelen viste hvordan du kan bruke spørringsplanen til å få en bedre forståelse av hvordan spørringen kan evalueres. I spørringsplanen kan du se de nøyaktige nodene for transformasjonsoperasjonene som utføres av Power Query-motoren.
Tabellen nedenfor viser nodene fra spørringsplanene for de tidligere spørringene som ville ha blitt evaluert av Power Query-motoren.
| Eksempel | Etikett | Transformeringsnoder for Power Query-motor |
|---|---|---|
| Ingen spørringsdelegering | Ingen |
Table.LastN, Table.SelectColumns |
| Delvis spørringsdelegering | Delvis | Table.LastN |
| Full spørringsdelegering | Full | — |
For eksemplene som vises i denne artikkelen, krever ikke eksemplet med fullstendig spørringsdelegering at noen transformasjoner skjer i Power Query-motoren, siden den nødvendige utdatatabellen kommer direkte fra datakilden. I motsetning til dette krevde de to andre spørringene noe beregning for å skje på Power Query-motoren. På grunn av mengden data som må behandles av disse to spørringene, tar prosessen for disse eksemplene mer tid enn eksemplet med fullstendig spørringsdelegering.
Transformasjoner kan grupperes i følgende kategorier:
| Type operatør | Bekrivelse |
|---|---|
| Fjern | Operatorer som er datakildenoder. Evalueringen av disse operatorene skjer utenfor Power Query. |
| Direkteavspilling | Operatører er gjennomgående operatører. Med et enkelt filter kan du for eksempel Table.SelectRows vanligvis filtrere resultatene etter hvert som de passerer gjennom operatoren, og trenger ikke å samle alle radene før du flytter dataene.
Table.SelectColumns og Table.ReorderColumns er andre eksempler på denne typen operatører. |
| Full skanning | Operatorer som må samle alle radene før dataene kan gå videre til neste operator i kjeden. Hvis du for eksempel vil sortere data, må Power Query samle inn alle dataene. Andre eksempler på operatorer for full skanning er Table.Group, Table.NestedJoin, og Table.Pivot. |
Tips
Selv om ikke alle transformasjoner er like fra et ytelsessynspunkt, er det i de fleste tilfeller vanligvis bedre å ha færre transformasjoner.
Vurderinger og forslag
- Følg anbefalte fremgangsmåter når du oppretter en ny spørring, som angitt i Anbefalte fremgangsmåter i Power Query.
- Bruk indikatorene for spørringsdelegering til å kontrollere hvilke trinn som hindrer spørringen i å delegeres. Omorganiser dem om nødvendig for å øke foldingen.
- Bruk spørringsplanen til å finne ut hvilke transformasjoner som skjer på Power Query-motoren for et bestemt trinn. Vurder å endre den eksisterende spørringen ved å omorganisere trinnene. Kontroller deretter spørringsplanen for det siste trinnet i spørringen på nytt, og se om spørringsplanen ser bedre ut enn den forrige. Den nye spørringsplanen har for eksempel færre noder enn den forrige, og de fleste nodene er "Streaming"-noder og ikke "full skanning". For datakilder som støtter delegering, representerer andre noder i spørringsplanen enn
Value.NativeQuerytilgangsnoder for datakilder transformasjoner som ikke ble brettet. - Når det er tilgjengelig, kan du bruke alternativet Vis opprinnelig spørring (eller Vis datakildespørring) for å sikre at spørringen kan brettes tilbake til datakilden. Hvis dette alternativet er deaktivert for trinnet, og du bruker en kilde som vanligvis aktiverer det, har du opprettet et trinn som stopper spørringsdelegering. Hvis du bruker en kilde som ikke støtter dette alternativet, kan du stole på spørringsdelegeringsindikatorene og spørringsplanen.
- Bruk verktøyene for spørringsdiagnose til å få en bedre forståelse av forespørslene som sendes til datakilden når funksjoner for spørringsdelegering er tilgjengelige for koblingen.
- Når du kombinerer data som er hentet fra bruk av flere koblinger, prøver Power Query å sende så mye arbeid som mulig til begge datakildene, samtidig som personvernnivåene som er definert for hver datakilde, overholdes.
- Les artikkelen om personvernnivåer for å beskytte spørringene dine mot en brannmurfeil for personvern.
- Bruk andre verktøy til å kontrollere spørringsdelegering fra perspektivet til forespørselen som mottas av datakilden. Basert på eksemplet i denne artikkelen kan du bruke Microsoft SQL Server Profiler til å kontrollere forespørslene som sendes av Power Query og mottas av Microsoft SQL Server.
- Hvis du legger til et nytt trinn i en fullstendig foldet spørring og det nye trinnet også brettes, kan Power Query sende en ny forespørsel til datakilden i stedet for å bruke en bufret versjon av det forrige resultatet. I praksis kan denne prosessen resultere i tilsynelatende enkle operasjoner på en liten mengde data som tar lengre tid å oppdatere i forhåndsvisningen enn forventet. Denne lengre oppdateringen skyldes at Power Query spør datakilden på nytt i stedet for å jobbe med en lokal kopi av dataene.