Dela via


Frågedelegering på interna frågor

I Power Query kan du definiera en intern fråga och köra den mot din datakälla. Artikeln Importera data från en databas med intern databasfråga förklarar hur du gör den här processen med flera datakällor. Men genom att använda den process som beskrivs i den artikeln drar din fråga inte nytta av någon frågedelegering från efterföljande frågesteg.

Den här artikeln visar en alternativ metod för att skapa interna frågor mot din datakälla med funktionen Value.NativeQuery och hålla frågedelegeringsmekanismen aktiv för efterföljande steg i frågan.

Kommentar

Vi rekommenderar att du läser dokumentationen om frågedelegering och frågedelegeringsindikatorerna för att bättre förstå de begrepp som används i den här artikeln.

Dataanslutningsprogram som stöds

Metoden som beskrivs i nästa avsnitt gäller för följande dataanslutningar:

Ansluta till målet från datakällan

Kommentar

För att visa den här processen använder den här artikeln SQL Server-anslutningsappen och AdventureWorks2019-exempeldatabasen. Upplevelsen kan variera från anslutningsapp till anslutningsapp, men den här artikeln beskriver grunderna för hur du aktiverar frågedelegeringsfunktioner i interna frågor för anslutningsappar som stöds.

När du ansluter till datakällan är det viktigt att du ansluter till noden eller nivån där du vill köra din interna fråga. I exemplet i den här artikeln är den noden databasnivån på servern.

Skärmbild av dialogrutan anslutningsinställningar för anslutningen till databasen AdventureWorks2019 på en lokal instans av SQL Server.

När du har definierat anslutningsinställningarna och angett autentiseringsuppgifterna för anslutningen öppnas navigeringsdialogrutan för datakällan. Navigeringsdialogrutan innehåller alla tillgängliga objekt som du kan ansluta till.

I den här listan måste du välja det objekt där den interna frågan körs (även kallat målet). I det här exemplet är det objektet databasnivån.

I navigeringsfönstret i Power Query väljer du och håller (eller högerklickar) databasnoden i navigeringsfönstret och väljer alternativet Transformera data . Om du väljer det här alternativet skapas en ny fråga i den övergripande vyn för databasen, som är det mål som du behöver för att köra din interna fråga.

Skärmbild av välj data där användaren högerklickade på databasnoden i navigatören med Transformeringsdata framhävd.

När frågan har landat i Power Query-redigeraren ska endast källsteget visas i fönstret Tillämpade steg. Det här steget innehåller en tabell med alla tillgängliga objekt i databasen, ungefär som de visades i fönstret Navigatör.

Skärmbild av frågan med endast källsteget.

Använd funktionen Value.NativeQuery

Målet med den här processen är att köra följande SQL-kod och tillämpa fler transformeringar med Power Query som kan vikas tillbaka till källan.

SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'

Det första steget var att definiera rätt mål, vilket i det här fallet är databasen där SQL-koden körs. När ett steg har rätt mål kan du välja det steget, i det här fallet Källa i Tillämpade steg, och sedan välja knappen fx i formelfältet för att lägga till ett anpassat steg. I det här exemplet ersätter du formeln Source med följande formel:

Value.NativeQuery(Source, "SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'  ", null, [EnableFolding = true])

Den viktigaste komponenten i den här formeln är användningen av den valfria posten för den fjärde parametern i funktionen som har fältet EnableFolding-post inställt på true.

Skärmbild av den nya anpassade stegformeln med användningen av funktionen Value.NativeQuery och den explicita SQL-frågan.

Kommentar

Du kan läsa mer om funktionen Value.NativeQuery i den officiella dokumentationsartikeln.

När du har angett formeln visas en varning som kräver att du aktiverar interna frågor för att köras för ditt specifika steg. Välj Fortsätt för att det här steget ska utvärderas.

Den här SQL-instruktionen ger en tabell med endast tre rader och två kolumner.

Skärmbild med resultatet av den interna frågan utvärderad mot måldatabasen.

Testa frågedelegering

Om du vill testa frågedelegeringen för frågan kan du försöka använda ett filter på någon av dina kolumner och se om frågedelegeringsindikatorn i avsnittet tillämpade steg visar steget som vikt. I det här fallet kan du filtrera kolumnen DepartmentID så att den har värden som inte är lika med två.

Skärmbild som visar hur du filtrerar kolumnen DepartmentID så att den bara har de värden som inte är lika med två.

När du har lagt till det här filtret kan du kontrollera att frågedelegeringsindikatorerna fortfarande visar frågedelegeringen i det här nya steget.

Filtersteget visas som vikt tillbaka till datakällan i avsnittet tillämpade steg.

För att ytterligare verifiera vilken fråga som skickas till datakällan kan du välja och hålla (eller högerklicka) steget Filtrerade rader och välja alternativet Visa frågeplan för att kontrollera frågeplanen för det steget.

I frågeplansvyn kan du se att en nod med namnet Value.NativeQuery som har hyperlänken Visa information . Du kan välja den här hyperlänken för att visa den exakta frågan som skickas till SQL Server-databasen.

Den interna frågan omsluts av en annan SELECT-instruktion för att skapa en underfråga av originalet. Power Query gör sitt bästa för att skapa den mest optimala frågan med tanke på de transformeringar som används och den interna frågan som tillhandahålls.

Skärmbild av frågeplanen för steget Filtrerade rader.

Dricks

För scenarier där du får fel eftersom frågedelegering inte var möjligt rekommenderar vi att du provar att verifiera dina steg som en underfråga i den ursprungliga interna frågan för att kontrollera om det kan finnas någon syntax eller kontextkonflikter.