Share via


Beispiele für das Query Folding

Dieser Artikel enthält einige Beispielszenarien für jedes der drei möglichen Ergebnisse von Query Folding. Er enthält auch einige Vorschläge, wie Sie den Mechanismus zum Query Folding optimal nutzen können und welche Auswirkungen er auf Ihre Abfragen haben kann.

Das Szenario

Stellen Sie sich ein Szenario vor, in dem Sie unter Verwendung der Wide World Importers-Datenbank für Azure Synapse Analytics SQL-Datenbankeine Abfrage in Power Query erstellen sollen, die eine Verbindung zur Tabelle fact_Sale herstellt und die letzten 10 Verkäufe mit nur den folgenden Feldern abruft:

  • Verkauf Schlüssel
  • Kundenschlüssel
  • Rechungsdatumsschlüssel
  • Beschreibung
  • Menge

Hinweis

Zu Demonstrationszwecken wird in diesem Artikel die Datenbank verwendet, die im Tutorial zum Laden der Wide World Importers-Datenbank in Azure Synapse Analytics beschrieben ist. Der Hauptunterschied in diesem Artikel ist, dass die Tabelle fact_Sale nur Daten für das Jahr 2000 enthält, mit insgesamt 3.644.356 Zeilen.

Auch wenn die Ergebnisse nicht genau mit den Ergebnissen übereinstimmen, die Sie erhalten, wenn Sie die Anleitung aus der Azure Synapse Analytics-Dokumentation befolgen, ist es das Ziel dieses Artikels, die Kernkonzepte und die Auswirkungen, die das Query Folding auf Ihre Abfragen haben kann, zu zeigen.

Beispielausgabetabelle, die aus der fact_Sale-Tabelle der Azure Synapse Analytics-Datenbank für Wide World Importers abgeleitet ist.

In diesem Artikel werden drei Möglichkeiten aufgezeigt, wie man mit verschiedenen Stufen von Query Folding das gleiche Ergebnis erzielen kann:

  • Kein Query Folding
  • Teilweise Faltung der Abfrage
  • Vollständiges Query Folding

Kein Beispiel für das Query Folding

Wichtig

Abfragen, die sich ausschließlich auf unstrukturierte Datenquellen stützen oder nicht über eine Berechnungsmaschine verfügen, wie z. B. CSV- oder Excel-Dateien, verfügen nicht über Abfrage-Faltfunktionen. Das bedeutet, dass Power Query alle erforderlichen Datentransformationen mit Hilfe der Power Query Engine auswertet.

Nachdem Sie eine Verbindung zu Ihrer Datenbank hergestellt und zur Tabelle fact_Sale navigiert haben, wählen Sie die Transformation Keep bottom rows, die sich in der Gruppe Reduce rows der Registerkarte Home befindet.

Halten Sie die Transformation der unteren Zeilen innerhalb der Gruppe Zeilen reduzieren auf der Registerkarte Start fest.

Nach Auswahl dieser Transformation erscheint ein neuer Dialog. In diesem neuen Dialogfeld können Sie die Anzahl der Zeilen eingeben, die Sie beibehalten möchten. Geben Sie in diesem Fall den Wert 10 ein und wählen Sie dann OK.

Geben Sie den Wert 10 in das Dialogfeld Untere Zeilen beibehalten ein.

Tipp

In diesem Fall ergibt die Durchführung dieser Operation das Ergebnis der letzten zehn Verkäufe. In den meisten Szenarien empfehlen wir, dass Sie eine explizitere Logik bereitstellen, die definiert, welche Zeilen als letzte betrachtet werden, indem Sie eine Sortieroperation auf die Tabelle anwenden.

Wählen Sie dann die Transformation Spalten auswählen aus, die sich in der Gruppe Spalten verwalten der Registerkarte Home befindet. Sie können dann die Spalten auswählen, die Sie in Ihrer Tabelle behalten möchten, und den Rest entfernen.

Auswählen der Spaltentransformation für das Beispiel für Kein Query Folding.

Schließlich wählen Sie im Dialgofeld Choose columns die Spalten Sale Key, Customer Key, Invoice Date Key, Description und Quantity und wählen Sie anschließend OK.

Auswählen der Spalten Verkaufsschlüssel, Kundenschlüssel, Rechnungsdatum, Beschreibung und Menge für das Beispiel ohne Query Folding.

Das folgende Codebeispiel ist das vollständige M-Skript für die von Ihnen erstellte Abfrage:

let
  Source = Sql.Database(ServerName, DatabaseName),
  Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
  #"Kept bottom rows" = Table.LastN(Navigation, 10),
  #"Choose columns" = Table.SelectColumns(#"Kept bottom rows", {"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"})
in
  #"Choose columns""

Keine Faltung der Abfrage: Die Auswertung der Abfrage verstehen

Unter Angewandte Schritte im Power Query-Editor werden Sie feststellen, dass die Abfrage-Faltkennzeichen für Beibehaltene untere Zeilen und Spalten auswählen als Schritte markiert sind, die außerhalb der Datenquelle oder, mit anderen Worten, von der Power Query-Engine ausgewertet werden.

Bereich Angewendete Schritte für die Abfrage mit den Query Folding-Indikatoren, die die untersten Zeilen und die Schritte Entfernt enthalten.

Sie können mit der rechten Maustaste auf den letzten Schritt Ihrer Abfrage klicken, den Schritt mit der Bezeichnung Spalten auswählen, und die Option Abfrageplan anzeigenauswählen. Das Ziel des Abfrageplans ist es, Ihnen einen detaillierten Überblick über den Ablauf Ihrer Abfrage zu geben. Weitere Informationen zu dieser Funktion finden Sie unter Abfrageplan.

Abfrageplan für die erstellte Abfrage mit mehreren Nodes, von denen sich zwei in einem Rechteck befinden, das die Nodes darstellt, die vom Power Query-Modul ausgewertet werden.

Jedes Kästchen im vorherigen Bild wird als Knotenbezeichnet. Ein Knoten stellt die Aufschlüsselung des Vorgangs zur Erfüllung dieser Abfrage dar. Knoten, die Datenquellen darstellen, wie SQL Server im obigen Beispiel und der Knoten Value.NativeQuery, stellen dar, welcher Teil der Abfrage an die Datenquelle ausgelagert wird. Die übrigen Knoten, in diesem Fall Table.LastN und Table.SelectColumns, die in dem Rechteck in der vorherigen Abbildung hervorgehoben sind, werden von der Power Query Engine ausgewertet. Diese beiden Knoten stehen für die beiden Transformationen, die Sie hinzugefügt haben: Kept bottom rows und Choose columns. Die übrigen Knoten stellen Vorgänge dar, die auf der Ebene Ihrer Datenquelle stattfinden.

Um die genaue Anfrage zu sehen, die an Ihre Datenquelle gesendet wird, wählen Sie Details anzeigen im Knoten Value.NativeQuery.

SQL-Anweisung in Value.NativeQuery gefunden, die eine Anforderung aller Felder und Datensätze aus der fact_Sale-Tabelle in der Datenbank darstellt.

Diese Datenquellenanforderung ist in der Muttersprache Ihrer Datenquelle. In diesem Fall ist diese Sprache SQL, und diese Anweisung stellt eine Anfrage für alle Zeilen und Felder der Tabelle fact_Sale dar.

Die Konsultation dieser Datenquellenanforderung kann Ihnen helfen, die Aussage des Abfrageplans besser zu verstehen:

  • Sql.Database: Dieser Knoten stellt den Zugriff auf die Datenquelle dar. Stellt eine Verbindung zur Datenbank her und sendet Metadatenanfragen, um deren Fähigkeiten zu verstehen.
  • Value.NativeQuery: Stellt die Anfrage dar, die von Power Query erzeugt wurde, um die Abfrage zu erfüllen. Power Query sendet die Datenanforderungen in einer Native-SQL-Anweisung an die Datenquelle. In diesem Fall sind das alle Datensätze und Felder (Spalten) aus der Tabelle fact_Sale. Für dieses Szenario ist dieser Fall unerwünscht, da die Tabelle Millionen von Zeilen enthält und nur die letzten 10 Zeilen von Interesse sind.
  • Table.LastN: Sobald Power Query alle Datensätze aus der Tabelle fact_Sale erhalten hat, verwendet es die Power Query Engine, um die Tabelle zu filtern und nur die letzten 10 Zeilen zu behalten.
  • Table.SelectColumns: Power Query verwendet die Ausgabe des Knotens Table.LastN und wendet eine neue Transformation namens Table.SelectColumnsan, die die spezifischen Spalten auswählt, die Sie aus einer Tabelle behalten möchten.

Für ihre Auswertung musste diese Abfrage alle Zeilen und Felder aus der Tabelle fact_Sale herunterladen. Die Verarbeitung dieser Abfrage in einer Standardinstanz von Power BI Dataflows dauerte durchschnittlich 6 Minuten und 1 Sekunde (was die Auswertung und das Laden von Daten in Dataflows berücksichtigt).

Beispiel für das Falten einer Teilabfrage

Nachdem Sie eine Verbindung zur Datenbank hergestellt und zur Tabelle fact_Sale navigiert haben, wählen Sie zunächst die Spalten aus, die Sie aus Ihrer Tabelle übernehmen möchten. Wählen Sie die Transformation Spalten auswählen aus, die sich in der Gruppe Spalten verwalten auf der Registerkarte Home befindet. Diese Transformation hilft Ihnen, explizit die Spalten auszuwählen, die Sie in Ihrer Tabelle behalten wollen, und den Rest zu entfernen.

Auswählen der Spaltentransformation für das Teil-Query-Folding-Beispiel.

Wählen Sie im Dialogfeld Choose columns die Spalten Sale Key, Customer Key, Invoice Date Key, Descriptionund Quantity, dann wählen Sie OK.

Auswählen der Spalten Verkaufsschlüssel, Kundenschlüssel, Rechnungsdatum, Beschreibung und Menge für das Beispiel mit teilweisem Query Folding.

Sie erstellen nun eine Logik, mit der die Tabelle so sortiert wird, dass die letzten Verkäufe am Ende der Tabelle stehen. Wählen Sie die Spalte Sale Key, die den Primärschlüssel und die inkrementelle Reihenfolge oder den Index der Tabelle darstellt. Sortieren Sie die Tabelle nur nach diesem Feld in aufsteigender Reihenfolge über das Kontextmenü der Spalte.

Sortieren Sie das Feld Verkaufsschlüssel der Tabelle in aufsteigender Reihenfolge mithilfe des Kontextmenüs AutoFilterfeld.

Wählen Sie dann das Kontextmenü der Tabelle und wählen Sie die Transformation Keep bottom rows.

Wählen Sie die Option Untere Zeilen beibehalten im Kontextmenü der Tabelle aus.

In Keep bottom rowsgeben Sie den Wert 10 ein und wählen dann OK.

Dialogfeld Untere Zeilen beibehalten mit dem Wert 10, der als Eingabewert eingegeben wurde, um nur die unteren zehn Zeilen der Tabelle beizubehalten.

Das folgende Codebeispiel ist das vollständige M-Skript für die von Ihnen erstellte Abfrage:

let
  Source = Sql.Database(ServerName, DatabaseName),
  Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
  #"Choose columns" = Table.SelectColumns(Navigation, {"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"}),
  #"Sorted rows" = Table.Sort(#"Choose columns", {{"Sale Key", Order.Ascending}}),
  #"Kept bottom rows" = Table.LastN(#"Sorted rows", 10)
in
  #"Kept bottom rows"

Beispiel für die teilweise Faltung von Abfragen: Die Auswertung der Abfrage verstehen

Im Bereich „Angewandte Schritte“ (Applied Steps) werden Sie feststellen, dass die Query Folding-Indikatoren anzeigen, dass die letzte von Ihnen hinzugefügte Transformation Kept bottom rows als ein Schritt markiert ist, der außerhalb der Datenquelle oder, mit anderen Worten, von der Power Query Engine ausgewertet wird.

Bereich Angewendete Schritte für die Abfrage mit den Abfragefaltungsindikatoren, die zeigen, dass die untersten Zeilen als Schritt gekennzeichnet sind, der außerhalb der Datenquelle ausgewertet wird.

Sie können mit der rechten Maustaste auf den letzten Schritt Ihrer Abfrage ( Kept bottom rows) klicken und die Option Abfrageplan wählen, um besser zu verstehen, wie Ihre Abfrage ausgewertet werden könnte.

Der Abfrageplan zeigt mehrere Knoten an, auf denen der Node Table.LastN in einem Rechteck angezeigt wird, ein Nod, der vom Power Query-Modul und nicht von der Datenquelle ausgewertet wird.

Jedes Kästchen im vorherigen Bild wird als Knotenbezeichnet. Ein Knoten repräsentiert jeden Prozess, der stattfinden muss (von links nach rechts), damit Ihre Abfrage ausgewertet werden kann. Einige dieser Knoten können in Ihrer Datenquelle ausgewertet werden, während andere, wie der Knoten für Table.LastN, der durch den Schritt Kept bottom rows dargestellt wird, mit Hilfe der Power Query Engine ausgewertet werden.

Um die genaue Anfrage zu sehen, die an Ihre Datenquelle gesendet wird, wählen Sie Details anzeigen im Knoten Value.NativeQuery.

SQL-Anweisung in Value.NativeQuery, die eine Abfrage aller Datensätze darstellt, wobei nur die angeforderten Felder aus der Tabelle fact_Sales in der Datenbank in aufsteigender Reihenfolge nach dem Feld Verkaufsschlüssel sortiert sind.

Diese Anfrage ist in der Muttersprache Ihrer Datenquelle. In diesem Fall ist die Sprache SQL, und diese Anweisung stellt eine Anforderung für alle Zeilen dar, wobei nur die angeforderten Felder aus der Tabelle fact_Sale nach dem Feld Sale Key geordnet sind.

Die Konsultation dieser Datenquellenanforderung kann Ihnen helfen, die Aussage des vollständigen Abfrageplans besser zu verstehen. Die Reihenfolge der Knoten ist ein sequentieller Prozess, der mit der Abfrage der Daten aus Ihrer Datenquelle beginnt:

  • Sql.Database: Stellt eine Verbindung zur Datenbank her und sendet Metadatenanfragen, um deren Fähigkeiten zu verstehen.
  • Value.NativeQuery: Stellt die Anfrage dar, die von Power Query erzeugt wurde, um die Abfrage zu erfüllen. Power Query sendet die Datenanforderungen in einer Native-SQL-Anweisung an die Datenquelle. In diesem Fall sind das alle Datensätze, wobei nur die angeforderten Felder aus der Tabelle fact_Sale in der Datenbank in aufsteigender Reihenfolge nach dem Feld Sales Key sortiert sind.
  • Table.LastN: Sobald Power Query alle Datensätze aus der Tabelle fact_Sale erhalten hat, verwendet es die Power Query Engine, um die Tabelle zu filtern und nur die letzten 10 Zeilen zu behalten.

Für ihre Auswertung musste diese Abfrage alle Zeilen und nur die erforderlichen Felder aus der Tabelle fact_Sale herunterladen. Die Verarbeitung in einer Standardinstanz von Power BI Dataflows dauerte durchschnittlich 3 Minuten und 4 Sekunden (was die Auswertung und das Laden von Daten in Dataflows berücksichtigt).

Beispiel für das Falten einer vollständigen Abfrage

Nachdem Sie eine Verbindung zur Datenbank hergestellt und zur Tabelle fact_Sale navigiert haben, wählen Sie zunächst die Spalten aus, die Sie aus Ihrer Tabelle übernehmen möchten. Wählen Sie die Transformation Spalten auswählen aus, die sich in der Gruppe Spalten verwalten auf der Registerkarte Home befindet. Diese Transformation hilft Ihnen, explizit die Spalten auszuwählen, die Sie in Ihrer Tabelle behalten wollen, und den Rest zu entfernen.

Auswählen der Spaltentransformation für das Beispiel für Vollständiges Query Folding.

Wählen Sie unter Choose columns die Spalten Sale Key, Customer Key, Invoice Date Key, Descriptionund Quantity und wählen Sie anschließend OK.

Auswählen der Spalten Verkaufsschlüssel, Kundenschlüssel, Rechnungsdatum, Beschreibung und Menge für das Beispiel mit vollständigem Query Folding.

Sie erstellen nun eine Logik, die die Tabelle so sortiert, dass die letzten Verkäufe ganz oben in der Tabelle stehen. Wählen Sie die Spalte Sale Key, die den Primärschlüssel und die inkrementelle Reihenfolge oder den Index der Tabelle darstellt. Sortieren Sie die Tabelle nur nach diesem Feld in absteigender Reihenfolge über das Kontextmenü für die Spalte.

Sortieren Sie das Feld Verkaufsschlüssel der Tabelle in absteigender Reihenfolge über das Kontextmenü.

Wählen Sie dann das Kontextmenü der Tabelle und wählen Sie die Transformation Keep top rows.

Option Obere Zeilen beibehalten im Kontextmenü der Tabelle.

In Keep top rowsgeben Sie den Wert 10 ein und wählen dann OK.

Dialogfeld Obere Zeilen beibehalten mit dem Wert 10, der als Eingabewert eingegeben wurde, um nur die oberen zehn Zeilen der Tabelle beizubehalten.

Das folgende Codebeispiel ist das vollständige M-Skript für die von Ihnen erstellte Abfrage:

let
  Source = Sql.Database(ServerName, DatabaseName),
  Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
  #"Choose columns" = Table.SelectColumns(Navigation, {"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"}),
  #"Sorted rows" = Table.Sort(#"Choose columns", {{"Sale Key", Order.Descending}}),
  #"Kept top rows" = Table.FirstN(#"Sorted rows", 10)
in
  #"Kept top rows"

Beispiel für das Falten einer vollständigen Abfrage: Die Auswertung der Abfrage verstehen

Wenn Sie den Bereich „Angewandte Schritte“ überprüfen, werden Sie feststellen, dass die Query Folding-Indikatoren anzeigen, dass die von Ihnen hinzugefügten Transformationen Spalten auswählen, Sortierte Zeilenund Obere Zeilen behaltenals Schritte markiert sind, die in der Datenquelle ausgewertet werden.

Alle Abfrageschritte weisen das Symbol auf, das anzeigt, dass sie wieder in die Datenquelle gefaltet werden können.

Sie können mit der rechten Maustaste auf den letzten Schritt Ihrer Abfrage klicken, den Schritt mit der Bezeichnung Kept top rows, und die Option Query planauswählen.

SQL-Anweisung in Value.NativeQuery, die eine Abfrage der zehn wichtigsten Datensätze der Tabelle fact_Sale darstellt, sortiert nach dem Feld Verkaufsschlüssel und nur mit den Feldern Verkaufsschlüssel, Kundenschlüssel, Bestelldatumschlüssel, Beschreibung und Menge.

Diese Anfrage ist in der Muttersprache Ihrer Datenquelle. In diesem Fall ist diese Sprache SQL, und diese Anweisung stellt eine Anfrage für alle Zeilen und Felder der Tabelle fact_Sale dar.

Die Konsultation dieser Datenquellenabfrage kann Ihnen helfen, die Aussage des vollständigen Abfrageplans besser zu verstehen:

  • Sql.Database: Stellt eine Verbindung zur Datenbank her und sendet Metadatenanfragen, um deren Fähigkeiten zu verstehen.
  • Value.NativeQuery: Stellt die Anfrage dar, die von Power Query erzeugt wurde, um die Abfrage zu erfüllen. Power Query sendet die Datenanforderungen in einer Native-SQL-Anweisung an die Datenquelle. In diesem Fall bedeutet dies, dass nur die ersten 10 Datensätze der Tabelle fact_Sale abgefragt werden, und zwar nur die erforderlichen Felder, nachdem sie mit Hilfe des Feldes Sale Key in absteigender Reihenfolge sortiert wurden.

Hinweis

Während es in der Sprache T-SQL keine Klausel gibt, mit der man die untersten Zeilen einer Tabelle SELECT kann, gibt es eine TOP-Klausel, die die obersten Zeilen einer Tabelle abruft.

Für die Auswertung lädt diese Abfrage nur 10 Zeilen herunter, mit nur den Feldern, die Sie aus der Tabelle fact_Sale angefordert haben. Die Verarbeitung dieser Abfrage dauerte in einer Standardinstanz von Power BI Dataflows durchschnittlich 31 Sekunden (was die Auswertung und das Laden von Daten in Dataflows berücksichtigt).

Leistungsvergleich

Um besser zu verstehen, wie sich das Query Folding auf diese Abfragen auswirkt, können Sie Ihre Abfragen aktualisieren, die Zeit aufzeichnen, die für die vollständige Aktualisierung jeder Abfrage benötigt wird, und sie vergleichen. Der Einfachheit halber werden in diesem Artikel die durchschnittlichen Aktualisierungszeiten angegeben, die mit der Aktualisierungsmechanik für Power BI-Dataflows bei der Verbindung mit einer dedizierten Azure Synapse Analytics-Umgebung mit DW2000c als Serviceebene erfasst wurden.

Die Aktualisierungszeit für jede Abfrage war wie folgt:

Beispiel Label Zeit in Sekunden.
Kein Query Folding Kein 361
Teilweise Faltung der Abfrage Teilweise 184
Vollständiges Query Folding Vollständig 31

Diagramm, das die Aktualisierungszeit der Abfrage ohne Query Folding mit 361 Sekunden, die Abfrage mit teilweisem Query Folding mit 184 Sekunden und die Abfrage mit vollständigem Query Folding mit 31 Sekunden vergleicht.

Oft ist eine Abfrage, die vollständig auf die Datenquelle zurückgeführt wird, leistungsfähiger als ähnliche Abfragen, die nicht vollständig auf die Datenquelle zurückgeführt werden. Dafür kann es viele Gründe geben. Diese Gründe reichen von der Komplexität der Transformationen, die Ihre Abfrage durchführt, bis hin zu den Abfrageoptimierungen, die in Ihrer Datenquelle implementiert sind, wie z. B. Indizes und spezielle Rechen- und Netzwerkressourcen. Dennoch gibt es zwei spezifische Schlüsselprozesse, die Query Folding zu verwenden versucht, um die Auswirkungen dieser beiden Prozesse auf Power Query zu minimieren:

  • Daten während der Übertragung
  • Von der Power Query Engine ausgeführte Transformationen

In den folgenden Abschnitten wird erläutert, wie sich diese beiden Prozesse auf die oben genannten Abfragen auswirken.

Daten während der Übertragung

Wenn eine Abfrage ausgeführt wird, versucht sie als einen ihrer ersten Schritte, die Daten aus der Datenquelle zu holen. Welche Daten aus der Datenquelle geholt werden, wird durch den Mechanismus zum Query Folding festgelegt. Dieser Mechanismus identifiziert die Schritte der Abfrage, die an die Datenquelle ausgelagert werden können.

In der folgenden Tabelle ist die Anzahl der aus der Tabelle fact_Sale der Datenbank angeforderten Zeilen aufgeführt. Die Tabelle enthält auch eine kurze Beschreibung der SQL-Anweisung, mit der diese Daten von der Datenquelle angefordert werden.

Beispiel Label Angefragte Zeilen Beschreibung
Kein Query Folding Kein 3644356 Abfrage aller Felder und aller Datensätze aus der Tabelle fact_Sale
Teilweise Faltung der Abfrage Teilweise 3644356 Anforderung aller Datensätze, aber nur der erforderlichen Felder aus der Tabelle fact_Sale, nachdem sie nach dem Feld Sale Key sortiert wurde
Vollständiges Query Folding Vollständig 10 Abfrage nur der erforderlichen Felder und der TOP 10 Datensätze der Tabelle fact_Sale, nachdem sie nach dem Feld Sale Key absteigend sortiert wurden

Diagramm mit der Anzahl der aus der Datenbank gesammelten Zeilen für Abfragen ohne Query Folding, teilweisem Query Folding und vollständigem Query Folding.

Wenn Daten von einer Datenquelle angefordert werden, muss die Datenquelle die Ergebnisse für die Anforderung berechnen und dann die Daten an den Anforderer senden. Während die Computerressourcen bereits erwähnt wurden, können die Netzwerkressourcen für das Verschieben der Daten von der Datenquelle zu Power Query und die anschließende Fähigkeit von Power Query, die Daten effektiv zu empfangen und für die lokal stattfindenden Transformationen vorzubereiten, je nach Größe der Daten einige Zeit in Anspruch nehmen.

Für die gezeigten Beispiele musste Power Query über 3,6 Millionen Zeilen aus der Datenquelle abfragen, und zwar für die Beispiele ohne Query Folding und für das partielle Query Folding. Für das Beispiel der vollständigen Abfrage wurden nur 10 Zeilen angefordert. Für die abgefragten Felder hat das Beispiel ohne Abfrage alle verfügbaren Felder der Tabelle abgefragt. Sowohl bei der teilweisen als auch bei der vollständigen Abfrage werden nur die benötigten Felder abgefragt.

Achtung

Wir empfehlen, dass Sie für Abfragen oder Tabellen mit großen Datenmengen inkrementelle Aktualisierungslösungen implementieren, die das Query Folding nutzen. Verschiedene Produktintegrationen von Power Query implementieren Timeouts, um lang laufende Abfragen zu beenden. Einige Datenquellen setzen auch Timeouts für lange laufende Sitzungen ein, wenn sie versuchen, teure Abfragen auf ihren Servern auszuführen. Weitere Informationen: Verwendung der inkrementellen Aktualisierung mit Dataflows und Inkrementelle Aktualisierung für semantische Modelle

Von der Power Query Engine ausgeführte Transformationen

In diesem Artikel wurde gezeigt, wie Sie den Abfrageplan verwenden können, um besser zu verstehen, wie Ihre Abfrage ausgewertet werden könnte. Im Abfrageplan können Sie die genauen Knoten der Transformationsoperationen sehen, die von der Power Query Engine ausgeführt werden.

Die folgende Tabelle zeigt die Knoten aus den Abfrageplänen der vorherigen Abfragen, die von der Power Query Engine ausgewertet worden wären.

Beispiel Label Power Query Engine Transformationsknoten
Kein Query Folding Kein Table.LastN, Table.SelectColumns
Teilweise Faltung der Abfrage Teilweise Table.LastN
Vollständiges Query Folding Vollständig

Diagramm mit der Gesamtzahl der von der Power Query-Engine durchgeführten Transformationen für Abfragen ohne Query Folding, teilweisem Query Folding und vollständigem Query Folding.

Bei den in diesem Artikel vorgestellten Beispielen erfordert das vollständige Abfrage-Faltbeispiel keine Transformationen innerhalb der Power Query-Engine, da die erforderliche Ausgabetabelle direkt aus der Datenquelle stammt. Im Gegensatz dazu mussten bei den beiden anderen Abfragen einige Berechnungen in der Power Query Engine durchgeführt werden. Aufgrund der Datenmenge, die von diesen beiden Abfragen verarbeitet werden muss, nimmt der Prozess für diese Beispiele mehr Zeit in Anspruch als das Beispiel für das Falten der vollständigen Abfrage.

Transformationen können in die folgenden Kategorien eingeteilt werden:

Typ des Betreibers Beschreibung
Remote Operatoren, die Datenquellenknoten sind. Die Auswertung dieser Operatoren erfolgt außerhalb von Power Query.
Streaming Die Marktteilnehmer sind Durchlauferhitzer. Zum Beispiel kann Table.SelectRows mit einem einfachen Filter die Ergebnisse filtern, während sie den Operator durchlaufen, und muss nicht alle Zeilen erfassen, bevor die Daten verschoben werden. Table.SelectColumns und Table.ReorderColumns sind weitere Beispiele für diese Art von Operatoren.
Vollständiger Scan Operatoren, die alle Zeilen erfassen müssen, bevor die Daten an den nächsten Operator in der Kette weitergegeben werden können. Um beispielsweise Daten zu sortieren, muss Power Query alle Daten erfassen. Weitere Beispiele für Full-Scan-Operatoren sind Table.Group, Table.NestedJoin und Table.Pivot.

Tipp

Zwar ist nicht jede Transformation gleich leistungsfähig, aber in den meisten Fällen ist es besser, weniger Transformationen zu haben.

Überlegungen und Vorschläge

  • Befolgen Sie bei der Erstellung einer neuen Abfrage die bewährten Verfahren, die unter Best Practices in Power Queryaufgeführt sind.
  • Verwenden Sie die Abfrage-Faltindikatoren, um zu überprüfen, welche Schritte Ihre Abfrage am Falten hindern. Ordnen Sie sie gegebenenfalls neu an, um die Faltung zu erhöhen.
  • Verwenden Sie den Abfrageplan, um festzustellen, welche Transformationen in der Power Query Engine für einen bestimmten Schritt durchgeführt werden. Erwägen Sie, Ihre bestehende Abfrage zu ändern, indem Sie die Schritte neu anordnen. Prüfen Sie dann den Abfrageplan des letzten Schritts Ihrer Abfrage erneut und sehen Sie, ob der Abfrageplan besser aussieht als der vorherige. Der neue Abfrageplan hat zum Beispiel weniger Knoten als der vorherige, und die meisten Knoten sind „Streaming“-Knoten und keine „Full Scan“-Knoten. Bei Datenquellen, die Folding unterstützen, stellen alle Knoten im Abfrageplan außer Value.NativeQuery und Datenquellen-Zugriffsknoten Transformationen dar, die nicht gefaltet wurden.
  • Wenn verfügbar, können Sie die Option View Native Query (oder View data source query) verwenden, um sicherzustellen, dass Ihre Abfrage in die Datenquelle zurückverwandelt werden kann. Wenn diese Option für Ihren Schritt deaktiviert ist und Sie eine Quelle verwenden, in der sie normalerweise aktiviert ist, haben Sie einen Schritt erstellt, der das Query Folding verhindert. Wenn Sie eine Quelle verwenden, die diese Option nicht unterstützt, können Sie sich auf die Abfrage-Faltindikatoren und den Abfrageplan verlassen.
  • Verwenden Sie die Abfragediagnosetools, um die an Ihre Datenquelle gesendeten Anfragen besser zu verstehen, wenn für den Connector Abfrage-Faltfunktionen verfügbar sind.
  • Bei der Kombination von Daten, die aus der Verwendung mehrerer Connectors stammen, versucht Power Query, so viel Arbeit wie möglich auf beide Datenquellen zu verteilen und dabei die für jede Datenquelle definierten Datenschutzstufen einzuhalten.
  • Lesen Sie den Artikel privacy levels, um Ihre Abfragen vor einem Fehler der Data Privacy Firewall zu schützen.
  • Verwenden Sie andere Tools, um die Faltung der Abfrage aus der Perspektive der von der Datenquelle empfangenen Anfrage zu überprüfen. Anhand des Beispiels in diesem Artikel können Sie den Microsoft SQL Server Profiler verwenden, um die von Power Query gesendeten und vom Microsoft SQL Server empfangenen Anfragen zu überprüfen.
  • Wenn Sie einen neuen Schritt zu einer vollständig gefalteten Abfrage hinzufügen und der neue Schritt ebenfalls gefaltet wird, sendet Power Query möglicherweise eine neue Anfrage an die Datenquelle, anstatt eine zwischengespeicherte Version des vorherigen Ergebnisses zu verwenden. In der Praxis kann dieser Prozess dazu führen, dass scheinbar einfache Operationen an einer kleinen Datenmenge in der Vorschau länger dauern als erwartet. Diese längere Aktualisierungszeit ist darauf zurückzuführen, dass Power Query die Datenquelle neu abfragt, anstatt mit einer lokalen Kopie der Daten zu arbeiten.