Optimieren von Power Query beim Erweitern von Tabellenspalten

Die Einfachheit und Benutzerfreundlichkeit, die es Power BI-Benutzern ermöglicht, schnell Daten zu sammeln und interessante und aussagekräftige Berichte zu erstellen, um intelligente Geschäftsentscheidungen zu treffen, ermöglicht es den Benutzern auch, leicht schlecht funktionierende Abfragen zu erstellen. Dies ist häufig der Fall, wenn es zwei Tabellen gibt, die durch einen Fremdschlüssel mit SQL-Tabellen oder SharePoint-Listen verbunden sind. (Dieses Problem ist übrigens nicht spezifisch für SQL oder SharePoint, sondern tritt in vielen Backend-Datenextraktionsszenarien auf, insbesondere wenn das Schema fließend und anpassbar ist) Es spricht auch nichts dagegen, Daten in separaten Tabellen zu speichern, die einen gemeinsamen Schlüssel haben - dies ist sogar ein Grundprinzip des Datenbankdesigns und der Normalisierung. Aber es gibt eine bessere Möglichkeit, die Beziehung zu erweitern.

Betrachten Sie das folgende Beispiel einer SharePoint-Kundenliste.

Primäre SharePoint-Kundenliste.

Und die folgende Ortsliste, auf die sie sich bezieht.

Sekundäre SharePoint-Kundenliste.

Bei der ersten Verbindung mit der Liste wird der Ort als Eintrag angezeigt.

Primäre Speicherort-Datensätze.

Diese Top-Level-Daten werden durch einen einzigen HTTP-Aufruf an die SharePoint-API (ohne den Metadaten-Aufruf) erfasst, den Sie in jedem Web-Debugger sehen können.

Einzelner HTTP-Aufruf im Webdebugger.

Wenn Sie den Datensatz erweitern, sehen Sie die aus der Sekundärtabelle verbundenen Felder.

Felder, die aus der sekundären Tabelle verknüpft sind.

Wenn Sie zusammenhängende Zeilen aus einer Tabelle in eine andere erweitern, generiert Power BI standardmäßig einen Aufruf von Table.ExpandTableColumn. Sie können dies in dem generierten Formelfeld sehen. Leider erzeugt diese Methode für jede Zeile der ersten Tabelle einen eigenen Aufruf der zweiten Tabelle.

Einzelne Aufrufe an die zweite Tabelle.

Dadurch erhöht sich die Anzahl der HTTP-Aufrufe um einen für jede Zeile in der Primärliste. Im obigen Beispiel mit fünf oder sechs Zeilen mag dies nicht viel erscheinen, aber in Produktionssystemen, in denen SharePoint-Listen Hunderttausende von Zeilen umfassen, kann dies zu einer erheblichen Beeinträchtigung der Benutzerfreundlichkeit führen.

Wenn Abfragen diesen Engpass erreichen, besteht die beste Abhilfe darin, das Call-per-Row-Verhalten zu vermeiden, indem eine klassische Tabellenverknüpfung verwendet wird. Dadurch wird sichergestellt, dass es nur einen Aufruf zum Abrufen der zweiten Tabelle gibt und der Rest der Expansion im Speicher unter Verwendung des gemeinsamen Schlüssels zwischen den beiden Tabellen erfolgen kann. Der Leistungsunterschied kann in manchen Fällen enorm sein.

Beginnen Sie mit der Originaltabelle, notieren Sie sich die Spalte, die Sie erweitern möchten, und stellen Sie sicher, dass Sie die ID des Elements haben, damit Sie es zuordnen können. Normalerweise wird der Fremdschlüssel ähnlich wie der Anzeigename der Spalte benannt, wobei Id angehängt wird. In diesem Beispiel ist es LocationId.

Name des Fremdschlüssels.

Zweitens laden Sie die sekundäre Tabelle, wobei Sie darauf achten, dass Sie die Ideinbeziehen, die der Fremdschlüssel ist. Klicken Sie mit der rechten Maustaste auf den Bereich Abfragen, um eine neue Abfrage zu erstellen.

Laden der sekundären Tabelle mit dem Fremdschlüssel ID.

Verknüpfen Sie schließlich die beiden Tabellen unter Verwendung der entsprechenden Spaltennamen, die übereinstimmen. Sie können dieses Feld in der Regel finden, indem Sie zunächst die Spalte erweitern und dann in der Vorschau nach den passenden Spalten suchen.

Zugeordnete Spalten in der Vorschau.

In diesem Beispiel können Sie sehen, dass LocationId in der Primärliste mit Id in der Sekundärliste übereinstimmt. Die Benutzeroberfläche benennt diese in Location.Id um, um den Spaltennamen eindeutig zu machen. Verwenden wir nun diese Informationen, um die Tabellen zusammenzuführen.

Wenn Sie mit der rechten Maustaste auf den Abfragebereich klicken und Neue Abfrage>Kombinieren>Abfragen als neuezusammenführen wählen, sehen Sie eine freundliche Benutzeroberfläche, die Ihnen hilft, diese beiden Abfragen zu kombinieren.

Verwenden Sie Zusammenführungsabfragen wie neu, um die Abfragen zu kombinieren.

Wählen Sie jede Tabelle aus der Dropdown-Liste aus, um eine Vorschau der Abfrage anzuzeigen.

Vorschau zusammengeführter Abfragen.

Nachdem Sie beide Tabellen ausgewählt haben, wählen Sie die Spalte aus, die die Tabellen logisch miteinander verbindet (in diesem Beispiel ist es LocationId aus der primären Tabelle und Id aus der sekundären Tabelle). Das Dialogfeld zeigt Ihnen an, wie viele der Zeilen mit diesem Fremdschlüssel übereinstimmen. Für diese Art von Daten werden Sie wahrscheinlich die Standard-Join-Art (left outer) verwenden wollen.

Linke äußere Join-Variante zusammenführen.

Wählen Sie OK und Sie sehen eine neue Abfrage, die das Ergebnis der Verknüpfung ist. Das Erweitern des Datensatzes bedeutet jetzt keine zusätzlichen Aufrufe an das Backend.

Linkes äußeres Join-Ergebnis.

Die Aktualisierung dieser Daten führt zu nur zwei Aufrufen an SharePoint - einem für die Primärliste und einem für die Sekundärliste. Die Verknüpfung wird im Arbeitsspeicher durchgeführt, wodurch die Anzahl der Aufrufe an SharePoint erheblich reduziert wird.

Dieser Ansatz kann für zwei beliebige Tabellen in PowerQuery verwendet werden, die einen passenden Fremdschlüssel haben.

Hinweis

SharePoint-Benutzerlisten und -Taxonomien sind ebenfalls als Tabellen zugänglich und können auf genau die oben beschriebene Weise verbunden werden, vorausgesetzt, der Benutzer verfügt über die entsprechenden Berechtigungen für den Zugriff auf diese Listen.