Forespørgselsdelegering på oprindelige forespørgsler

I Power Query kan du definere en oprindelig forespørgsel og køre den mod 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:

Forbind, der skal målrettes fra datakilden

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 vil denne node være databaseniveauet på serveren.

dialogboksen Forbind indstillinger for forbindelsen til Databasen AdventureWorks2019 på en lokal forekomst af SQL Server.

Når du har defineret forbindelsesindstillingerne og angivet legitimationsoplysningerne for din forbindelse, føres du til navigationsdialogboksen for datakilden. I denne dialogboks kan du se 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.

Højreklik på databasenoden i navigatorvinduet i Power Query, 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.

Billede, hvor brugeren har højreklikket på databasenoden i navigatoren med fokus på menupunktet Transformér data.

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.

Forespørgsel 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 skal 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 parameteren forth for den funktion, hvor feltet EnableFolding-post er angivet til sand.

Ny formel for brugerdefineret 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. Du kan klikke på Fortsæt for at evaluere dette trin.

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

Oprindelig forespørgsel evalueret i forhold til destinationsdatabasen.

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.

Filtrering af kolonnen DepartmentID, 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 yderligere, kan du højreklikke på trinnet Filtrerede rækker og vælge den indstilling, der læser 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 i venstre side af skærmen, der har en linktekst, der læser Vis detaljer. Du kan klikke på denne linktekst 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.

Forespørgselsplan for trinnet Filtrerede rækker.

Tip

I scenarier, hvor du får vist fejl, fordi forespørgselsdelegering ikke var mulig, anbefales det, 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.