Reporting der SharePoint Versionshistorie in Power BI
Einleitung
Die Microsoft Power BI-Plattform bietet IT-Experten und Key Usern aus Fachabteilungen die Möglichkeit, innerhalb kürzester Zeit aussagekräftige Berichte und Dashboards zur Datenvisualisierung zu Erstellen. Einer der großen Vorteile der Plattform ist der immense Umfang der verfügbaren Konnektoren, womit sich eine Vielzahl an Systemen anbinden und die Daten abrufen lassen. Im Vordergrund stehen hierbei weitere Microsoft-Dienste, wie unter anderem SharePoint Online. Zum Beispiel können Daten aus einer SharePoint-Liste abgerufen, diese in Power BI mittels Diagrammen visualisiert und den Anwendern für Auswertungszwecke bereitgestellt werden.
Problemstellung / Herausforderung
Die Konfiguration dieser Konnektoren ist weitestgehend sehr intuitiv umzusetzen. So werden für den Abruf der Daten aus einer SharePoint-Liste lediglich die URL und die Anmeldedaten benötigt. Anders gestaltet sich dies, wenn bei der Umsetzung einer Anforderung nicht die aktuell vorhandenen Daten der SharePoint-Liste relevant sind, sondern historische Daten. Ein praxisnahes Beispiel wäre die Auswertung von Statuswechseln in einer Aufgabenliste, wo über die jeweiligen Zeitstempel die Dauer zwischen zwei Statuswechseln berechnet werden kann.
Für solche Anforderungen ist der Standard-Konnektor für SharePoint Online nicht ausreichend. Stattdessen muss der Datenabruf dynamisch über die SharePoint-Rest-API und mittels einer Custom Function umgesetzt werden.
Ziele des Artikels
In diesem Artikel möchten wir erfahrenen Power BI-Usern ein Beispiel vorstellen, welches Daten aus dem SharePoint-Versionsverlauf abruft und in einem Bericht visualisiert. Voraussetzung ist hierfür eine vorhandene SharePoint-Online Liste mit aktivierter Versionshistorie. Das beschriebene Vorgehen kann auch für Dokumentenbibliotheken genutzt werden, um zum Beispiel ein Reporting über die Genehmigung von Dokumenten zu erstellen. In diesem Fall werden wir eine Liste von Produkten verwenden und möchten analysieren, um welche Uhrzeit Änderungen an den Daten vorgenommen wurden. Da in den Listenspalten nur das Erstelldatum und das Datum der letzten Änderung angezeigt wird, müssen wir zur Umsetzung der Anforderung auf die Versionshistorie zugreifen.
Abbildung 1 Beispiel SharePoint-Online Liste Produkte
Abruf der Daten aus einer SharePoint-Liste
Bevor wird auf die Daten der Versionshistorie zugreifen, werden wir eine standardmäßige Datenverbindung zur SharePoint-Liste einrichten. Hierzu ist unter „Daten abrufen“ der Konnektor „SharePoint Online-Liste“ auszuwählen, die Anmeldedaten einzutragen (Hinweis: Verwendung eines Users mit mindestens Lese-Rechten auf die Liste) und die gewünschte Liste auf der Website auszuwählen. Anschließend stehen die Daten nach einer nach der Bestätigung via „Laden“ im Datenmodell zur Verfügung.
Abbildung 2 Laden der aktuellen Daten aus der SharePoint Liste
Auf dieser Datenbasis aufbauend kann bereits eine erste Version des Berichtes erstellt werden. Im unteren Beispiel werden die Produkte als Tabelle angezeigt. Links daneben befindet sich ein Kreisdiagramm, welches die Verteilung nach Produktlinie anzeigt. In dieser Version 1 werden nur die aktuellen Daten angezeigt. Historische Daten, z.B. ob ein Produkt in eine andere Produktlinie aufgenommen wurde, sind über diesen Berichten nicht einsehbar abrufbar.
Abbildung 3 Produktreport Version 1
Abruf der Versionshistorie
Das Ziel beim Abrufen der Versionshistorie ist es eine Tabelle zu erhalten, in der je Listenelement und je erstellter Version ein Datensatz enthalten ist. Die Tabelle muss also die folgende Struktur haben, in der je Attribut des Listenelement der aktuell Wert angegeben ist.
ID Listenelement | ID Version | Zeitstempel Version | Attribut A | Attribut B | … |
… | … | … | … | … | … |
Wir verwenden die bereits eingerichtete Abfrage als Grundlage und legen von dieser Abfrage eine Kopie an. Da wir für die Versionshistorie erstmal nur die IDs der Listenelemente benötigen, werden zur besseren Übersichtlichkeit alle anderen Spalten entfernt. Ergebnis ist eine Tabelle mit einem Eintrag je Listenelement.
Abbildung 4 Kopie der vorhandenen Datenabfrage und ausblenden der Spalten
Als nächstes brauchen wir eine Custom Function, die den Namen der Liste und die ID als Eingabeparameter erhält. Aus diesen wird der Rest-API-Call zusammengesetzt und alle Versionen abgerufen. In unserem Beispiel sieht der zusammengesetzte API-Aufruf für das erste Elemente der Liste wie folgt aus.
Hinweis: Der Listenname solle am besten aus der URL übernommen werden.
let Source = (VersionsRelevantSharePointListName as text, VersionsRelevantItemID as number) => let Source = Xml.Tables(Web.Contents( "https://m365x983356.sharepoint.com/sites/SalesAndMarketing/_api/web/Lists/", [RelativePath = Text.Combine( {"getbytitle('", Text.From(VersionsRelevantSharePointListName), "')/", "items(", Text.From(VersionsRelevantItemID), ")/versions"})])), entry = Source{0}[entry], #"Removed Other Columns2" = Table.SelectColumns(entry,{"content"}), #"Expanded content" = Table.ExpandTableColumn(#"Removed Other Columns2", "content", {"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"}, {"content"}), #"Expanded content1" = Table.ExpandTableColumn(#"Expanded content", "content", {"properties"}, {"properties"}), #"Expanded properties" = Table.ExpandTableColumn(#"Expanded content1", "properties", {"http://schemas.microsoft.com/ado/2007/08/dataservices"}, {"properties"}) in #"Expanded properties" in Source
Abbildung 5 Power BI Custom Function
Die Custom Function kann anschließend getestet werden, indem manuell zwei Werte für die beiden Parameter angegeben werden. Die SharePoint-API gibt die Versionshistorie als XML-Dokument zurück und Power BI stellt die Inhalte in einer eigenen Abfrage da. Über die Erweiterung der gewünschten Spalten können die Attribute der Listenelemente angezeigt werden.
Abbildung 6 Aufruf der Custom Function für ein Listenelement
Um nicht nur die Versionshistorie für ein manuell angegebenes Element zu erhalten, sondern für alle Elemente der Liste, muss die Custom Function und die Liste nur mit den IDs verknüpft werden. Hierzu ist das zuvor erstellte Duplikat der Abfrage zu öffnen und im Ribbon Menü über „Benutzerdefinierte Function aufrufen“ verbunden werden. Bei der Konfiguration des Funktionsaufrufs sind die Werte für die Parameter mit anzugeben
Abbildung 7 Aufrufen der Custom Function aus der Liste
Abschließend müssen analog dem Aufruf mit einer Listenelement ID die Spalten erweitert werden, sodass die Versions-ID, der Zeitstempel zur Erstellung der Version und die benötigten Attribute angezeigt werden.
Abbildung 8 Fertiger Datenabruf SharePoint-Historie
Mit Speichern des Power Query-Editors werden die Daten in das Modell geladen werden und können zur Visualisierung genutzt werden. Beispielhaft wird auf der Berichtsseite in einem Balkendiagramm der zeitliche Verlauf dargestellt, wann jeweils eine neue Version des Listenelement erstellt wurde. Je nach Anforderungen können auch alle weiteren Daten aus der Versionshistorie genutzt werden.
Abbildung 9 Verlauf Erstellzeitpunkt der Versionen mit Filter nach Produktlinie
Fazit und Zusammenfassung
Die Analyse von aktuellen SharePoint-Daten in Power Bi sollte auch für Anfänger keine größeren Probleme darstellen, da die Konfiguration des Konnektors sehr intuitiv ist. Um jedoch Daten aus der Versionshistorie zu visualisieren und analysieren, müssen jedoch komplexere Funktion des Power Query-Editors genutzt werden, u.a. die SharePoint Rest-API und eine Custom Function zum dynamischen Aufruf. Ist die Einrichtung erstmal erfolgt und die Daten sind im Datenmodell vorhanden, können diese zur Erfüllung von unterschiedlichen Anforderungen genutzt werden.
Haben Sie konkrete Anforderungen an die Datenanalyse in Power BI? Oder benötigen Unterstützung bei der Zielgerichteten Datenaufbereitung, um Ihren Business Anwender die gewünschten Insights zu bieten? Unsere Experten hören sich gerne Ihre individuellen Anforderungen an und analysieren gemeinsam, auf welchem Weg sich die Daten am besten abrufen, aufbereiten und visualisieren lassen.