Der Abfrageplan für Power Query ist eine Funktion, die einen besseren Überblick über die Auswertung Ihrer Abfrage bietet. Es ist nützlich, um festzustellen, warum eine bestimmte Abfrage in einem bestimmten Schritt nicht funktioniert.
Anhand eines praktischen Beispiels werden in diesem Artikel der Hauptanwendungsfall und die potenziellen Vorteile der Verwendung der Abfrageplanfunktion zur Überprüfung Ihrer Abfrageschritte erläutert. Die in diesem Artikel verwendeten Beispiele wurden mit der AdventureWorksLT-Beispieldatenbank für Azure SQL Server erstellt, die Sie unter AdventureWorks-Beispieldatenbanken herunterladen können.
Hinweis
Die Abfrageplanfunktion für Power Query ist nur in Power Query Online verfügbar.
Dieser Artikel ist in eine Reihe von empfohlenen Schritten unterteilt, um den Abfrageplan zu interpretieren. Diese Schritte sind die folgenden:
Führen Sie die folgenden Schritte aus, um die Abfrage in Ihrer eigenen Power Query Online-Umgebung zu erstellen.
Von Power Query - Wählen Sie die Datenquelle, wählen Sie Leere Abfrage.
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"
Ändern Sie servername und database mit den richtigen Namen für Ihre eigene Umgebung.
(Optional) Wenn Sie versuchen, eine Verbindung zu einem Server und einer Datenbank in einer lokalen Umgebung herzustellen, müssen Sie ein Gateway für diese Umgebung konfigurieren.
Wählen Sie Weiter aus.
Wählen Sie im Power Query Editor Verbindung konfigurieren und geben Sie die Anmeldeinformationen für Ihre Datenquelle an.
Hinweis
Weitere Informationen zur Verbindung mit einem SQL Server finden Sie unter SQL Server-Datenbank.
Wenn Sie diese Schritte befolgt haben, wird Ihre Abfrage wie in der folgenden Abbildung aussehen.
Diese Abfrage stellt eine Verbindung zur Tabelle SalesOrderHeader her und wählt einige Spalten der letzten fünf Bestellungen mit einem TotalDue-Wert über 1000 aus.
Hinweis
In diesem Artikel wird diese Funktion anhand eines vereinfachten Beispiels vorgestellt, aber die in diesem Artikel beschriebenen Konzepte gelten für alle Abfragen. Wir empfehlen Ihnen, vor dem Lesen des Abfrageplans über gute Kenntnisse der Abfragezusammenfassung zu verfügen. Weitere Informationen zu Query Folding finden Sie unter Grundlagen von Query Folding.
1. Überprüfen Sie die Abfrage-Faltindikatoren
Hinweis
Bevor Sie diesen Abschnitt lesen, empfehlen wir Ihnen, den Artikel über Query Folding -Indikatoren zu lesen.
Der erste Schritt in diesem Prozess besteht darin, Ihre Anfrage zu überprüfen und die Indikatoren für das Falten der Anfrage genau zu beachten. Ziel ist es, die Schritte zu überprüfen, die als nicht gefaltet markiert sind. Dann können Sie sehen, ob durch Änderungen an der Gesamtabfrage diese Transformationen vollständig aufgehoben werden können.
In diesem Beispiel ist der einzige Schritt, der nicht gefaltet werden kann, Kept bottom rows, der durch das Kennzeichen not folded leicht zu erkennen ist. Dieser Schritt ist auch der letzte Schritt der Abfrage.
Ziel ist es nun, diesen Schritt zu überprüfen und zu verstehen, was in die Datenquelle zurückgefaltet wird und was nicht gefaltet werden kann.
2. Wählen Sie den Abfrageschritt aus, um seinen Abfrageplan zu überprüfen
Sie haben den Schritt Kept bottom rows als einen Schritt von Interesse identifiziert, da er nicht auf die Datenquelle zurückgreift. Klicken Sie mit der rechten Maustaste auf den Schritt und wählen Sie die Option Abfrageplan anzeigen. Diese Aktion zeigt einen neuen Dialog an, der ein Diagramm für den Abfrageplan des ausgewählten Schritts enthält.
Power Query versucht, Ihre Abfrage zu optimieren, indem es die Vorteile von Lazy Evaluation und Query Folding nutzt, wie in Query Folding Basics erwähnt. Dieser Abfrageplan stellt die optimierte Übersetzung Ihrer M-Abfrage in die native Abfrage dar, die an die Datenquelle gesendet wird. Dazu gehören auch alle Transformationen, die von der Power Query Engine durchgeführt werden. Die Reihenfolge, in der die Knoten erscheinen, folgt der Reihenfolge Ihrer Abfrage, beginnend mit dem letzten Schritt oder Ausgang Ihrer Abfrage, der ganz links im Diagramm dargestellt wird und in diesem Fall der Knoten Table.LastN ist, der den Schritt Kept bottom rows darstellt.
Am unteren Rand des Dialogfelds befindet sich eine Leiste mit Symbolen, mit denen Sie die Ansicht des Abfrageplans vergrößern oder verkleinern können, sowie weitere Schaltflächen, mit denen Sie die Ansicht verwalten können. Für das vorherige Bild wurde die Option Fit to view aus dieser Leiste verwendet, um die Knoten besser zu erkennen.
Hinweis
Der Abfrageplan stellt den optimierten Plan dar. Wenn die Engine eine Abfrage auswertet, versucht sie, alle Operatoren in eine Datenquelle zu falten. In manchen Fällen werden die Schritte sogar intern neu geordnet, um die Faltung zu maximieren. In diesem Sinne enthalten die in diesem optimierten Abfrageplan verbleibenden Knoten/Operatoren in der Regel die „gefaltete“ Datenquellenabfrage und alle Operatoren, die nicht gefaltet werden konnten und lokal ausgewertet werden.
Identifizierung gefalteter Knoten aus anderen Knoten
Sie können die Knoten in diesem Diagramm als zwei Gruppen identifizieren:
Gefaltete Knoten: Diese Knoten können entweder Value.NativeQuery oder „Datenquellen“-Knoten wie Sql.Database sein. Diese können auch mit der Bezeichnung remote unter ihrem Funktionsnamen identifiziert werden.
Nicht gefaltete Knoten: Andere Tabellenoperatoren, wie Table.SelectRows, Table.SelectColumns und weitere Funktionen, die nicht gefaltet werden konnten. Diese können auch mit den Labels Full scan und Streaminggekennzeichnet werden.
Das folgende Bild zeigt die gefalteten Knoten innerhalb des roten Rechtecks. Die übrigen Knoten konnten nicht zur Datenquelle zurückgefaltet werden. Sie müssen den Rest der Knoten überprüfen, da das Ziel darin besteht, diese Knoten wieder in die Datenquelle zu falten.
Sie können Details anzeigen am unteren Rand einiger Knoten auswählen, um erweiterte Informationen anzuzeigen. Die Details des Knotens Value.NativeQuery zeigen zum Beispiel die native Abfrage (in SQL), die an die Datenquelle gesendet wird.
Die hier gezeigte Abfrage entspricht zwar nicht genau der Abfrage, die an die Datenquelle gesendet wird, aber sie ist eine gute Annäherung. In diesem Fall erfahren Sie genau, welche Spalten aus der Tabelle SalesOrderHeader abgefragt werden und wie die Tabelle anhand des Feldes TotalDue gefiltert wird, um nur Zeilen zu erhalten, in denen der Wert für dieses Feld größer als 1000 ist. Der Knoten daneben, Table.LastN, wird von der Power Query Engine lokal berechnet, da er nicht gefaltet werden kann.
Hinweis
Die Operatoren stimmen möglicherweise nicht genau mit den im Skript der Abfrage verwendeten Funktionen überein.
Überprüfen Sie nicht gefaltete Knoten und überlegen Sie, wie Sie Ihre Transformation falten können
Sie haben nun ermittelt, welche Knoten nicht gefaltet werden konnten und lokal ausgewertet werden. In diesem Fall gibt es nur den Knoten Table.LastN, aber in anderen Szenarien könnte es viele weitere geben.
Ziel ist es, Änderungen an Ihrer Abfrage vorzunehmen, damit der Schritt gefaltet werden kann. Einige der Änderungen, die Sie implementieren könnten, reichen von der Neuanordnung Ihrer Schritte bis hin zur Anwendung einer alternativen Logik auf Ihre Abfrage, die die Datenquelle besser berücksichtigt. Das bedeutet nicht, dass alle Abfragen und alle Operationen durch die Anwendung einiger Änderungen faltbar sind. Es ist jedoch eine gute Praxis, durch Ausprobieren festzustellen, ob Ihre Abfrage zurückgeklappt werden kann.
Da es sich bei der Datenquelle um eine SQL Server-Datenbank handelt, wäre es eine gute Alternative, die TOP und ORDER BY Klauseln in SQL zu nutzen, wenn das Ziel darin besteht, die letzten fünf Bestellungen aus der Tabelle abzurufen. Da es in SQL keine BOTTOM-Klausel gibt, kann die Table.LastN -Transformation in PowerQuery nicht in SQL übersetzt werden. Sie können die Stufe Table.LastN entfernen und durch eine andere Stufe ersetzen:
Eine absteigende Sortierung nach der Spalte SalesOrderID in der Tabelle, da diese Spalte bestimmt, welcher Auftrag zuerst kommt und welcher zuletzt eingegeben wurde.
Wählen Sie die obersten fünf Zeilen aus, da die Tabelle sortiert wurde, bewirkt diese Umwandlung das Gleiche, als wenn es sich um handelt, wobei die unteren Zeilen beibehalten werden (Table.LastN).
Diese Alternative ist gleichwertig mit der ursprünglichen Abfrage. Während diese Alternative in der Theorie gut erscheint, müssen Sie die Änderungen vornehmen, um zu sehen, ob diese Alternative diesen Knoten vollständig in die Datenquelle zurückfaltet.
3. Änderungen an Ihrer Abfrage vornehmen
Führen Sie die im vorherigen Abschnitt beschriebene Alternative ein:
Schließen Sie das Dialogfeld Abfrageplan und kehren Sie zum Power Query Editor zurück.
Entfernen Sie die Unterste Reihen Schritt.
Sortieren Sie die Spalte SalesOrderID in absteigender Reihenfolge.
Wählen Sie das Tabellensymbol in der oberen linken Ecke der Datenvorschau und wählen Sie die Option Obere Zeilen beibehalten. Geben Sie im Dialogfeld die Zahl fünf als Argument an und klicken Sie auf OK.
Überprüfen Sie nach der Implementierung der Änderungen erneut die Indikatoren für das Query Folding und stellen Sie fest, ob Sie einen Indikator für das Falten erhalten.
Nun ist es an der Zeit, den Abfrageplan des letzten Schritts zu überprüfen, der jetzt ist. Oberste Zeilen halten. Jetzt gibt es nur noch gefaltete Knoten. Wählen Sie Details anzeigen unter Value.NativeQuery, um zu überprüfen, welche Abfrage an die Datenbank gesendet wird.
In diesem Artikel wird zwar vorgeschlagen, welche Alternative anzuwenden ist, aber das Hauptziel ist, dass Sie lernen, wie Sie den Abfrageplan zur Untersuchung von Query Folding verwenden können. Dieser Artikel bietet auch einen Überblick darüber, was an Ihre Datenquelle gesendet wird und welche Transformationen lokal durchgeführt werden.
Sie können Ihren Code anpassen, um zu sehen, welche Auswirkungen dies auf Ihre Abfrage hat. Wenn Sie die Indikatoren für das Query Folding verwenden, haben Sie auch eine bessere Vorstellung davon, welche Schritte Ihre Abfrage am Falten hindern.
Erfahren Sie mehr über die Methoden und Best Practices, die den geschäftlichen und technischen Anforderungen für die Modellierung, Visualisierung und Analyse von Daten mit Microsoft Power BI entsprechen.