Freigeben über


Abfrageplan für Power Query

Der Abfrageplan für Power Query ist ein Feature, das eine bessere Ansicht der Auswertung Ihrer Abfrage bietet. Damit kann bestimmt werden, warum das Folding für eine bestimmte Abfrage bei einem bestimmten Schritt nicht erfolgt.

In einem praktischen Beispiel veranschaulicht dieser Artikel den Hauptanwendungsfall und potenzielle Vorteile der Verwendung des Abfrageplanfeatures, um Ihre Abfrageschritte zu überprüfen. Die in diesem Artikel verwendeten Beispiele wurden mithilfe der AdventureWorksLT-Beispieldatenbank für Azure SQL Server erstellt, die Sie aus AdventureWorks-Beispieldatenbanken herunterladen können.

Hinweis

Das Abfrageplanfeature für Power Query ist nur in Power Query Online verfügbar.

Diagramm des vorgeschlagenen Prozesses des Abfrageplanfeatures durch Überprüfen der Abfragefaltungsindikatoren, Überprüfen des Abfrageplans für einen ausgewählten Schritt und Implementieren von Änderungen, die von der Abfrageplanüberprüfung abgeleitet wurden.

Dieser Artikel ist in eine Reihe empfohlener Schritte unterteilt, um den Abfrageplan zu interpretieren. Die folgenden Schritte sind:

  1. Überprüfen Sie die Abfragefaltungsindikatoren.
  2. Wählen Sie den Abfrageschritt aus, um den Abfrageplan zu überprüfen.
  3. Implementieren Sie Änderungen an Ihrer Abfrage.

Führen Sie die folgenden Schritte aus, um die Abfrage in Ihrer eigenen Power Query Online-Umgebung zu erstellen.

  1. Wählen Sie unter Power Query – Datenquelle auswählen die Option Leere Abfrage aus.

  2. Ersetzen Sie das Skript der leeren Abfrage durch die folgende Abfrage.

    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. Ändern Sie servername und database mit den richtigen Namen für Ihre eigene Umgebung.

  4. (Optional) Wenn Sie versuchen, eine Verbindung mit einem Server und einer Datenbank für eine lokale Umgebung herzustellen, müssen Sie unbedingt ein Gateway für diese Umgebung konfigurieren.

  5. Wählen Sie Weiteraus.

  6. Wählen Sie im Power Query-Editor die Option "Verbindung konfigurieren" aus, und geben Sie die Anmeldeinformationen für Ihre Datenquelle an.

Hinweis

Weitere Informationen zum Herstellen einer Verbindung mit einem SQL Server erhalten Sie in der SQL Server-Datenbank.

Nachdem Sie diese Schritte ausgeführt haben, sieht Ihre Abfrage wie in der folgenden Abbildung aus.

Screenshot der Beispielabfrage mit aktivierten Abfragefaltungsindikatoren.

Diese Abfrage stellt eine Verbindung mit der Tabelle "SalesOrderHeader" her und wählt einige Spalten aus den letzten fünf Bestellungen mit einem TotalDue-Wert über 1000 aus.

Hinweis

In diesem Artikel wird ein vereinfachtes Beispiel verwendet, um dieses Feature zu präsentieren, aber die in diesem Artikel beschriebenen Konzepte gelten für alle Abfragen. Wir empfehlen, vor dem Lesen des Abfrageplans über gute Kenntnisse der Abfragefaltung zu verfügen. Weitere Informationen zur Abfragefaltung finden Sie unter "Grundlagen zur Abfragefaltung".

1. Überprüfen der Query Folding-Indikatoren

Hinweis

Bevor Sie diesen Abschnitt lesen, empfehlen wir Ihnen, den Artikel zu Abfragefaltungsindikatoren zu überprüfen.

Ihr erster Schritt in diesem Prozess besteht darin, Ihre Abfrage zu überprüfen und die Indikatoren für Abfragefaltung aufmerksam zu betrachten. Ziel ist es, die Schritte zu überprüfen, die als nicht gefaltet gekennzeichnet sind. Dann können Sie sehen, ob Änderungen an der Gesamtabfrage diese Transformationen vollständig überflüssig machen könnten.

Screenshot der Abfragefaltungsindikatoren für die Beispielabfrage im Bereich

In diesem Beispiel ist der einzige Schritt, für den das Folding nicht durchgeführt werden kann, Beibehaltene untere Zeilen. Dies ist einfach am Schrittindikator Folding nicht durchgeführt zu erkennen. Dieser Schritt ist auch der letzte Schritt der Abfrage.

Das Ziel besteht nun darin, diesen Schritt zu überprüfen und zu verstehen, was wieder in die Datenquelle gefaltet wird und was nicht gefaltet werden kann.

2. Wählen Sie den Abfrageschritt aus, um den Abfrageplan zu überprüfen.

Sie haben den Schritt " Untere Zeilen beibehalten " als einen interessanten Schritt identifiziert, da er nicht wieder zur Datenquelle gefaltet wird. Klicken Sie mit der rechten Maustaste auf den Schritt, und wählen Sie die Option " Abfrageplan anzeigen " aus. Diese Aktion zeigt ein neues Dialogfeld an, das ein Diagramm für den Abfrageplan des ausgewählten Schritts enthält.

Screenshot des Dialogfelds

Power Query versucht, Ihre Abfrage zu optimieren, indem es die Vorteile der Lazy Evaluation und Query Folding nutzt, wie in den Grundlagen der Abfragefaltung erwähnt. Dieser Abfrageplan stellt die optimierte Übersetzung Ihrer M-Abfrage in die systemeigene Abfrage dar, die an die Datenquelle gesendet wird. Sie enthält auch alle Transformationen, die vom Power Query-Modul ausgeführt werden. Die Reihenfolge, in der die Knoten angezeigt werden, folgt der Reihenfolge der Abfrage beginnend mit dem letzten Schritt oder der Ausgabe Ihrer Abfrage, die ganz links vom Diagramm dargestellt wird. In diesem Fall ist es der Table.LastN-Knoten, der den Schritt Beibehaltene untere Zeilen darstellt.

Am unteren Rand des Dialogfelds befindet sich eine Leiste mit Symbolen, mit denen Sie die Anzeige des Abfrageplans vergrößern oder verkleinern können, sowie andere Schaltflächen, mit denen Sie die Ansicht verwalten können. Für das vorherige Bild wurde die Option "An Ansicht anpassen" aus dieser Leiste verwendet, um die Knoten besser zu erkennen.

Screenshot des Dialogfelds

Hinweis

Der Abfrageplan stellt den optimierten Plan dar. Wenn das Modul eine Abfrage auswertet, versucht es, alle Operatoren in eine Datenquelle zu falten. In einigen Fällen kann es sogar eine interne Umordnung der Schritte vornehmen, um die Faltung zu maximieren. Bei diesem Prozess enthalten die Knoten/Operatoren, die in diesem optimierten Abfrageplan verbleiben, in der Regel die Datenquellenabfrage, für die das Folding durchgeführt wurde. Alle Operatoren, für die das Folding nicht durchgeführt werden konnten, werden lokal ausgewertet.

Identifiziere gefaltete Knoten von anderen Knoten.

Sie können die Knoten in diesem Diagramm als zwei Gruppen identifizieren:

  • Knoten, für die das Folding durchgeführt wurde: Bei diesem Knoten kann es sich entweder um Value.NativeQuery oder um „Datenquellen“-Knoten wie Sql.Database handeln. Diese Knoten können auch mit der Bezeichnung remote unter ihrem Funktionsnamen identifiziert werden.
  • Nicht gefaltete Knoten: Andere Tabellenoperatoren, z. B. Table.SelectRows, Table.SelectColumns und andere Funktionen, die nicht gefaltet werden konnten. Diese Knoten können auch mit den Bezeichnungen "Vollständiger Scan " und "Streaming" identifiziert werden.

Die folgende Abbildung zeigt die gefalteten Knoten innerhalb des roten Rechtecks. Für den Rest der Knoten konnte das Folding zurück zur Datenquelle nicht durchgeführt werden. Sie müssen den Rest der Knoten prüfen, da das Ziel darin besteht, für diese Knoten wieder das Folding zurück zur Datenquelle durchzuführen.

Screenshot der Steuerelemente für die Abfrageplanansicht am unteren Rand des Dialogfelds mit ausgewählter Option

Sie können unten in einigen Knoten "Details anzeigen" auswählen, um erweiterte Informationen anzuzeigen. Die Details des Value.NativeQuery Knotens zeigen z. B. die systemeigene Abfrage (in SQL) an, die an die Datenquelle gesendet wird.

Screenshot der Detailansicht für den Knoten Value.NativeQuery im Abfrageplan.

Die hier gezeigte Abfrage ist möglicherweise nicht genau dieselbe Abfrage, die an die Datenquelle gesendet wird, aber es ist eine gute Annäherung. In diesem Fall erfahren Sie genau, welche Spalten aus der Tabelle "SalesOrderHeader" abgefragt werden. Anschließend wird die Tabelle mithilfe des Felds "TotalDue" gefiltert, um nur Zeilen abzurufen, bei denen der Wert für dieses Feld größer als 1000 ist. Der Knoten daneben, Table.LastN, wird lokal vom Power Query-Modul berechnet, da er nicht gefaltet werden kann.

Hinweis

Die Operatoren stimmen möglicherweise nicht genau mit den Funktionen überein, die im Skript der Abfrage verwendet werden.

Überprüfen Sie Knoten, für die das Folding nicht durchgeführt wurde, und ziehen Sie Aktionen in Betracht, um für Ihre Transformation das Folding zu erreichen.

Sie haben nun ermittelt, welche Knoten nicht gefaltet werden konnten und lokal ausgewertet werden können. Dieser Fall hat nur den Table.LastN Knoten, aber in anderen Szenarien könnte es viele mehr haben.

Ziel ist es, Änderungen auf Ihre Abfrage anzuwenden, damit der Schritt gefaltet werden kann. Einige der Änderungen, die Sie möglicherweise implementieren, können von der Neuanordnung Ihrer Schritte bis zum Anwenden einer alternativen Logik auf Ihre Abfrage reichen, die für die Datenquelle expliziter ist. Dies bedeutet nicht, dass alle Abfragen und alle Vorgänge durch Anwenden einiger Änderungen gefaltet werden können. Es empfiehlt sich jedoch, durch Versuch und Irrtum zu ermitteln, ob Ihre Abfrage zurückgefaltet werden kann.

Da es sich bei der Datenquelle um eine SQL Server-Datenbank handelt, wenn das Ziel darin besteht, die letzten fünf Bestellungen aus der Tabelle abzurufen, wäre eine gute Alternative das Nutzen der TOP- und ORDER BY-Klauseln in SQL. Da in SQL keine BOTTOM-Klausel vorhanden ist, kann die Table.LastN Transformation in PowerQuery nicht in SQL übersetzt werden. Sie könnten den Table.LastN Schritt entfernen und durch Folgendes ersetzen:

  • Eine absteigende Sortierung nach der Spalte "SalesOrderID" in der Tabelle, da diese Spalte bestimmt, welche Reihenfolge zuerst erfolgt und welche zuletzt eingegeben wurde.
  • Wählen Sie die obersten fünf Zeilen aus. Da die Tabelle sortiert wurde, erreicht diese Transformation dasselbe wie eine Beibehaltung der unteren Zeilen (Table.LastN).

Diese Alternative entspricht der ursprünglichen Abfrage. Obwohl diese Alternative theoretisch gut erscheint, müssen Sie die Änderungen vornehmen, um festzustellen, ob diese Alternative diesen Knoten vollständig in die Datenquelle zurückfaltet.

3. Implementieren von Änderungen an Ihrer Abfrage

Implementieren Sie die im vorherigen Abschnitt erläuterte Alternative:

  1. Schließen Sie das Abfrageplandialogfeld, und wechseln Sie zurück zum Power Query-Editor.

  2. Entfernen Sie den Schritt "Untere Zeilen beibehalten" .

  3. Sortieren Sie die Spalte "SalesOrderID " in absteigender Reihenfolge.

    Screenshot, der zeigt, wie die Spalte

  4. Wählen Sie das Tabellensymbol in der oberen linken Ecke der Datenvorschauansicht aus, und wählen Sie die Option „Obere Zeilen beibehalten“ aus. Übergeben Sie im Dialogfeld die Zahl 5 als Argument, und drücken Sie "OK".

    Screenshot, der zeigt, wie Sie das Kontextmenü der Tabelle verwenden, um die Funktion

Überprüfen Sie nach der Implementierung der Änderungen die Indikatoren für die Abfragefaltung erneut und sehen Sie, ob Ihnen ein gefalteter Indikator angezeigt wird.

Der Screenshot zeigt, dass alle Abfragefaltungsindikatoren grün sind und dass sie gefaltet werden können. Die letzte Tabelle enthält die gleichen Zeilen, jedoch in einer anderen Reihenfolge.

Jetzt ist es an der Zeit, den Abfrageplan des letzten Schritts zu überprüfen, welcher jetzt Oberste Zeilen behalten ist. Jetzt sind nur Knoten vorhanden, für die das Folding durchgeführt wurde. Wählen Sie " Details anzeigen" aus Value.NativeQuery , um zu überprüfen, welche Abfrage an die Datenbank gesendet wird.

Screenshot des neuen Abfrageplans nach dem Vornehmen der Änderungen an der Abfrage, die jetzt nur gefaltete Knoten anzeigt, mit Value.NativeQuery mit der vollständigen SQL-Anweisung, die die Abfrage auswertet.

Dieser Artikel schlägt zwar vor, welche Alternative angewendet werden soll, aber das Hauptziel besteht darin, zu erfahren, wie Sie den Abfrageplan verwenden, um die Abfragefaltung zu untersuchen. In diesem Artikel wird auch angezeigt, was an Ihre Datenquelle gesendet wird und welche Transformationen lokal durchgeführt werden.

Sie können Ihren Code anpassen, um die Auswirkungen anzuzeigen, die er in Ihrer Abfrage hat. Durch die Verwendung von Indikatoren für die Abfragefaltung haben Sie auch eine bessere Vorstellung davon, welche Schritte verhindern, dass Ihre Abfrage gefaltet werden kann.