Power BI-Diagramm: Achsen-Beschriftung mit berechnetem Wert

Ich arbeite aktuell in einem Projekt in dem ich die Aufgabe habe, Power BI-Berichte zu erstellen – ein sehr spannendes Projekt mit vielen Herausforderungen. Eine Aufgabenstellung, an der ich ziemlich gekämpft habe (bevor ich die Anforderung meines Kunden erfüllen konnte), ist leicht zu beschreiben: Der Kunde würde gerne die Beschriftung der Y-Achse in einem Säulendiagramm über einen berechneten Wert (Measure; DAX-Formel) setzen. Ich habe dazu ein Beispiel vorbereitet:
image

Erklärung: auf der linken Seite des Berichts befindet sich ein Slicer zur Auswahl des entsprechenden Wertes. Der Wert im Diagramm wird über den Measure (Measure_Selection) gesteuert. Der Measure sieht folgendermaßen aus:


Measure_Selection =
IF (

HASONEVALUE ( 'Kennzahlen'[ID] );

    SWITCH (

         VALUES ('Kennzahlen'[ID]);

              1; AVERAGE('Bundesländer_Zahlen'[Flaeche]);

              2; AVERAGE('Bundesländer_Zahlen'[Einwohner]);
              3; AVERAGE('Bundesländer_Zahlen'[BIP]);

              4; AVERAGE('Bundesländer_Zahlen'[Einwohner])/AVERAGE('Bundesländer_Zahlen'[Flaeche]);

5; AVERAGE('Bundesländer_Zahlen'[BIP])/AVERAGE('Bundesländer_Zahlen'[Einwohner])*1000000000);

    0
)

Das Problem besteht nun darin, dass sich die Beschriftung der Y-Achse nicht dynamisch entsprechend des ausgewählten Measures ändern lässt. Eine mögliche Alternative wäre alle Diagramm auf der Seite anzuzeigen (dann könnten in einzelne Diagramme hineingezoomt werden) oder man arbeitet mit Bookmarks und Buttons und blendet jeweils die nicht benötigen Diagramme aus – die erste Idee wird schnell unübersichtlich und bei der zweiten Idee muss man dann anstatt eines Slicers Buttons verwenden –> alles irgendwie nicht so zielführend.
Die Möglichkeit der dynamischen Beschriftung der Y-Achse ist bspw. in Excel schon lange verfügbar und sieht so aus:
image

Betrachten wir nun Power BI etwas genauer, gibt es auch dort die Möglichkeit die Y-Achse (oder die X-Achse) bei Diagrammen zu beschriften. Mit dem Standardwert “Auto” wird der Name der verwendeten Spalte oder des Measures angezeigt:
image

Nachdem ich dafür ein Measure verwendet habe, erscheint dieser Name auch dort, was für einen unbedarften Endanwender merkwürdig anmuten mag. Alternativ kann man die Beschriftung auf einen festen Wert setzen:
image

Was bei unterschiedlichen Werten etwas merkwürdig anmuten mag, denn wie in dem gewählten Beispiel haben die Zahlenwerte eigentlich nichts miteinander zu tun.

Eine dynamische Zuordnung bspw. über einen berechneten Wert (Measure) ist hier nicht vorgesehen. Im Vergleich dazu lassen sich aber andere Eigenschaften dynamisch per Measure ändern, wie z. B. der Diagrammtitel:
image

Das man für eine Eigenschaft ein Measure (oder andere Elemente) verwenden kann, erkennt man an den drei Punkte bei der jeweiligen Eigenschaft (hier noch einmal vergrößert):
image
Hinweis: Die drei Punkte erscheinen erst dann, wenn man mit der Maus über das Feld streicht – warum auch immer dies so implementiert wurde.

Klickt man auf die drei Punkte oder mit rechter Maustaste im Text-Feld
image

und wählt dann “Bedingte Formatierung”, wird ein Dialog angezeigt, bei dem man einen Feldwert als Eigenschaft auswählen kann:
image

Anmerkung: Warum hier nur “Feldwert” zur Verfügung steht, weiß wahrscheinlich nur Microsoft. Ich hoffe, dass irgendwann auch einmal eine Formel, z. B. auf Basis von DAX, hier eingegeben werden kann, so dass man nicht jedes Mal ein Measure definieren muss, wenn man eine Eigenschaft individuell setzen möchte. Aber bis dahin, wird es wohl noch dauern… Es gibt auch tatsächlich wichtigere Themen, die in Power BI noch umgesetzt werden müssen.

Wechseln wir nun wieder zurück auf den Achsen-Titel, fällt auf, dass die beim Diagrammtitel vorhandenen drei Punkte hier fehlen:
image

…und damit hat mein Kunde und somit ich ein Problem Sad smile Nun könnte ich natürlich die Beschriftung der Y-Achse weglassen und stattdessen einen aussagekräftigen Titel einfügen, doch gefällt dies meinem Kunden nicht.

Wie es aussieht bin aber ich nicht der einzige mit diesem Problem, denn in der Community von Power BI  taucht diese Anforderung bereits öfter auf, wie z. B. unter https://community.powerbi.com/t5/Desktop/change-chart-axis-label-by-measure/td-p/336545 und auch auf der Wunschliste ist dieses Thema bereits zu finden https://ideas.powerbi.com/forums/265200-power-bi-ideas/suggestions/36378799-using-measures-in-axis-for-bar-chart wenn auch, wie bei dieser Idee mit 4 Stimmen, nicht sonderlich hoch priorisiert.

Zur Lösung des Problems gibt es einige Ansätze, die jedoch entweder mit viel Aufwand verbunden sind und/oder nicht wirklich zu dem erwarteten Ergebnis führen. Diese verschiedenen Lösungsansätze möchte ich euch im Folgenden vorstellen:

Diese Ansätze haben keinen Anspruch auf Vollständigkeit und einige findige Report Designer haben sicherlich noch viel mehr in Petto. Doch mir fällt derzeit nicht mehr ein – bin jedoch für Anregungen meiner Leserschaft sehr dankbar. Für alle ungeduldigen Leser (tL;dR = too long didn’t read) vorab: Die von mir gefundene Lösung und vom Kunden akzeptierte Lösung verwendet ein benutzerdefiniertes Visual, dass mit SVG angereichert wurde.

Anmerkung: Alle in diesem Blogbeitrag aufgezeigten Beispiele habe ich für Euch in einem Power Bi-Bericht zusammengefasst, den ich am Ende dieses Beitrags zum Download bereitstelle. Ich habe den Bericht dort ebenfalls als IFrame eingebunden, so dass ihr ihn direkt ausprobieren könnt.

Standard Visuals/Elemente

Zuerst habe ich einige der in Power BI-Desktop integrierten Visuals/Elemente daraufhin untersucht, ob die Anforderung des Kunden in irgendeiner Form umsetzbar ist. Soweit vorab: Mit keinem der von mir untersuchten Standardelemente war es mir möglich, die Anforderung des Kunden nach einer Slicer-abhängigen individuellen Beschriftung der Y-Achse in einem Diagramm zu erfüllen. Das könnte nun daran liegen, dass ich ggf. noch nicht den richtigen Weg dafür gefunden haben oder auch daran, dass es diesen Weg nicht gibt.

Diagramm-Visuals

Nachdem ich nicht glauben konnte, dass diese Funktion bei dem von mir verwendete Visual (clustered column chart) nicht enthalten ist, habe ich auch die anderen Diagramm-Visuals dahingehend überprüft – bei allen mit dem gleichen Ergebnis: kein individuelles Setzen der Beschriftung der Achsen!

Hier am Beispiel eines Liniendiagramms:
image

Wenn auch für mich nicht nachzuvollziehen, scheint Microsoft diese Funktionalität in den in Power BI integrierten Visuals nicht vorgesehen zu haben. Somit blieb mir nichts anderes übrig, als mich nach Alternativen umzusehen. Meine erste Idee war die Y-Achse selbst mit einem anderen Visual nachzubilden. Was ich auf diesem Weg alles ausprobiert habe, beschreibe ich im Folgenden – oder die Irrungen und Wirrungen von Sylvio auf dem Weg dahin, den Wunsch des Kunden zu erfüllen.

Textbox-Element

Meine nächste Idee war, als Achsenbeschriftung ein Textfeld in den Bericht einzufügen und dann zu drehen. Leider scheiterte dies an zwei Limitierungen des Textfeldes:

  1. Der Text in einer Textbox lässt sich nicht über ein Measure definieren und
  2. Eine Textbox lässt sich nicht drehen

…was ist denn das für ein Sche…

image

Das kann doch nun wirklich fast jedes andere Programm – nur eben Power BI-Desktop nicht (bis zur Version: 2.74.5619.862 vom 24.10.2019, mit der ich diesen Beitrag erstellt habe –> aktuelle Version ist 2.75.5649.582 vom 11.11.2019).

Formen

Andere Formen (außer Textbox) unterstützen die Drehung. Jedoch kann ich einer solchen Form keine Text zuweisen. Der einzig zuweisbare Text ist der Titel, der zwar über ein Measure gesetzt werden kann, doch der dreht sich leider nicht mit:
image

Scalable Vector Graphics (SVG)

Für alle die, die bisher mit diesem Format noch nicht gearbeitet haben, eine kurze Definition (lt. Wikipedia):

“Scalable Vector Graphics (SVG, englisch für skalierbare Vektorgrafik) ist die vom World Wide Web Consortium (W3C) empfohlene Spezifikation zur Beschreibung zweidimensionaler Vektorgrafiken. SVG, das auf XML basiert, wurde erstmals im September 2001 veröffentlicht.”

Bei SVG handelt es sich um kein Element/Visual, das man direkt in einen Bericht einbinden kann. Sondern man muss diese Technologie in vorhandene Visuals integrieren. Eigentlich eine coole Idee von Microsoft, dieses Format in Power BI zu unterstützen. Damit lassen sich innerhalb des KPI-, Tabellen-, Matrizen- und benutzerdefinierten Visuals eigene Darstellungen einbauen.

Betrachten wir nun unsere Aufgabenstellung “Drehen von Text”, so ist dies sehr einfach über SVG zu realisieren. Eine Oberfläche zum Erstellen einfacher SVG findet ihr bspw. unter https://www.w3schools.com/graphics/tryit.asp?filename=trysvg_text2:
image

Doch theoretisch würde zum Schreiben der Grafik auch ein einfacher Editor wie Notepad ausreichen – schlussendlich ist es nur ein XML-basierter Text.
Eine Beschreibung der Sprache “SVG” mit vielen Beispielen findet ihr unter https://www.w3schools.com/graphics/svg_intro.asp.

Sobald die Grafik den Anforderungen entspricht, müsst ihr diese “nur noch” in Power BI-Bericht integrieren. Zum Einbinden einer solchen Grafik in einen Bericht, legt ihr am besten ein neues Measure an (Alternative: berechnete Spalte in PowerQuery) und übernehmt den gesamten Tag (<svg…>…</svg>) in das Measure. Das Ergebnis sollte dann so aussehen:
image


SVGText = "
<svg xmlns='http://www.w3.org/2000/svg' height='100' width='100'>

    <text x='0' y='50' fill='red' transform='rotate(40 20,40)'>I love SVG</text></svg>"

Wichtig an dieser Stelle ist, dass ihr die vorhandenen doppelten Anführungszeichen („) durch einfache Anführungszeichen (‚) ersetzt und die gesamten SVG-Zeichenkette in doppelte Anführungszeichen setzt. Fügt ihr nun dieses Measure in eine Tabelle ein, so sieht es folgendermaßen aus:

image

Das ist natürlich nicht das, was geplant war. Um daraus eine SVG in der Ansicht zu machen sind noch zwei Schritte erforderlich:

    1. Fügt vor dem “<SVG..”-Tag in dem Measure noch den Präfix “data:image/svg+xml;utf8,” ein.
      image

SVGText = "data:image/svg+xml;utf8, <svg xmlns='http://www.w3.org/2000/svg' height='100' width='100'>
<text x='0' y='50' fill='red' transform='rotate(40 20,40)'>I love SVG</text></svg>"

    1. Der Power BI-Bericht interpretiert das Measure bis hierhin immer noch als Zeichenkette. Um in dem Bericht zu definieren, dass es sich hierbei um ein Grafikformat handelt, muss die Datenkategorie auf “Bild-URL” umgestellt werden. Dazu wechselt ihr auf die Modellansicht und wählt dort das entsprechende Measure aus. Danach klickt ihr unter Eigenschaften auf “Erweitert” und wählt unter Datenkategorie die “Bild-URL” aus:
      image

Alles ganz einfach… und schon hat man ein wunderschönes Ergebnis

image

Um nun in das Measure noch eine Spalte aufzunehmen, muss man nur noch den entsprechenden Wert einfügen. Das sollte dann so aussehen:

image


SVGText2 = "data:image/svg+xml;utf8, <svg xmlns='http://www.w3.org/2000/svg' height='150' width='50'><text x='50%' y='20px' text-anchor='middle' transform='rotate(270 35,35)'>"
& SELECTEDVALUE(Kennzahlen[Keyword]) & "</text></svg>"

Hinweis: Eine Beschreibung der Attribute der XML-Elemente spare ich mir, da dies für diesen Blog zu weit führen würde – da er ohnehin schon wieder zu umfangreich geworden ist (länger als ich geplant hatte). Wer mehr dazu erfahren möchte oder Fragen hat, kann sich gerne per Mail an mich wenden.

Im Ergebnis sieht dies schon gut aus – dem Ziel so nahe:

image

Abhängig von der Schriftart und der Länge des Textes, passt dies in die entsprechende Zeile des Tabellen-Visuals. Nachdem die Maximalhöhe einer Zeile bei Tabellen-/Matrix-Visual maximal 150px beträgt, stößt man bei jedem längeren Text/größeren Bild an Grenzen – insbesondere dann, wenn der Text noch um 90° gedreht werden soll. Wie man in dem folgenden Beispiel sieht, kommt es bei längerer Text dazu, dass ein Teil davon in einen nicht sichtbaren Bereich verschwindet, wie sehr schön am Beispiel von “uttoinlandsprodukt pro” zu sehen:
image

Sieht also so aus, als ob ich auf diesem Weg den Wunsch meines Kunden nicht umsetzen kann.

Kleiner Hinweis noch: Wenn, wie für den gewählten Anwendungsfall, die Spaltenüberschriften der Tabelle entfernt werden sollen, dann bekommt man dies mit ein wenig basteln an den Eigenschaften hin. Hier mein Vorschlag:

image

Sollte jemand eine bessere Idee haben, immer her damit.

Neben so langweiligen Sachen wie Texte in einem kleinen Kästchen hin- und herzuschieben und vielleicht sogar noch ein wenig zu drehen, bietet SVG noch viele Möglichkeiten, von denen ich euch einige im Folgenden zeigen möchte – vielleicht könnt ihr das eine oder andere für eure Arbeit verwenden (würde mich freuen).
Wer sich intensiver mit dem Thema beschäftigt, kann diese Technologie bspw. dazu verwenden, in Tabellen-Visuals noch datenbasierte Diagramme einzufügen. Das folgende Beispiel wurde von David Eldersveld erstellt und in Power BI Community Gallery unter https://community.powerbi.com/t5/Quick-Measures-Gallery/SVG-Sparklines-Line/td-p/486271 veröffentlicht:
image

Das folgende Beispiel enthält eine von mir erstellte Machbarkeitsstudio, bei der ich Animationen auf Basis von SVG in Power BI eingebunden habe. Die für den Bericht verwendete Grafik stammt von Wikipedia (https://upload.wikimedia.org/wikipedia/commons/4/4f/Soccer_ball_animated.svg). Das Beispiel habe ich innerhalb weniger Minuten erstellt:
Fussball

Doch nicht nur als kleine Grafik in einem Visual funktioniert dies, sondern ihr könnt diese Grafiken bspw. auch als Hintergrund für einen Power BI-Bericht verwenden (ich habe euch hier nur einen Screenshot eingefügt –> im realen Bericht dreht sich auch der Hintergrund):

image

Der Berichtshintergrund lässt sich aber nicht per Slicer steuern. Somit ist dies eher für “statische” Darstellungen geeignet.

Eine sehr schöne Anleitung, was man alles mit SVG in Power BI anstellen kann, findet ihr bspw. in den Blog-Reihen von

Anmerkung: Für den Fall, dass ihr komplexere SVG erstellen wollt, solltet ihr einen entsprechenden Editor verwenden. Wer nicht gerade viel Geld für einen Adobe Illustrator ausgeben möchte, kann dafür sicherlich auch eine Open Source-Lösung wie bspw. Inkscape verwenden.

Sicherlich werdet ihr euch nun fragen, warum ich mich gerade bei dieser Möglichkeit so lange aufgehalten habe. Doch im nächsten Abschnitt dieses Blogs werdet ihr sehen, dass die Integration dieser Technologie doch noch zu einem Ergebnis geführt hat (wenn auch nicht mit Microsoft-eigenen Visuals).

Visuals mit Skriptunterstützung

Die Einbindung von Skripten ist der nächste Schritt um die Komplexität von Visuals zu erhöhen. Meiner persönlichen Meinung nach sollte man diesen Weg nur dann gehen, wenn man genau weiß, was man tut und mit der entsprechenden Sprache vertraut ist. Wann man welche Sprache in Kombination mit welchen Visual verwenden soll, hängt wahrscheinlich hauptsächlich von den Kenntnissen des Report Designers ab und wahrscheinlich auch von den Limitierungen innerhalb von Power BI – nicht alle Wege führen nach Rom (was ich bisher auch für mich eindrucksvoll an den vorangegangenen Beispielen aufgezeigt habe). Zu dem Thema habe ich habe eine interessante Nachricht gefunden, die in der PowerBI Community veröffentlicht wurde https://community.powerbi.com/t5/Custom-Visuals-Development/Developing-custom-visuals-using-Python-vs-R-vs-d3-js-Pros-and/td-p/668745:

image

Bei dem in dem Beitrag verwendete D3.js Visual handelt es sich um ein benutzerdefiniertes Visual, dass ich im nächsten Kapitel betrachte.

Des Weiteren solltet ihr beachten, dass diese Visuals Limitierungen haben, die einem praktischen Einsatz im Unternehmenskontext oft im Wege stehen. Ich werde bei den jeweiligen Visuals gezielt diese Punkte ansprechen.

R Script-Visual

R ist eine “Programmiersprache” mit dem Schwerpunkt auf statistische Analysen und zur grafischen Darstellung von Daten. Seit einigen Versionen gibt es eine Integration in Power BI – als Visual und als Erweiterung von PowerQuery (zum Laden und Transformieren von Daten). Der Schwerpunkt bei der aktuellen Aufgabenstellung ist die Darstellung mittels eines Visuals.

Nachdem ich mich bei der Aufgabenstellung mit der Darstellung von Daten beschäftigt habe, wollte ich versuchen, mit R einen Text um 90° zu drehen und diesen als Achsenbeschriftung für ein Diagramm zu verwenden.

image

Voraussetzung für die Nutzung von R in Power BI-Desktop ist, dass eine R-Implementierung auf dem PC installiert und in Power BI-Desktop aktiviert ist. Eine Anleitung dafür findet Ihr unter https://docs.microsoft.com/de-de/power-bi/desktop-r-visuals.

Für mein Beispiel habe ich die R-Implementierung von Revolution R verwendet:
imageimage

Eine gute Anleitung zur Installation von R aus dem CRAN Repository im Power BI-Desktop findet ihr unter https://carldesouza.com/installing-r-power-bi-using-cran-repository/.

Bei der ersten Verwendung von R in einem Power BI-Bericht wird ein Sicherheitshinweis angezeigt:
image

Insofern ihr euern eigenen R-Code schreiben wollt, könnt ihr diesen Warnhinweis ignorieren. Sobald ihr jedoch Script aus dem Internet verwendet, ist dieser Warnhinweis sicherlich berechtigt.

Wer vorher noch nie mit R gearbeitet hat, findet hier eine recht umfassende Dokumentation dieser Sprache: https://cran.r-project.org/doc/manuals/R-intro.html#Graphics. Des Weiteren gibt es im Internet sehr viele Beispiele, wie R in Power BI verwendet werden kann –> hier eine Suche mit einer Suchmaschine https://www.google.de/search?q=Power+BI+R+script

Doch nun zurück zu unserer Aufgabenstellung “Drehen von Text”: Erste Besonderheit des R-Visuals ist, dass zwingend ein plot-Bereich – der ein Diagramm darstellen möchte – erforderlich ist. Dies ist eigentlich auch sehr sinnvoll, denn die zentrale Aufgabenstellung dieses Visuals besteht ja in der Darstellung von Daten. Wird der plot-Bereich weggelassen, kann das Visual aufgrund eines Fehlers nicht angezeigt werden:
image

Klickt man dann auf Copy Details und fügt diese bspw. in Notepad ein, sieht man Folgendes (Ausschnitt):
image

Für unsere Aufgabenstellung ist es nun erforderlich dieses Diagramm auszublenden und nur die Beschriftung der Y-Achse stehen zu lassen. Dazu solltet ihr als erstes ein R-Visual in den Bericht einfügen und das entsprechende Measure (hier “Keyword”) als Value hinzufügen:image

Nun steht der Wert über das Element “dataset$Keyword” in dem Visual zur Verfügung und es lässt sich nun einfach innerhalb des R-Syntax verwenden:


plot(-1:1, -1:1, type = "n", xlab=" ", ylab = dataset$Keyword, cex.lab=1.5, axes=FALSE)

Wenn weitere Elemente angezeigt werden sollen, lassen sich auch in R Zeichenfolgen zusammensetzen, wie z. B.
image

Alternativ könnt ihr auch ein leeres Diagramm darstellen und ein Text-Element einfügen. Dann sieht die Syntax so aus:


plot(x=0,y=0,type="n", xlab=" ", ylab = " ", axes=FALSE)
text(x=-1.06, y=0, labels=dataset$Keyword, srt=90, cex=1.5)

Die detaillierte Beschreibung der Parameter erspare ich euch an dieser Stelle. Mir geht es hierbei weniger darum euch in R einzuführen, sondern vielmehr die Lösung aufzuzeigen. Gerne könnt ihr mit den Befehlen experimentieren und eine zu eurer Aufgabenstellung passende Lösung finden.

R kann aber viel mehr: Deshalb stellt sich irgendwann die Frage, ob es nicht einfacher ist mit R das vollständige Diagramm zu zeichnen (inkl. Beschriftung der Y-Achse), anstatt sich nur auf die Y-Achse zu fokussieren. Hier ein Beispiel aus dem Blog von Christoph Herzog:
image
http://theduke.at/blog/science/beginners-guide-to-creating-grouped-and-stacked-bar-charts-in-r-with-ggplot2/
das man sehr einfach auf die Anforderungen meines Kunden umsetzen könnte. Jedoch sollte beachtet werden, dass die Verwendung von R für Visuals in Power BI einige Limitierungen hat (es ist nicht alles Gold was glänzt):
image
Quelle: https://www.pbiusergroup.com/HigherLogic/System/DownloadDocumentFile.ashx?DocumentFileKey=4890df07-6f2e-518d-fb66-0f9c4be7a793&forceDialog=0

Weitere Limitierungen unter https://docs.microsoft.com/de-de/power-bi/visuals/service-r-visuals#licensing:
image

Wer mit diesen Einschränkungen leben kann, findet in der Kombination von Power BI und R ungeahnte Möglichkeiten in der Darstellung von Daten, wie ihr auch an den folgenden Beispielen aus dem Internet sehen könnt:

Python Visual

Python ist eine objektorientierte, interpreter-basierte und interaktive Programmiersprache (https://wiki.python.org/moin/FrontPage). In Power BI Desktop wird Python seit August 2018 unterstützt. Um Python in Power BI-Desktop nutzen zu können, muss es zuerst installiert und konfiguriert werden. Eine Installationsanleitung findet ihr unter https://docs.microsoft.com/de-de/power-bi/desktop-python-scripts. Des Weiteren sind die Python-Module pandas und matplotlib erforderlich. Diese sollten vor der Verwendung in Power BI-Desktop installiert werden:

  • pip install pandas
  • pip install matplotlibimage

Beim Erstellen des Python-Skripts für das Visual ist eine Plot-Funktion erforderlich. Basis für Grafiken mit Python in Power BI ist die Funktion pyplot der matplotlib. Eine Dokumentation dazu findet ihr unter https://matplotlib.org/3.1.1/api/index.html.

Folgender Code zeigt ein leeres Fenster an:


import matplotlib.pyplot as plt
plt.show()

Wird die show-Methode weggelassen, erzeugt das Rendern dieses Visuals einen Fehler:
image

Im Stacktrace findet ihr dann folgende Meldung: “No image was created. The Python code didn’t result in creation of any visuals. Make sure your Python script results in a plot to the Python default device.”

image

Wenn es nur darum geht eine “virtuelle” Achsenbeschriftung zu erstellen, reicht es aus, nur den entsprechenden Wert (in dem folgenden Beispiel “Bundesland”) dem Visual hinzuzufügen:
image

und folgende Python-Code zu erstellen:


import matplotlib.pyplot as plt
BL = (dataset['Keyword'] + " (" + dataset['Einheit'] + ")").fillna('').tolist()
plt.bar('','')
#plt.ylabel(BL[0], labelpad=50, fontsize=20)
plt.text(x=-0.3,y=0.5,s=BL[0],ha="left", va="center", rotation=90., fontsize=20)
plt.box(on=None)
plt.show()

Auch bei diesem Visual hat man wieder die Möglichkeit entweder mit dem Label der Y-Achse zu arbeiten oder einen Text auf dem Visual zu platzieren. Im vorhergehenden Code habe ich die Beschriftung der Y-Achse auskommentiert.

Genauso wie bei dem R-Visual gibt es auch bei dem Python-Visual einige Limitierungen (https://docs.microsoft.com/en-us/power-bi/desktop-python-visuals#known-limitations)
image
image

und es stellt sich auch hier die Frage, warum nur die Achse beschriften, wenn man auch das gesamte Diagramm damit bauen könnte. Im Folgenden ein Beispiel dazu:

Code (Quelle: https://python-graph-gallery.com/11-grouped-barplot/):


# libraries
import numpy as np
import matplotlib.pyplot as plt
# set width of bar
barWidth = 0.25

# set height of bar
bars1 = [12, 30, 1, 8, 22]
bars2 = [28, 6, 16, 5, 10]
bars3 = [29, 3, 24, 25, 17]

# Set position of bar on X axis
r1 = np.arange(len(bars1))
r2 = [x + barWidth for x in r1]
r3 = [x + barWidth for x in r2]

# Make the plot
plt.bar(r1, bars1, color='#880000', width=barWidth, edgecolor='white', label='var1')
plt.bar(r2, bars2, color='#008800', width=barWidth, edgecolor='white', label='var2')
plt.bar(r3, bars3, color='#000088', width=barWidth, edgecolor='white', label='var3')

# Add xticks on the middle of the group bars
plt.xlabel('group', fontweight='bold')
plt.xticks([r + barWidth for r in range(len(bars1))], ['A', 'B', 'C', 'D', 'E'])

# Create legend &amp; Show graphic
plt.legend()
plt.show()

image

Wer einmal das Konzept von Python und dessen Einbindung in Power BI verstanden hat, kann echt coole Daten-Präsentationen erstellen.

Hier noch einige Links, die mir beim Erstellen der Beispiele in diesem Bereich sehr geholfen haben:

Benutzerdefinierte Power BI-Visuals

Nachdem es mir bis zu diesem Punkt nicht gelungen ist, die Anforderung meines Kunden mit Power BI-eigenen Visuals zufriedenstellend umzusetzen, habe ich mich auf dem stetig wachsenden Markt der frei verfügbaren benutzerdefinierten Visuals (Custom Visuals) umgesehen.

Als Startpunkt bietet sich dafür der Microsoft Market Place an, der direkt über Power BI-Desktop aufrufbar ist:
image

Auf dem Marketplace gibt es sehr viele Visuals zum Erstellen von Diagrammen und leider nur einige wenige Visuals, die man für die Text-Manipulation verwenden kann.

kleiner Hinweis, der bei der Verwendung von benutzerdefinierten Visuals wird folgender Warnhinweis angezeigt wird:
image

Einige werden nun denken, dass Microsoft hier ein wenig übervorsichtig ist. Doch schlussendlich kauft ihr mit einem solchen benutzerdefinierten Visual die berühmte “Katze im Sack”, da ihr in Power BI eine Komponente integriert, die mit den vorhandenen Daten interagieren soll und somit theoretisch auch die Möglichkeit besteht, dass dieses Visual eure Daten fehlerhaft darstellt oder, was noch schlimmer wäre, die Daten zur weiteren Analyse an den Ersteller der Visuals weiterleitet.

Anmerkung: Wenn man sich sowieso für ein Custom Visual entscheidet, stellt sich bei dieser Anforderung die Frage, soll man sich nur auf die Drehung des Textes beschränken oder sich gleich Gedanken dazu machen, dass entsprechend den Anforderungen gewünschte Diagramm komplett neu zu erstellen. Nachdem mein Kunde soweit möglich auf die Standard-Visuals bei der Berichterstellung zurückgreifen wollte, habe ich mich bei den Custom Visuals vorerst nur auf die Text-Darstellung fokussiert.

Text Enhancer by MAQ Software

Dieses Visual unterstützt die Drehung von Text, wie man auf dem Bild im Market Place gut erkennen kann und sollte somit eigentlich genau das sein, was ich zur Umsetzung des Kundenwunsches benötige:
image

Dieses Custom Visual bietet sehr viele Einstellungsmöglichkeiten zur Manipulation von Text, wie z. B. auch die Drehung. Jedoch wird der Text nicht einfach nur um den definierten Winkel gedreht, sondern er wird auch horizontal und vertikal verschoben. Diese Verschiebung lässt sich zwar über weitere Eigenschaften ausgleichen, jedoch funktioniert dies nur dann, wenn der Text die gleiche Länge hat. Wenn dieser, wie in meinem Fall, unterschiedlich lang sein kann, so ist er einmal weiter links/rechts oder oben/unten. Was insbesondere bei einer Achsenbeschriftung als eher (ver-)störend empfunden wird:
image

Vielleicht gibt es doch noch irgendwo eine Eigenschaft, mit den man diese Verschiebung verhindern kann. Doch leider habe ich sie bisher nicht gefunden und mich deshalb entschieden weitere benutzerdefinierte Visuals anzusehen.

HTML Viewer by Hitachi

Die Verwendung von HTML bietet sehr viele Möglichkeiten und, wem diese noch nicht ausreichen, kann die Fähigkeiten von HTML durch Javascript oder SVG noch weiter optimieren.

image

Bei meinen Tests habe ich mich auch hier wieder auf den Einsatz zur Drehung von Text beschränkt.

Im folgenden Screenshot habe ich Text in die jeweiligen HTML Viewer Visuals eingefügt. Im linken Visual ein langer Text und in rechten Visual ein kurzer Text. Ansonsten sind alle Einstellungen gleich.
imageimage

Um zu erreichen, dass sich der Text an der gleichen Position befindet, muss ich den Text jeweils unterschiedlich Positionieren (im linken Beispiel mit -33px und im rechten Beispiel auf 0px). Somit besteht das Problem, genauso auch wie in dem vorherigen Text Enhancer Visual, dass man den Text abhängig von der Länge des Textes unterschiedlich positionieren muss.

Anmerkung: Außer der Positionierung des Textes besteht hier die Herausforderung, dass dieses Visual nur berechnete Spalten unterstützt und keine Measures – die eigentlich eine Anforderung meines Kunden sind.

Doch auch in das HTML Viewer Visual lassen sich Scalable Vector Graphics (SVG) einbinden. Das sieht dann so aus:
image

Nachdem, wie bereits angemerkt, keine Measures unterstützt werden, habe ich mit PowerQuery (M) eine zusätzliche Spalte in die Tabelle eingefügt:
image


SVGinHTML = Table.AddColumn(#"Changed Type", "SVGinHTML", each "<svg height='500' width='40'><text x='50%' y='10px' text-anchor='middle' transform='rotate(270 100,100)'>" & [Keyword] & " " & [Einheit] & "</text></svg>")

Somit würde ich sagen: Auftrag erfüllt! …und ich kann meinem Kunden eine hoffentlich auch für ihn zufriedenstellende Lösung für seine Anforderung anbieten.

Mit diesem Visual lassen sich noch viele weitere Ideen umsetzen, die sich sonst nur mit viel Aufwand programmiert werden müssen. Ein Beispiel dafür habe ich für Euch im Internet in einem Power BI-Bericht gefunden (hier eine kurze Videosequenz davon):

DancingCats2

Das Beispiel steht unter https://github.com/deldersveld/PowerBIDancingCats/blob/master/Dancing%20Cats%20V2.pbix zum Download bereit.

D3.js Visual

D3 steht für DDD = Data Driven Documents und js, sicherlich selbsterklärend, für JavaScript – somit ist D3.js eine JavaScript-Entwicklerbibliothek, welche es erlaubt, Daten mit grafischen Elementen (SVG) im Browser zu kombinieren und diese so auf vielfältige Art und Weise zu visualisieren.
D3 basiert auf HTML5 und CSS3.

Bei diesem Visual kann JavaScript-Code zur Darstellung von Power BI-Daten verwendet werden. Das Visual ist Open Source und steht auf Github unter https://github.com/liprec/powerbi-d3jsvisual zur Verfügung. Des Weiteren gibt es eine Website, auf der die Verwendung dieses Visuals gut beschrieben ist: https://azurebi-docs.jppp.org/powerbi-visuals/d3js.html?tabs=docs%2Cdocs-open:

image

Das dort auf der Web-Seite beschriebene Beispiel habe ich Euch als Link hier eingefügt D3jsVisual.Sample.pbix.

Genauso wie R oder Python wird bei D3.js eine Programmiersprache in ein Visual gekapselt, mit der sehr viel möglich ist (siehe auch die Webseite von Mike Bostock’s Blocks). Doch auch bei der Verwendung dieses Visuals gibt es einige Limitierungen (wie bspw. die Beschränkung auf max. 30.000 Datenpunkte).

Die Bearbeitung des Visuals lässt sich über den Visual Header Optionen aktivieren. Danach die Edit-Option auswählen:
image

Daraufhin öffnet sich der Bearbeitungsmodus und ihr könnte folgende Elemente ändern:
image

  • JavaScript
  • Style
  • Power BI Object
JavaScript (Source Code)

image

Style

image

Power BI (PBI) object

image

Image by CloudScope

Dieses Visual ist ebenfalls auf dem Marketplace verfügbar (https://appsource.microsoft.com/en-us/product/power-bi-visuals/WA104381297). Auch dieses Visual arbeitet mit SVG. Der Unterschied zum HTML Viewer ist, dass dieses Visual auch Measures unterstützt. Des Weiteren werden durch dieses Measure auch Grafiken bis zur Größe der Seite unterstützt.

Nachdem ich bereits entsprechende SVG-Measures für die anderen Visuals integriert hatte, war dies schnell zugewiesen. Das Ergebnis war leider weniger überzeugend:image

Natürlich könnte man nun mit der Anpassung der Schriftgröße experimentieren. Doch nachdem ich bereits eine passende Lösung gefunden habe – die auch meinem Kunden gefällt – breche ich diesen Versuch an dieser Stelle ab. Trotzdem sollte man sich dieses Visual merken, da dies, entsprechend der Beschreibung, mehr Möglichkeiten als das HTML viewer-Visual bietet.

Custom Visual

Die Grenze zwischen einem Visual, das mit R, Python, JavaScript oder einer anderen Programmiersprache erstellt wurde, zu einem komplett selbst erstellten Visual ist sehr schmal und schlussendlich ist es die Entscheidung des Berichtsdesigners oder Programmierers für welchen Weg er sich entscheidet. Meiner Meinung nach sollte man erst versuchen die Anforderungen mit Power BI-Bordmitteln umzusetzen, bevor man sich an solch komplexe Implementierungen, wie ein Visual komplett selbst zu erstellen, wagt. Dabei ist einerseits die technische Umsetzung oft aufwendig und andererseits ist zu berücksichtigen, dass die Lösung später in einem Kundenumfeld auch durch euch supported werden muss. Nachdem Microsoft sehr kurze Releasezyklen in Power BI hat, kann es schon vorkommen, dass ein solches Visual in einer Version noch funktioniert und in der nächsten nicht mehr.

Charticulator

Bei dem Charticulator handelt es sich um ein Microsoft Research Projekt (https://www.microsoft.com/en-us/research/tools/?search=charticulator&q=charticulator&sort_by=most-relevant) zum Erstellen eigener Visuals.
image

Dieses Programm steht als Web-Anwendung zur Verfügung (https://charticulator.com). Die Idee dahinter ist genial, denn ein Berichtsdesigner kann ohne Programmierkenntnisse grafisch sehr ansprechende Diagramme erstellen. Hier einige Beispiele aus der Gallery (https://charticulator.com/gallery/index.html):
imagePer Capita GDP of G7 Countries in 2018 World Greenhouse Gas Emissions

Mit dieser Anwendung lassen sich, wie man an Beispielen sieht, komplexe Diagramme oder andere Arten der Präsentation von Daten erstellen. Dazu bietet das Tool eine Vielzahl von Möglichkeiten, die für die aktuelle Aufgabenstellung nicht benötigt werden – ich will ja nur Text drehen:001
Quelle: Paul Turley: http://Tinyurl.Com/charticulator-demos

Hinweis: Dieses Projekt ist zwischenzeitlich Open Source und steht auf Github (https://github.com/Microsoft/charticulator) zur Verfügung. Die offizielle Entwicklung daran wurde von Microsoft Research beendet (soviel ich in Erfahrung bringen konnte –> das letzte aktuelle Update der Github-Seite ist vom Februar dieses Jahres).

Nachdem es sich bei dem Tool um eine Web-Anwendung handelt, benötigt man nur einen Browser (mit dem IE ließ sich das Tool auf meinem PC nicht nutzen, mit Edge ging es schon). Die Bedienung des Tools ist sehr einfach. Nach dem Start Daten auswählen, die für die Darstellung benötigt werden:
003

Ich habe mir dazu manuell eine Datei mit zwei Spalten erstellt (dem Measure zur Beschriftung der Y-Achse) und einem Wert (irgendwie war der notwendig):
004

Nachdem die Datei importiert war, sah es dann so aus:
005

und ich konnte mit “Done” den Lagevorgang abschließen. Danach habe ich im Bearbeitungsbereich alle Elemente entfernt und eine neue Textbox eingefügt und diese über den Pfeil gedreht. Danach habe ich dem Text noch das Measure zugewiesen und den Text noch ein wenig vergrößert. Das war’s…:
006

Als letzte Tätigkeit dieses Erstellprozesses war das Visual zu exportieren – dabei habe ich noch ein paar Informationen zu meiner Person hinterlassen (die aber nicht notwendig gewesen wären):
007

image

Danach wird die bereits bekannte Warnmeldung angezeigt:
image

Nach Klick auf den Import-Button kann dann das vorab erstellte Visual importiert
image
und sofort genutzt werden:
image

Jetzt muss das Visual an die entsprechende Stelle eingefügt werden und es braucht nur noch das Measure und ein anderes Feld für die Granularity (die nicht verwendet wird) zugewiesen zu werden
image

und schon bekommt man das gewünschte Ergebnis:image

Eigentlich genau das, was mein Kunde sich gewünscht hat.

Wer keine Zeit hat mit dem Charticulator zu experimentieren, dem stelle ich auch gerne mein Visual zur Verfügung (https://1drv.ms/u/s!Ak6ygB0SA2DXgcggIEw9b3Fw2NoiUQ?e=SZe1u6) – das lässt sich auch im Charticulator laden und weiterbearbeiten. Wer mag, darf mir seine Optimierungen/Verbesserungsvorschläge zusenden.

Hier stellt sich natürlich die berechtigte Frage, ob es nicht sinnvoller ist, das gesamte Visual inklusive Säulen-Diagramm mit dem Charticulator zu bauen. Doch dies war nicht meine Aufgabenstellung.

Mehr Informationen und Tutorials zur Verwendung des Charticulator findet ihr unter folgenden Links:

Programmierung von Visuals

Der Bau eines Visual auf Basis der Power BI Visuals Tools ist wohl eher etwas für Hardco[r/d]e- Developer. Eine Anleitung dazu, wie ihr selbst ein Visual bauen könnt, findet Ihr unter https://docs.microsoft.com/de-de/power-bi/developer/visuals/custom-visual-develop-tutorial. Ich persönlich finde die Anleitung sehr gut! Jedoch muss man noch einiges an Zeit investieren, wenn man wirklich ein solches Visual damit selbst bauen möchte.

Speziell für diesen Weg gilt, dass nicht nur die Entwicklung, sondern auch der Support eines solchen Visuals in der Verantwortung des Berichtsdesigners liegen. Die Dokumentation zum Erstellen eigener Visuals wurde von Microsoft komplett überarbeitet und steht nun auf https://microsoft.github.io/PowerBI-visuals/docs/overview/ zur Verfügung.

Wer ein solches Visual erstellen möchte, einige Komponenten auf seinem Computer wie z. B.:

Node.js lässt sich über den auf der Webseite verfügbaren Installer installieren. Bitte beachtet, dass genügend Platz auf der System-Festplatte vorhanden sein sollten, denn neben node.js werden noch weitere Komponenten installiert (die folgende Grafik enthält nur einen Auszug):
image

Die Installation von Node.js inkl. aller Komponenten dauerte auf meinem Computer fast 30 Minuten – also ein wenig Zeit dafür einplanen. Des Weiteren empfiehlt die Installation anschließend einen Neustart des Computers. Doch nachdem die Installation auch eine Menge an Komponenten installiert, empfehle ich den Neustart erst nach dieser Installation.

Zur Installation der Power BI-Visual Tools folgenden Befehl eingeben:


npm install -g powerbi-visuals-tools

image

image

Ist die Installation der Tools abgeschlossen, lässt sich diese mit dem Befehl pbiviz testen:

image

Danach solltet ihr ein neues Verzeichnis erstellen, in das später das Visual eingefügt wird. In dem Verzeichnis führt ihr anschließend folgende Befehle zum Erstellen und Installieren eines Zertifikats aus:

pbiviz --install-cert

image

Anmerkung: In einigen Dokumentationen wird noch darauf hingewiesen, dass das Zertifikat mit dem Befehl pbiviz --create-cert erstellt werden muss. Dieser Befehl ist jedoch bei der aktuellen Version von pbiviz nicht mehr verfügbar.

Nachdem das Zertifikat erstellt wurde, muss es in den Zertifikatsstore importiert werden. Dazu das Zertifikat im Explorer auswählen und im Kontextmenü “PFX installieren” anklicken:
image

Danach wird ein Assistent angezeigt, der euch bei der Installation des Zertifikats unterstützt. Ein Tutorial zur Installation eines Zertifikats für Power BI findet ihr auch unter https://docs.microsoft.com/de-de/power-bi/developer/visuals/custom-visual-develop-tutorial. Während der Installation muss die bei der Erzeugung des Zertifikats angezeigte Passphrase eingegeben werden.

Nach der Installation des Zertifikats könnt ihr dann das neue Visual erstellen, Doch auch dabei gibt es einige Punkte zu beachten:

  • Welches Template soll verwendet werden
  • welche API-Version

image

Sieht man sich das Template-Verzeichnis der PowerBI-visuals-tools genauer an (C:\Users\Administrator\AppData\Roaming\npm\node_modules\powerbi-visuals-tools\templates\visuals) sieht man bspw. allein im API-Bereich 20 verschiedenen Versionen (von v1.0.0 bis aktuell v2.6.0) – wobei man davon ausgehen kann, dass hier mit der Zeit noch weitere dazukommen werden.

image

Das im Ergebnis erstellt Verzeichnis sieht folgendermaßen aus:
image

https://github.com/liprec/vscode-start-pbiviz

image

Nach ein paar kleineren Fehlerkorrekturen im Code und der Speicherung einiger Developer-Informationen ließ sich das Visual erstellen:
image

Anmerkung: es wurden noch keine Änderungen an dem Visual vorgenommen, dass die vorgesehene Aufgabenstellung erfüllt wird.

Das neu erstellte Visual habe ich anschließend in einen Power BI-Bericht (Power BI-Desktop) importiert und bei Verwendung folgenden Installationsaufforderung erhalten:
image

Über den Install-Button ließen sich die R packages installieren –> dies dauerte jedoch mehrere Minuten.

Das Visual präsentiert sich nach dem Hinzufügen eines Wertes mit einer Standardgrafik (die nicht von dem gewählten Wert abhängig ist):image

Dies bedeutet, dass es so ganz ohne Programmierung wohl nicht funktioniert und für diese auf den ersten Blick sehr einfache Aufgabenstellung, doch mit viel Aufwand zu rechnen ist. Deshalb sollte dieser Weg nur dann beschritten werden, wenn man mit den Standard-Visuals oder Visuals vom Marketplace die Anforderungen nicht erfüllen kann.

Für komplexere Visuals empfehle ich euch die Debug-Option für Visuals im Power BI-Portal zu aktivieren. Nur so hat man die Möglichkeit Fehler genauer zu untersuchen:
image

image

Eine ausführliche Beschreibung zum debuggen von Custom Visuals findet ihr unter https://community.powerbi.com/t5/Developer/How-to-Debug-while-developing-Custom-Visuals/td-p/187053

Schlussbemerkung

Wie so oft, führen auch in Power BI viele Wege nach Rom – wenn auch sehr oft nicht auf direktem Weg und manchmal mit viel zusätzlicher Arbeit verbunden. Ich hoffe, ich konnte euch in meinem Beitrag wieder einiges an nützlichen Informationen auf einer unterhaltsamen Weise vermitteln. Wie bereits angemerkt, erhebe ich mit diesem Beitrag keinen Anspruch auf Vollständigkeit (die Welt von Power BI ist unerschöpflich – und manchmal auch unergründlich) und wer andere Ideen für eine Umsetzung dieser Aufgabenstellung hat, darf sich gerne jederzeit bei mir melden.

Anmerkung: Die bei Microsoft für Power BI verantwortliche Produktgruppe hat ein sehr hohes Entwicklungstempo (alle Achtung). Durch dieses hohe Tempo folgt ein Announcement dem Nächsten und so überrascht uns dieses Team fast wöchentlich mit neuen und überarbeiteten Produkten mit neuen und überarbeiteten Features und Usability. Ob dies gut oder schlecht ist, muss wohl jeder für seine Arbeit selbst entscheiden –> ich persönlich fühle mich manchmal damit ein wenig überfordert (und muss meinem Kunden erklären, warum ein Bericht in einer Woche so aussieht und in der nächsten irgendwie anders). Nun steht wieder ein großes Update der Power BI-Plattform bevor, wie auf der Ignite 2019 angekündigt: https://www.moderndata.ai/2019/11/overview-of-ignite-2019/. Lassen wir uns überraschen, was dieses wieder für Änderungen für die Anwender bereithält –> und vielleicht lohnt es sich ja dann, einen neuen Blogpost darüber zu schreiben.

Bericht zum Testen

Der in diesem Beitrag zusammengestellte Power BI-Bericht steht für Euch zum Download unter https://1drv.ms/u/s!Ak6ygB0SA2DXgcgfoaC4zoHe1OnC0Q?e=L2vuX0 zur Verfügung. Doch auch interaktiv lässt sich der Bericht hier ausprobieren:

Über

Die IT-Welt wird immer komplexer und zwischen den einzelnen Komponenten gibt es immer mehr Abhängigkeiten. Nachdem ich durch meine tägliche Arbeit immer wieder vor der Herausforderung stehe, komplexe Probleme zu lösen, möchte ich diese Seite dafür verwenden, Euch den einen oder anderen Tipp zu geben, wenn Ihr vor ähnlichen Aufgabenstellungen steht.

Veröffentlicht in Power BI

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

Follow Sylvio's Infobox on WordPress.com
November 2019
M D M D F S S
 123
45678910
11121314151617
18192021222324
252627282930  
%d Bloggern gefällt das: