Integrieren Sie KPI-Definitionen in Power BI

Inhalt

Warum sollten Sie KPI-Definitionen in Ihre Berichte aufnehmen?

Beim Reporting besteht das ultimative Ziel darin, Erkenntnisse für Ihr Publikum umsetzbar und aussagekräftig zu machen.

Beim Erstellen aussagekräftiger Berichte müssen mehrere Aspekte berücksichtigt werden: die Auswahl der richtigen Visualisierungen, die sorgfältige Auswahl der Farben und die Strukturierung des Berichts auf eine Weise, die leicht verständlich ist. Einer der kritischsten Aspekte, der häufig übersehen wird, ist jedoch sicherzustellen, dass die Benutzer die im Bericht dargestellten Metriken und KPIs vollständig verstehen.

Im Laufe der Jahre bin ich auf verschiedene Ansätze gestoßen, um dies zu erreichen, darunter:

  • Hinzufügen von Erklärungen in Textfeldern im Bericht
  • Erstellen einer zusätzlichen Seite mit ausführlichen Anleitungen und Kontext
  • Den neuen DAX nutzen .Info Funktionen zur dynamischen Dokumentation von Maßnahmen, bei denen sogar die Formeln dahinter angezeigt werden (vorausgesetzt, die Benutzer finden diese natürlich verständlich 😉)

Diese Methoden haben zwar ihre Vorzüge, ich habe jedoch festgestellt, dass ein Ansatz besonders robust und skalierbar ist: Integrieren Sie KPI-Definitionen als gemeinsame Datenquelle und verwenden Sie benutzerdefinierte Tooltips, um sie in Ihren Berichten anzuzeigen.

Lassen Sie uns untersuchen, wie dies effektiv umgesetzt werden kann.

Zentralisierte und wiederverwendbare KPI-Definitionen

Der erste Schritt bei der Erstellung aussagekräftiger Berichte besteht darin, sicherzustellen, dass Ihre KPI-Definitionen zentralisiert und für alle in der Organisation zugänglich sind. Dies ist eine grundlegende Vorgehensweise zur Förderung einer starken Datenkultur. Durch die Zentralisierung der KPI-Definitionen ermöglichen Sie allen Beteiligten die Verwendung einer einheitlichen Terminologie und ein abgestimmtes Verständnis bei der Diskussion von Daten und Erkenntnissen.

Ein PDF- oder Word-Dokument mit strenger Revisionskontrolle könnte diesen Zweck erfüllen, ein effizienterer Ansatz besteht jedoch darin, Ihre Definitionen in Tools wie SharePoint-Listen, Confluence-Seiten oder sogar Excel-Tabellen zu dokumentieren (obwohl Excel nur ein Fallback sein sollte, wenn keine besseren Optionen verfügbar sind). Für unsere Anforderungen ist eine tabellarische Quelle für KPI-Definitionen, die mit Power BI verbunden werden kann, unerlässlich.

Sobald eine Verbindung mit Power BI oder Fabric hergestellt ist, können diese Definitionen in ein freigegebenes semantisches Modell eingebunden oder als Teil eines Datamarts, Data Warehouses oder Lakehouses integriert werden. In diesem Beispiel konzentrieren wir uns auf die Erstellung eines freigegebenen semantischen Modells, da dieses leichtgewichtig ist und sich problemlos mit anderen Berichtserstellern in Ihrer Organisation teilen lässt.

Um die Sache interessanter zu machen, nehmen wir an, Ihre KPI-Dokumentation befindet sich in Confluence anstelle von SharePoint oder Excel. So integrieren Sie Confluence-Tabellen in Power BI.

Confluence-Tabellen mit Power BI verbinden

Um eine Verbindung zu Confluence-Tabellen herzustellen, müssen Sie die Confluence-API verwenden. Stellen Sie vor dem Fortfahren sicher, dass Sie über ein API-Token für Ihr Konto verfügen. Anweisungen zum Erstellen eines API-Tokens finden Sie in der Dokumentation: Verwalten Sie API-Token für Ihr Atlassian-Konto | Atlassian-Support

Mit Power Query können Sie eine Verbindung zu einer bestimmten Confluence-Seite herstellen, indem Sie deren Seiten-ID und den entsprechenden API-Endpunkt verwenden. Ausführliche Informationen finden Sie im Confluence Cloud REST API Dokumentation.

Schritt 1: Identifizieren Sie die Seiten-ID Ihrer Confluence-Seite

  1. Navigieren Sie zur gewünschten Confluence-Seite.
  2. Klicken Sie oben rechts auf das Drei-Punkte-Menü.
  3. Wählen Erweiterte Details -> Seiteninformationen
  4. Suchen Sie die Seiten-ID in der URL

Schritt 2: Power BI mit der Confluence-Seite verbinden

Um Daten von einer Confluence-Seite abzurufen, müssen Sie einen API-Aufruf erstellen, der auf Ihre spezifische Atlassian-Domäne und Seiten-ID zugeschnitten ist. Wenn Ihre Seiten-ID beispielsweise lautet: 20119554, könnte Ihr API-Aufruf folgendermaßen aussehen:

				
					https://YourDomain.atlassian.net/wiki/api/v2/pages/20119554?body-format=storage
				
			

Öffnen Sie Power BI Desktop und starten Sie PowerQuery

  • Verwenden Sie die Web-Connector in PowerQuery, um die Verbindung zu initiieren

Einrichten des API-Aufrufs

  • Geben Sie den zuvor erstellten cURL-Aufruf ein
  • Ersetzen IhreDomain mit Ihrer tatsächlichen Atlassian-Domäne und stellen Sie sicher, dass die Seiten-ID mit der gewünschten Confluence-Seite übereinstimmt.

Authentifizieren der Verbindung

  • Wählen Grundlegende Authentifizierung in PowerQuery
  • Verwenden Sie Ihre Atlassian-E-Mail als Benutzernamen
  • Geben Sie als Passwort den zuvor generierten API-Token ein.

Navigieren Sie zum Body Record

Sobald die Verbindung hergestellt ist, navigieren Sie zum Körper Datensatz in der Datenstruktur und isolieren Sie seine Wert. Dadurch erhalten Sie den Roh-HTML-Inhalt der Confluence-Seite.

Vereinfachen Sie die Datenextraktion

Da der reine HTML-Inhalt möglicherweise nicht direkt für die Analyse nützlich ist, habe ich eine benutzerdefinierte Funktion erstellt, die den Wert Spalte, um die relevanten Daten für die weitere Verwendung zu extrahieren und zu bereinigen.

Schritt 3: Verwenden Sie eine Funktion, um Tabellen aus HTML zu extrahieren

Um den Roh-HTML-Inhalt Ihrer Confluence-Seite zu verarbeiten und Tabellendaten zu extrahieren, müssen Sie eine benutzerdefinierte Funktion erstellen.

				
					(TableHTML als Text) als Tabelle =&gt; let // Schritt 1: Teilen Sie den HTML-Inhalt auf, um jeden zu isolieren <table> tag ExtractTables = Text.Split(TableHTML, &quot;<table"),

    // Step 2: Remove content before the first <table> tag RemoveNonTables = List.RemoveFirstN(ExtractTables, 1), // Schritt 3: Rekonstruieren Sie jede Tabelle mit <table> und </table> Tags AddTableTags = List.Transform(RemoveNonTables, jeweils &quot;<table" & Text.BeforeDelimiter(_, "</table>") & "</table>&quot;), // Schritt 4: Extrahieren Sie LocalID und <tbody> Inhalt CreateColumns = List.Transform(AddTableTags, jeweils [ LocalID = versuche Text.Replace(Text.BeforeDelimiter(_, &quot;<tbody>&quot;), &quot;&quot;&quot;&quot;, &quot;&#039;&quot;) andernfalls null, TBodyContent = Versuchen Sie Text.BetweenDelimiters(_, &quot;<tbody>", "</tbody>&quot;) sonst null ]), // Schritt 5: Erstellen Sie eine Tabelle aus den extrahierten Daten CreateOutputTable = Table.FromList(CreateColumns, Splitter.SplitByNothing(), {&quot;SplitData&quot;}), // Schritt 6: Erweitern Sie die extrahierten Spalten in separate Spalten ExpandColumns = Table.ExpandRecordColumn(CreateOutputTable, &quot;SplitData&quot;, {&quot;LocalID&quot;, &quot;TBodyContent&quot;}), // Schritt 7: Transformieren Sie die Spalte LocalID, um LastInQuotes zu extrahieren ExtractLastInQuotes = Table.TransformColumns( ExpandColumns, {{&quot;LocalID&quot;, each Text.BetweenDelimiters(_, &quot;ac:local-id=&#039;&quot;, &quot;&#039;&quot;), type text}} ), // Schritt 8: Analysieren Sie TBodyContent, um die Kopfzeile einzuschließen. Passen Sie bei Bedarf die Anzahl der Spalten an! ParseHtmlTable = Table.AddColumn( ExtractLastInQuotes, &quot;ParsedTable&quot;, jeder Versuch Html.Table( &quot;<table><thead>&quot; &amp; Text.BetweenDelimiters([TBodyContent], &quot;<thead>", "</thead>") & "</thead><tbody>&quot; &amp; [TBodyContent] &amp; &quot;</tbody></table>&quot;, { {&quot;Spalte1&quot;, &quot;tr &gt; th:nth-Kind(1), tr &gt; td:nth-Kind(1)&quot;}, {&quot;Spalte2&quot;, &quot;tr &gt; th:nth-Kind(2), tr &gt; td:nth-Kind(2)&quot;}, {&quot;Spalte3&quot;, &quot;tr &gt; th:nth-Kind(3), tr &gt; td:nth-Kind(3)&quot;}, {&quot;Spalte4&quot;, &quot;tr &gt; th:nth-Kind(4), tr &gt; td:nth-Kind(4)&quot;}, {&quot;Spalte5&quot;, &quot;tr &gt; th:nth-Kind(5), tr &gt; td:nth-Kind(5)&quot;}, {&quot;Spalte6&quot;, &quot;tr &gt; th:nth-Kind(6), tr &gt; td:nth-Kind(6)&quot;}, {&quot;Spalte7&quot;, &quot;tr &gt; th:nth-Kind(7), tr &gt; td:nth-child(7)&quot;}, {&quot;Column8&quot;, &quot;tr &gt; th:nth-child(8), tr &gt; td:nth-child(8)&quot;}, {&quot;Column9&quot;, &quot;tr &gt; th:nth-child(9), tr &gt; td:nth-child(9)&quot;}, {&quot;Column10&quot;, &quot;tr &gt; th:nth-child(10), tr &gt; td:nth-child(10)&quot;} }, [RowSelector = &quot;tr&quot;] ) andernfalls null, Typ Tabelle ), // Schritt 9: Die erste Zeile von ParsedTable zur Kopfzeile hochstufen PromoteHeaders = Table.TransformColumns( ParseHtmlTable, {{&quot;ParsedTable&quot;, each if _ <> null dann Table.PromoteHeaders(_, [PromoteAllScalars=true]) sonst null, Typ table}} ), // Schritt 10: Entfernen Sie die Spalte TBodyContent RemoveTBodyContent = Table.RemoveColumns(PromoteHeaders, {&quot;TBodyContent&quot;}) in RemoveTBodyContent
				
			

Schritt 4: Rufen Sie die Funktion zum Extrahieren der Tabellen auf

Ich kann die Funktion dann verwenden, um sie in der HTML-Inhaltsspalte aufzurufen. Die vollständige Abfrage an die Tabellen innerhalb einer Confluence-Seite lautet also wie folgt

				
					let Source = Json.Document(Web.Contents("https://YourDomain.atlassian.net/wiki/api/v2/pages/20119554?body-format=storage")), #"In Tabelle konvertiert" = Record.ToTable(Source), #"Gefilterte Zeilen" = Table.SelectRows(#"In Tabelle konvertiert", each ([Name] = "body")), #"Erweiterter Wert" = Table.ExpandRecordColumn(#"Gefilterte Zeilen", "Wert", {"storage"}, {"Value.storage"}), #"Wertspeicher" = #"Erweiterter Wert"{0}[Value.storage], #"In Tabelle1 konvertiert" = Record.ToTable(#"Wertspeicher"), #"Gefilterte Zeilen1" = Table.SelectRows(#"In Tabelle1 konvertiert", each ([Name] = "value")), #"Aufgerufene benutzerdefinierte Funktion" = Table.AddColumn(#"Gefilterte Zeilen1", "GetConfluenceTables", each GetConfluenceTables([Value])), GetConfluenceTables1 = #"Aufgerufene benutzerdefinierte Funktion"{0}[GetConfluenceTables], ParsedTable = GetConfluenceTables1{0}[ParsedTable], #"Geänderter Typ" = Table.TransformColumnTypes(ParsedTable,{{"KPI-ID", Int64.Type}, {"KPI-Name", Typ Text}, {"Beschreibung", Typ Text}, {"Berechnung", Typ Text}, {"Quellsystem", Typ Text}, {"Spalte6", Typ Text}, {"Spalte7", Typ Text}, {"Column8", Typ Text}, {"Column9", Typ Text}, {"Column10", Typ Text}}) in #"Geänderter Typ"
				
			

Navigieren Sie als Nächstes zu den Tabellendaten und erweitern Sie diese, insbesondere wenn die Seite mehrere Tabellen enthält. Nach der Erweiterung sehen Sie den gesamten extrahierten Tabelleninhalt. An diesem Punkt können Sie Ihre Abfrage bereinigen, indem Sie unnötige Spalten entfernen und weitere Anpassungen vornehmen, um sie Ihren Berichtsanforderungen anzupassen.

Hinzufügen von KPI-Definitionen zu Ihrem Bericht

Nachdem die KPI-Definitionen erfolgreich geladen wurden, besteht der nächste Schritt darin, sie in ein gemeinsames semantisches Modell zu integrieren. Darüber hinaus können Sie einen wiederverwendbaren benutzerdefinierten Tooltip und eine Schaltfläche entwerfen, um die Definitionen nahtlos in Ihre Berichte zu integrieren.

Einrichten der benutzerdefinierten Tooltip-Seite

Konfigurieren Sie zunächst die Leinwandgröße und die Eigenschaften für Ihren benutzerdefinierten Tooltip. Aktivieren Sie die „Als Tooltip verwenden zulassen“ und stellen Sie die Seitengröße auf 600 x 600 Pixel ein (oder passen Sie sie an Ihre bevorzugten Abmessungen an). Passen Sie das Design an den visuellen Stil und die Anforderungen Ihres Berichts an.

Verwenden des benutzerdefinierten Tooltips

Nachdem Sie den benutzerdefinierten Tooltip eingerichtet haben, besteht der nächste Schritt darin, ihn an den entsprechenden Stellen in Ihrem Bericht auszulösen. Er kann beispielsweise angezeigt werden, wenn Sie mit der Maus über eine visuelle Karte fahren. Beachten Sie jedoch, dass Power BI keine benutzerdefinierten Tooltips für Text, Bilder oder Schaltflächen unterstützt.

Um diese Einschränkung zu umgehen, ist die einfachste Vorgehensweise die Verwendung einer visuellen Karte. Damit diese funktioniert, benötigen Sie eine Hilfsmaßnahme, die Inhalt für die visuelle Karte bereitstellt. In diesem Beispiel habe ich eine einfache Maßnahme erstellt, die ein Emoji als Text enthält:

				
					KPI-Hilfemaß = „❔“
				
			

Fügen Sie einer visuellen Karte die Hilfsmaßnahme hinzu und formatieren Sie sie so, dass sie sich nahtlos in Ihren Bericht einfügt, indem Sie Hintergrund, Rahmen und Schatten entfernen.

Als nächstes verknüpfen Sie das Kartenbild mit dem benutzerdefinierten Tooltip über Formatierungsoptionen. Um die Relevanz sicherzustellen, fügen Sie den KPI-Namen als Filter zur visuellen Darstellung der Karte hinzu und wählen Sie nur die KPIs aus, die auf der jeweiligen Seite angezeigt werden sollen. Mit diesem Ansatz können Sie nur die relevanten, auf die jeweilige Berichtsseite zugeschnittenen KPI-Definitionen präsentieren.

Sobald Ihr semantisches Modell fertig ist, laden Sie es an einen freigegebenen Speicherort hoch, wo andere Berichtsersteller problemlos darauf zugreifen können. Mit demselben Ansatz können Sie den benutzerdefinierten Tooltip in allen Berichten replizieren und so eine einheitliche Darstellung der KPI-Definitionen sicherstellen.

Wenn Ihre Organisation eine unternehmensweite Power BI-Vorlage verwendet, sollten Sie den Tooltip und seine Verbindung zum freigegebenen semantischen Modell in die Vorlage integrieren. Dadurch wird die Verwendung in allen Berichten standardisiert und Konsistenz und Abstimmung zwischen den Berichtserstellern sichergestellt.

Diese Technik wurde auch bei der Entwicklung des Salesforce-Verkaufsberichtsvorlage für Power BI.

Dieser Prozess zeigt, dass die Verbindung von Power BI mit in Confluence gespeicherten Daten nicht nur machbar ist, sondern auch eine hervorragende Lösung für die Verwaltung wiederverwendbarer KPI-Definitionen in Ihrem gesamten Unternehmen darstellt.

Ich hoffe, dieser Leitfaden hilft Ihrem Unternehmen dabei, eine stärker datengesteuerte Kultur zu entwickeln. Ich freue mich über Ihre Kommentare und Ihr Feedback!

Einen Kommentar schreiben

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert