Freigeben über


Query Folding bei nativen Abfragen

In Power Query können Sie eine systemeigene Abfrage definieren und sie gegen Ihre Datenquelle ausführen. Der Artikel Importieren von Daten aus einer Datenbank mit nativen Datenbankabfragen erklärt, wie dieser Prozess mit mehreren Datenquellen durchgeführt werden kann. Wenn Sie jedoch das in diesem Artikel beschriebene Verfahren verwenden, wird Ihre Abfrage keine Vorteile aus den nachfolgenden Abfrageschritten ziehen.

In diesem Artikel wird eine alternative Methode vorgestellt, mit der Sie native Abfragen für Ihre Datenquelle erstellen können, indem Sie die Funktion Value.NativeQuery verwenden und den Mechanismus zum Query Folding für nachfolgende Schritte Ihrer Abfrage aktiv lassen.

Hinweis

Wir empfehlen Ihnen, die Dokumentation zu query folding und die query folding indicators zu lesen, um die in diesem Artikel verwendeten Konzepte besser zu verstehen.

Unterstützte Datenconnectors

Die in den nächsten Abschnitten beschriebene Methode gilt für die folgenden Datenverbindungen:

Verbindung zum Ziel von der Datenquelle aus

Hinweis

Zur Veranschaulichung dieses Prozesses verwendet dieser Artikel den SQL Server-Connector und die Beispieldatenbank AdventureWorks2019. Die Erfahrung kann von Connector zu Connector variieren, aber dieser Artikel zeigt die Grundlagen, wie man Abfrage-Faltfunktionen über native Abfragen für die unterstützten Connectors aktiviert.

Wenn Sie eine Verbindung zur Datenquelle herstellen, ist es wichtig, dass Sie sich mit dem Knoten oder der Ebene verbinden, auf der Sie Ihre native Abfrage ausführen möchten. Für das Beispiel in diesem Artikel wird dieser Knoten die Datenbankebene innerhalb des Servers sein.

Dialog Verbindungseinstellungen für die Verbindung zur AdventureWorks2019-Datenbank auf einer lokalen Instanz von SQL Server.

Nachdem Sie die Verbindungseinstellungen definiert und die Anmeldeinformationen für Ihre Verbindung eingegeben haben, gelangen Sie zum Navigationsdialog für Ihre Datenquelle. Das Navigationsdialogfeld enthält alle verfügbaren Objekte, mit denen Sie eine Verbindung herstellen können.

Aus dieser Liste müssen Sie das Objekt auswählen, auf dem die systemeigene Abfrage ausgeführt wird (auch als Ziel bezeichnet). In diesem Beispiel ist dieses Objekt die Datenbankebene.

Klicken Sie im Navigationsfenster von Power Query mit der rechten Maustaste auf den Datenbankknoten im Navigationsfenster und wählen Sie die Option Transform Data. Wenn Sie diese Option wählen, wird eine neue Abfrage der Gesamtansicht Ihrer Datenbank erstellt, die das Ziel ist, das Sie zur Ausführung Ihrer nativen Abfrage benötigen.

Bild, bei dem der Benutzer mit der rechten Maustaste auf den Datenbank-Node in der Navigation geklickt hat, mit hervorgehobenem Menüelement Daten transformieren.

Sobald Ihre Abfrage im Power Query Editor landet, sollte nur der Schritt Source im Bereich Angewandte Schritte angezeigt werden. Dieser Schritt enthält eine Tabelle mit allen verfügbaren Objekten in Ihrer Datenbank, ähnlich wie sie im Navigator-Fenster angezeigt wurden.

Screenshot der Abfrage mit nur dem Quellschritt.

Funktion Value.NativeQuery verwenden

Ziel dieses Prozesses ist die Ausführung des folgenden SQL-Codes und die Anwendung weiterer Transformationen mit Power Query, die in den Quellcode zurückverwandelt werden können.

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

Der erste Schritt bestand darin, das richtige Ziel zu definieren, das in diesem Fall die Datenbank ist, in der der SQL-Code ausgeführt werden soll. Sobald ein Schritt das richtige Ziel hat, können Sie diesen Schritt auswählen - in diesem Fall Quelle in Angewandte Schritte- und dann die Schaltfläche fx in der Formelleiste auswählen, um einen benutzerdefinierten Schritt hinzuzufügen. In diesem Beispiel ersetzen Sie die Formel Source durch die folgende Formel:

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

Die wichtigste Komponente dieser Formel ist die Verwendung des optionalen Datensatzes für den vierten Parameter der Funktion, bei der das Datensatzfeld EnableFolding auf truegesetzt ist.

Neue benutzerdefinierte Schrittformel mit der Verwendung der Funktion Value.NativeQuery und der expliziten SQL-Abfrage.

Hinweis

Weitere Informationen über die Funktion Value.NativeQuery finden Sie im offiziellen Dokumentationsartikel von unter.

Nachdem Sie die Formel eingegeben haben, wird eine Warnung angezeigt, die Sie auffordert, die Ausführung nativer Abfragen für Ihren spezifischen Schritt zu aktivieren. Sie können auf Weiter klicken, damit dieser Schritt ausgewertet wird.

Mit dieser SQL-Anweisung wird eine Tabelle mit nur drei Zeilen und zwei Spalten erstellt.

Screenshot mit den Ergebnissen der systemeigenen Abfrage, die für die Zieldatenbank ausgewertet wird.

Testabfrage falten

Um das Query Folding Ihrer Abfrage zu testen, können Sie versuchen, einen Filter auf eine Ihrer Spalten anzuwenden und zu sehen, ob der Query Folding-Indikator im Abschnitt „Angewandte Schritte“ den Schritt als umgefaltet anzeigt. In diesem Fall können Sie die Spalte DepartmentID so filtern, dass sie Werte enthält, die ungleich zwei sind.

Filtern Sie die Spalte DepartmentID so, dass sie Werte enthält, die ungleich zwei sind.

Nachdem Sie diesen Filter hinzugefügt haben, können Sie überprüfen, ob die Indikatoren für das Query Folding immer noch das Query Folding in diesem neuen Schritt anzeigen.

Filterschritt, der im Abschnitt Angewandte Schritte als zur Datenquelle zurückgefaltet angezeigt wird.

Um weiter zu überprüfen, welche Abfrage an die Datenquelle gesendet wird, können Sie mit der rechten Maustaste auf den Schritt Gefilterte Zeilen klicken und die Option Abfrageplan anzeigen auswählen, um den Abfrageplan für diesen Schritt zu überprüfen.

In der Abfrageplanansicht sehen Sie auf der linken Seite des Bildschirms einen Knoten mit dem Namen Value.NativeQuery, der einen Hyperlinktext mit der Bezeichnung View detailshat. Sie können auf diesen Hyperlinktext klicken, um die genaue Abfrage anzuzeigen, die an die SQL Server-Datenbank gesendet wird.

Die ursprüngliche Abfrage wird um eine andere SELECT-Anweisung gewickelt, um eine Unterabfrage des Originals zu erstellen. Power Query tut sein Bestes, um die optimalste Abfrage unter Berücksichtigung der verwendeten Transformationen und der bereitgestellten nativen Abfrage zu erstellen.

Abfrageplan für den Schritt Gefilterte Zeilen.

Tipp

Für Szenarien, in denen Sie Fehler erhalten, weil das Query Folding nicht möglich war, wird empfohlen, dass Sie versuchen, Ihre Schritte als Unterabfrage Ihrer ursprünglichen nativen Abfrage zu validieren, um zu prüfen, ob es möglicherweise Syntax- oder Kontextkonflikte gibt.