Del via


Forespørgselsdelegering på oprindelige forespørgsler

I Power Query kan du definere en oprindelig forespørgsel og køre den i din datakilde. Artiklen Importér data fra en database ved hjælp af oprindelig databaseforespørgsel forklarer, hvordan du gør denne proces med flere datakilder. Men ved hjælp af den proces, der er beskrevet i denne artikel, drager din forespørgsel ikke fordel af nogen forespørgselsdelegering fra efterfølgende forespørgselstrin.

Denne artikel viser en alternativ metode til at oprette oprindelige forespørgsler i forhold til din datakilde ved hjælp af funktionen Value.NativeQuery og holde forespørgselsdelegeringsmekanismen aktiv for efterfølgende trin i forespørgslen.

Bemærk

Vi anbefaler, at du læser dokumentationen om forespørgselsdelegering og indikatorer for forespørgselsdelegering for bedre at forstå de begreber, der bruges i denne artikel.

Understøttede dataconnectors

Den metode, der er beskrevet i de næste afsnit, gælder for følgende dataconnectors:

Opret forbindelse til destination fra datakilde

Bemærk

For at vise denne proces bruger denne artikel SQL Server-connectoren og Eksempeldatabasen AdventureWorks2019. Oplevelsen kan variere fra connector til connector, men i denne artikel vises de grundlæggende oplysninger om, hvordan du aktiverer forespørgselsdelegeringsfunktioner i forhold til oprindelige forespørgsler for de understøttede connectors.

Når du opretter forbindelse til datakilden, er det vigtigt, at du opretter forbindelse til den node eller det niveau, hvor du vil udføre din oprindelige forespørgsel. I eksemplet i denne artikel er denne node databaseniveauet på serveren.

Skærmbillede af dialogboksen med forbindelsesindstillinger for forbindelsen til Databasen AdventureWorks2019 på en lokal forekomst af SQL Server.

Når du har defineret forbindelsesindstillingerne og angivet legitimationsoplysningerne for din forbindelse, åbnes navigationsdialogboksen for datakilden. Navigationsdialogboksen indeholder alle de tilgængelige objekter, du kan oprette forbindelse til.

På denne liste skal du vælge det objekt, hvor den oprindelige forespørgsel køres (også kaldet destinationen). I dette eksempel er dette objekt databaseniveauet.

Vælg databasenoden i vinduet Navigator i Power Query, og hold den nede (eller højreklik) i navigatorvinduet, og vælg indstillingen Transformér data . Hvis du vælger denne indstilling, oprettes der en ny forespørgsel om den overordnede visning af databasen, som er det mål, du skal bruge for at køre den oprindelige forespørgsel.

Skærmbillede af valg af data, hvor brugeren har højreklikket på databasenoden i navigatoren, hvor Transformér data er fremhævet.

Når din forespørgsel lander i Power Query-editoren, er det kun trinnet Kilde , der skal vises i ruden Anvendte trin. Dette trin indeholder en tabel med alle de tilgængelige objekter i databasen på samme måde, som de blev vist i vinduet Navigator.

Skærmbillede af forespørgslen med kun kildetrinnet.

Brug funktionen Value.NativeQuery

Målet med denne proces er at udføre følgende SQL-kode og anvende flere transformationer med Power Query, der kan foldes tilbage til kilden.

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

Det første trin var at definere den korrekte destination, som i dette tilfælde er den database, hvor SQL-koden køres. Når et trin har det korrekte mål, kan du vælge dette trin – i dette tilfælde Kilde i Anvendte trin – og derefter vælge knappen fx på formellinjen for at tilføje et brugerdefineret trin. I dette eksempel skal du erstatte formlen Source med følgende formel:

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

Den vigtigste komponent i denne formel er brugen af den valgfri post for den fjerde parameter for den funktion, hvor feltet EnableFolding-post er angivet til sand.

Skærmbillede af den nye formel for brugerdefinerede trin med brugen af funktionen Value.NativeQuery og den eksplicitte SQL-forespørgsel.

Bemærk

Du kan læse mere om funktionen Value.NativeQuery i den officielle dokumentationsartikel.

Når du har angivet formlen, vises der en advarsel, der kræver, at du aktiverer oprindelige forespørgsler for at køre for dit specifikke trin. Vælg Fortsæt for at evaluere dette trin.

Denne SQL-sætning giver en tabel med kun tre rækker og to kolonner.

Skærmbillede med resultaterne af den oprindelige forespørgsel, der evalueres i forhold til måldatabasen.

Test forespørgselsdelegering

Hvis du vil teste forespørgselsdelegeringen af forespørgslen, kan du prøve at anvende et filter på en af dine kolonner og se, om indikatoren for forespørgselsdelegering i afsnittet Anvendte trin viser trinnet som foldet. I dette tilfælde kan du filtrere kolonnen DepartmentID, så den har værdier, der ikke er lig med to.

Skærmbillede, der demonstrerer, hvordan kolonnen DepartmentID filtreres, så den kun har de værdier, der ikke er lig med to.

Når du har tilføjet dette filter, kan du kontrollere, at forespørgselsdelegeringsindikatorerne stadig viser forespørgselsdelegeringen på dette nye trin.

Filtertrin vist som foldet tilbage til datakilden i afsnittet anvendte trin.

Hvis du vil validere, hvilken forespørgsel der sendes til datakilden, kan du vælge og holde (eller højreklikke) på trinnet Filtrerede rækker og vælge indstillingen Vis forespørgselsplan for at kontrollere forespørgselsplanen for det pågældende trin.

I visningen forespørgselsplan kan du se, at en node med navnet Value.NativeQuery, der har et link til visningsoplysninger . Du kan vælge dette link for at få vist den nøjagtige forespørgsel, der sendes til SQL Server-databasen.

Den oprindelige forespørgsel ombrydes omkring en anden SELECT-sætning for at oprette en underforespørgsel af originalen. Power Query gør sit bedste for at oprette den mest optimale forespørgsel på grund af de anvendte transformationer og den oprindelige forespørgsel, der er angivet.

Skærmbillede af forespørgselsplanen for trinnet Filtrerede rækker.

Tip

I scenarier, hvor du får vist fejl, fordi forespørgselsdelegering ikke var mulig, anbefaler vi, at du prøver at validere dine trin som en underforespørgsel af den oprindelige oprindelige forespørgsel for at kontrollere, om der kan være syntaks- eller kontekstkonflikter.