Frågeplan för Power Query

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 skapades med adventureworksLT-exempeldatabasen för Azure SQL Server, som du kan ladda ned från AdventureWorks-exempeldatabaser.

Anmärkning

Frågeplansfunktionen för Power Query är endast tillgänglig i Power Query Online.

Diagram över den föreslagna processen för frågeplansfunktionen genom att granska frågedelegeringsindikatorerna, undersöka frågeplanen för ett valt steg och genomföra de ändringar som kommer från granskningen av frågeplanen.

Den här artikeln är uppdelad i en serie rekommenderade steg för att tolka frågeplanen. Följande steg är:

  1. Granska frågedelegeringsindikatorerna.
  2. Välj frågesteget för att granska frågeplanen.
  3. Implementera ändringar i frågan.

Använd följande steg för att skapa frågan i din egen Power Query Online-miljö.

  1. Från Power Query - Välj datakälla, välj Tom fråga.

  2. 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"
    
  3. Ändra servername och database med rätt namn för din egen miljö.

  4. (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.

  5. Välj Nästa.

  6. I Power Query-redigeraren väljer du Konfigurera anslutning och anger autentiseringsuppgifterna för datakällan.

Anmärkning

Mer information om hur du ansluter till en SQL Server finns i SQL Server-databas.

När du har följt de här stegen ser frågan ut som den i följande bild.

Skärmbild av exempelfrågan med frågefällningsindikatorer aktiverade.

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.

Anmärkning

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

Anmärkning

Innan du läser det här avsnittet rekommenderar vi att du granskar artikeln om Query-vecklingsindikatorer.

Första steget är att granska din sökfråga och vara uppmärksam på frågefällningsindikatorerna. Målet är att granska de steg som har markerats som ej vikta. Sedan kan du se om ändringar i den övergripande förfrågningen kan göra att dessa transformeringar elimineras helt.

Skärmbild av frågevikindikatorerna för exempelfrågan i fönstret för Tillämpade steg.

I det här exemplet är steget som inte kan vikas "Bevarade nedre rader" och det är enkelt att identifiera genom stegindikatorn "inte vikt". 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 återkopplas till datakällan och vad som inte kan återkopplas.

2. Välj frågesteget för att granska frågeplanen

Du har identifierat steget Bevarade nedre rader som ett av intresse eftersom det inte återkopplas 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.

Skärmbild av dialogrutan Frågeplan som visar en diagramvy för frågeplanen med noder som är anslutna via rader.

Power Query försöker optimera din fråga genom att dra nytta av fördröjd utvärdering och frågeaggregering, såsom nämnts i grunderna för frågeaggregering. 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 visas längst till vänster i diagrammet. I det här fallet är det noden Table.LastN som representerar Bevarade nedre rader steg.

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 till visning från den här verktygsfältet för att bättre uppskatta noderna.

Skärmbild av dialogrutan Frågeplan med noderna förstorade för en bättre vy.

Anmärkning

Frågeplanen representerar den optimerade planen. När motorn utvärderar en fråga försöker den införa alla operatorer i en datakälla. I vissa fall kan det till och med göra en intern omordning av stegen för att maximera vikningen. Med den här processen i åtanke innehåller de noder/operatorer som finns kvar i den här optimerade frågeplanen vanligtvis den "sammanslagna" datakällfrågan. Alla operatorer som inte kunde förenklas utvärderas lokalt.

Identifiera hopfällda 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ällnoder", till exempel Sql.Database. Dessa noder kan också identifieras med etiketten fjärr- under deras funktionsnamn.
  • Icke-fällda noder: Andra tabelloperatorer, till exempel Table.SelectRows, Table.SelectColumnsoch andra funktioner som inte kunde fällas. Dessa noder kan också identifieras med etiketterna , Fullständig genomsökning och , Streaming.

Följande bild visar de vikta noderna i den röda rektangeln. Resten av noderna kunde inte återställas 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.

Skärmbild av kontrollerna för vyn Frågeplan längst ner i dialogrutan, med alternativet anpassa-vyn valt.

Du kan välja Visa information längst ned på vissa noder för att visa utökad information. Information om noden Value.NativeQuery visar till exempel den interna frågan (i SQL) som skickas till datakällan.

Skärmbild av informationsvyn för noden Value.NativeQuery i frågeplanen.

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 efterfrågas från tabellen SalesOrderHeader. Sedan filtrerar den 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.

Anmärkning

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 transformation vikbar

Nu har du fastställt vilka noder som inte kunde vikas och kan utvärderas lokalt. Det här fallet har bara Table.LastN nod, men i andra scenarier kan det ha många fler.

Målet är att tillämpa ändringar i din fråga så att steget kan förenklas. 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 förfrågningar och alla åtgärder kan optimeras genom att tillämpa vissa ändringar. Men det är en bra praxis att avgöra genom provning och fel om din fråga kan ändras.

Eftersom datakällan är en SQL Server-databas, om målet är att hämta de fem sista beställningarna från tabellen, är ett bra alternativ att dra nytta av TOP- och ORDER BY-satser i SQL. Eftersom det inte finns någon BOTTOM-klausul i SQL kan inte Table.LastN transform i Power Query översättas till SQL. Du kan ta bort Table.LastN-steget och ersätta det med:

  • Ett sorteringssteg efter kolumnen SalesOrderID i tabellen, eftersom den här kolumnen avgör vilken ordning som går först och vilken som angavs sist.
  • Välj de fem översta raderna eftersom tabellen har sorterats utförs denna transformation på samma sätt som om det var en Bevarade nedre rader (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:

  1. Stäng dialogrutan frågeplan och gå tillbaka till Power Query-redigeraren.

  2. Ta bort Sparade nedersta rader steg.

  3. Sortera kolumnen SalesOrderID i fallande ordning.

    Skärmbild som visar hur du sorterar kolumnen SalesOrderID i fallande ordning med hjälp av autofiltermenyn.

  4. 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.

    Skärmbild som visar hur du använder snabbmenyn i tabellen för att välja transformering av Behåll de översta raderna för att endast behålla de fem översta raderna.

När du har implementerat ändringarna, kontrollera indikatorerna för frågefällning igen och se om det visar en fälld indikator.

Skärmbild som visar att alla frågedelegeringsindikatorer är gröna och visar att de kan vikas. Den slutliga tabellen innehåller samma rader men i en annan ordning.

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.

Skärmbild av den nya frågeplanen när du har gjort ändringarna i frågan, som nu endast visar vikta noder, med Value.NativeQuery som visar den fullständiga SQL-instruktionen som utvärderar frågan.

Den här artikeln föreslår vilket alternativ som bör tillämpas, men huvudmålet är att du ska lära dig hur du använder frågeplanen för att undersöka frågevikning. Den här artikeln ger också insyn i vad som skickas till din datakälla och vilka transformeringar som görs lokalt.

Du kan justera koden för att se vilken inverkan den har i din fråga. Genom att använda vecklingsindikationerna har du också en bättre uppfattning om vilka steg som hindrar din förfrågan från att vecklas.