Frågeplan för Power Query (förhandsversion)
Frågeplan för Power Query är en funktion som ger en bättre vy över frågans utvärdering. Det är användbart för att avgöra varför en viss fråga kanske inte viks i ett visst steg.
I ett praktiskt exempel visar den här artikeln de huvudsakliga användningsfallen och de potentiella fördelarna med att använda frågeplansfunktionen för att granska dina frågesteg. Exemplen som används i den här artikeln har skapats med adventureworksLT-exempeldatabasen för Azure SQL Server, som du kan ladda ned från AdventureWorks-exempeldatabaser.
Kommentar
Frågeplansfunktionen för Power Query är endast tillgänglig i Power Query Online.
Den här artikeln har delats upp i en serie rekommenderade steg för att tolka frågeplanen. Stegen ser ut så här:
- Granska frågedelegeringsindikatorerna.
- Välj frågesteget för att granska frågeplanen.
- Implementera ändringar i din fråga.
Använd följande steg för att skapa frågan i din egen Power Query Online-miljö.
Från Power Query – Välj datakälla väljer du Tom fråga.
Ersätt skriptet för den tomma frågan med följande fråga.
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"
Ändra
servername
ochdatabase
med rätt namn för din egen miljö.(Valfritt) Om du försöker ansluta till en server och databas för en lokal miljö måste du konfigurera en gateway för den miljön.
Välj Nästa.
I Power Query-redigeraren väljer du Konfigurera anslutning och anger autentiseringsuppgifterna för datakällan.
Kommentar
Mer information om hur du ansluter till en SQL Server finns i SQL Server-databasen.
När du har följt de här stegen ser frågan ut som den i följande bild.
Den här frågan ansluter till tabellen SalesOrderHeader och väljer några kolumner från de fem senaste beställningarna med ett TotalDue-värde över 1 000.
Kommentar
Den här artikeln använder ett förenklat exempel för att visa den här funktionen, men begreppen som beskrivs i den här artikeln gäller för alla frågor. Vi rekommenderar att du har goda kunskaper om frågedelegering innan du läser frågeplanen. Om du vill veta mer om frågedelegering går du till Grunderna för frågedelegering.
1. Granska frågedelegeringsindikatorerna
Kommentar
Innan du läser det här avsnittet rekommenderar vi att du läser artikeln om frågedelegeringsindikatorer.
Ditt första steg i den här processen är att granska frågan och vara uppmärksam på frågedelegeringsindikatorerna. Målet är att granska de steg som har markerats som ej vikta. Sedan kan du se om ändringar i den övergripande frågan kan göra att dessa transformeringar viks helt.
I det här exemplet är det enda steget som inte kan vikas Nedersta rader, vilket är enkelt att identifiera via den inte vikta stegindikatorn. Det här steget är också det sista steget i frågan.
Målet nu är att granska det här steget och förstå vad som viks tillbaka till datakällan och vad som inte kan vikas.
2. Välj frågesteget för att granska frågeplanen
Du har identifierat steget Bevarade nedre rader som ett steg av intresse eftersom det inte viks tillbaka till datakällan. Högerklicka på steget och välj alternativet Visa frågeplan . Den här åtgärden visar en ny dialogruta som innehåller ett diagram för frågeplanen för det valda steget.
Power Query försöker optimera frågan genom att dra nytta av lat utvärdering och frågedelegering, enligt vad som anges i grunderna för frågedelegering. Den här frågeplanen representerar den optimerade översättningen av M-frågan till den interna fråga som skickas till datakällan. Den innehåller även alla transformeringar som utförs av Power Query Engine. Ordningen som noderna visas i följer ordningen på din fråga med början från det sista steget eller utdata för frågan, som representeras längst till vänster i diagrammet och i det här fallet är noden Table.LastN som representerar steget Bevarade nedre rader .
Längst ned i dialogrutan finns ett fält med ikoner som hjälper dig att zooma in eller ut ur frågeplansvyn och andra knappar som hjälper dig att hantera vyn. För föregående bild användes alternativet Anpassa för att visa från det här fältet för att bättre uppskatta noderna.
Kommentar
Frågeplanen representerar den optimerade planen. När motorn utvärderar en fråga försöker den vika alla operatorer till en datakälla. I vissa fall kan det till och med göra en intern omordning av stegen för att maximera vikningen. Med detta i åtanke innehåller de noder/operatorer som finns kvar i den här optimerade frågeplanen vanligtvis den "vikta" datakällfrågan och alla operatorer som inte kunde vikas och utvärderas lokalt.
Identifiera vikta noder från andra noder
Du kan identifiera noderna i det här diagrammet som två grupper:
- Vikta noder: Den här noden kan vara antingen
Value.NativeQuery
eller "datakälla"-noder,Sql.Database
till exempel . Dessa kan också identifieras med etikettfjärrappen under deras funktionsnamn. - Icke-vikta noder: Andra tabelloperatorer, till exempel
Table.SelectRows
,Table.SelectColumns
och andra funktioner som inte kunde vikas. Dessa kan också identifieras med etiketterna Fullständig genomsökning och direktuppspelning.
Följande bild visar de vikta noderna i den röda rektangeln. Resten av noderna kunde inte vikas tillbaka till datakällan. Du måste granska resten av noderna eftersom målet är att försöka få noderna att vika tillbaka till datakällan.
Du kan välja Visa information längst ned på vissa noder för att visa utökad information. Information om Value.NativeQuery
noden visar till exempel den interna fråga (i SQL) som ska skickas till datakällan.
Frågan som visas här kanske inte är exakt samma fråga som skickas till datakällan, men det är en bra uppskattning. I det här fallet visas exakt vilka kolumner som ska frågas från tabellen SalesOrderHeader och sedan hur den filtrerar tabellen med fältet TotalDue för att bara hämta rader där värdet för fältet är större än 1 000. Noden bredvid den, Table.LastN, beräknas lokalt av Power Query-motorn eftersom den inte kan vikas.
Kommentar
Operatorerna kanske inte exakt matchar de funktioner som används i frågans skript.
Granska icke-vikta noder och överväg åtgärder för att göra din transformeringsdelegering
Nu har du fastställt vilka noder som inte kunde vikas och utvärderas lokalt. Det här fallet har Table.LastN
bara noden, men i andra scenarier kan den ha många fler.
Målet är att tillämpa ändringar i frågan så att steget kan vikas. Vissa av de ändringar som du kan implementera kan vara allt från att ordna om stegen till att tillämpa en alternativ logik på din fråga som är mer explicit för datakällan. Detta innebär inte att alla frågor och alla åtgärder kan vikas genom att vissa ändringar tillämpas. Men det är en bra idé att avgöra via utvärderingsversion och fel om frågan kan vikas tillbaka.
Eftersom datakällan är en SQL Server-databas, om målet är att hämta de senaste fem beställningarna från tabellen, är ett bra alternativ att dra nytta av TOP- och ORDER BY-satserna i SQL. Eftersom det inte finns någon BOTTOM-sats i SQL kan transformering Table.LastN
i PowerQuery inte översättas till SQL. Du kan ta bort Table.LastN
steget och ersätta det med:
- Ett fallande sorteringssteg efter kolumnen SalesOrderID i tabellen, eftersom den här kolumnen avgör vilken ordning som går först och vilken som har angetts sist.
- Välj de fem översta raderna eftersom tabellen har sorterats. Den här transformeringen åstadkommer samma sak som om den var en behållen nedre rad (
Table.LastN
).
Det här alternativet motsvarar den ursprungliga frågan. Även om det här alternativet i teorin verkar bra måste du göra ändringarna för att se om det här alternativet gör att noden helt viks tillbaka till datakällan.
3. Implementera ändringar i din fråga
Implementera det alternativ som beskrivs i föregående avsnitt:
Stäng dialogrutan frågeplan och gå tillbaka till Power Query-redigeraren.
Ta bort steget Bevarade nedre rader.
Sortera kolumnen SalesOrderID i fallande ordning.
Välj tabellikonen i det övre vänstra hörnet i dataförhandsgranskningsvyn och välj det alternativ som läser Behåll de översta raderna. I dialogrutan skickar du nummer fem som argument och trycker på OK.
När du har implementerat ändringarna kontrollerar du frågedelegeringsindikatorerna igen och ser om det ger dig en vikt indikator.
Nu är det dags att granska frågeplanen för det sista steget, som nu är Behåll de översta raderna. Nu finns det bara vikta noder. Välj Visa information under Value.NativeQuery
för att kontrollera vilken fråga som skickas till databasen.
Den här artikeln föreslår ett alternativ för att tillämpa, men huvudmålet är att du ska lära dig hur du använder frågeplanen för att undersöka frågedelegering. Den här artikeln ger också insyn i vad som skickas till din datakälla och vilka transformeringar som ska göras lokalt.
Du kan justera koden för att se vilken inverkan den har i din fråga. Genom att använda frågedelegeringsindikatorerna får du också en bättre uppfattning om vilka steg som hindrar frågan från att vikas.