Advanced Data Visualization in Power BI
Schon seit längerem bietet Power BI die Möglichkeit mit den Programmiersprachen R und Python Visuals zu erzeugen und darzustellen. Dies ist dann sehr hilfreich, wenn die bestehenden Visualisierungen in Power BI nicht die gewünschte Darstellung erlauben. Durch die grosse Flexibilität der R oder Python Visuals lassen sich auch sehr komplexe Grafiken erstellen. Nachfolgend wird anhand eines einfachen Beispiels erklärt, wie eine Grafik erstellt wird. Grundkenntnisse in der jeweiligen Sprache sind von Vorteil.
Punktwolke mit Funktionsgraphen
Ausgangslage ist eine Punktwolke. Es soll der erwirtschaftete Umsatz mit dem relativen Deckungsbetrag eines Produktes gegenübergestellt werden. Dies kann mit einem Scatterplot dargestellt werden. Die Koordination jedes Punktes sind durch (Umsatz/rel. Deckungsbeitrag) gegeben.
Die obenstehende Grafik hätte auch mit dem Scatter Chart Visual in Power BI erstellt werden können.
Zur besseren Interpretation soll in die Punktwolke jetzt noch eine Kurve gezeichnet werden. Die Kurve soll alle Punkte beinhalten, die den gleichen absoluten Deckungsbeitrag aufweisen. Diese Kurve wird auch als Isoquante bezeichnet. Unten ist nun die Isoquanten-Kurve mit einem Wert von 0.2 Mio. eingezeichnet.
Solch eine Grafik ist standardmässig in Power BI nicht verfügbar. Sie lässt sich aber in R mit Hilfe des weit verbreiteten Package ggplot2 realisieren oder mit der Python Library seaborn.
R’s ggplot2
Um es vorne weg zu nehmen: Das Erstellen eines Visuals in R benötigt ein bisschen Geduld. Da die Gestaltungsmöglichkeiten sehr umfangreich sind, ist die Dokumentation von ggplot2 eine gute Unterstützung (https://ggplot2.tidyverse.org/).
Um ein R Visual in Power BI Desktop nutzen zu können, muss R installiert sein. Ebenfalls von Vorteil ist es, wenn R-Studio oder eine andere IDE für R installiert ist. Denn dann kann der R Code zuerst dort drin entwickelt werden. Zusätzlich bietet Power BI die Möglichkeit, den R Code mit dem Datenset in der IDE zu debuggen.
In unserem Beispiel sind die Felder Umsatz und Deckungsbeitrag vorhanden. Sofern R installiert ist, sollte in den Visuals eine Kachel mit R vorhanden sein. Nachdem diese ausgewählt ist, können die zwei Felder Umsatz und Deckungsbeitrag zu den Values des R Visuals hinzugefügt werden. Man sollte sich noch vergewissern, dass die Felder nicht zusammengefasst werden (da dies bei Measures der Fall ist).
Wenn das R Visual angewählt ist, dann sieht man im unteren Bereich den R script Editor. Dort wird standardmässig ein grüner Code angezeigt. Er gibt an, dass ein Data Frame erstellt wurde mit den zuvor ausgewählten Feldern. Zusätzlich werden allfällige Duplikate entfernt.
Nun ist alles bereit für den Code. Dieser muss eine Grafik als Output liefern.
R code
Dazu laden wir zuerst das Package ggplot2. Danach benennen wir die Felder der Einfachheit halber in x und y um. Jetzt wird ggplot das Datenset sowie das Mapping der Daten zu den Achsen übergeben.
library(ggplot2) colnames(dataset) <- c('x','y') ggplot(dataset,aes(x,y))
Mit diesem Code wird noch nicht viel im Power BI angezeigt. Dazu muss ggplot noch ein geometrisches Objekt übergeben werden, welches dann dargestellt wird. Die Syntax für ggplot ist nach der Idee von Wilkinsons Buch The Grammar of Graphics (2005) aufgebaut. Dabei spielen Layers eine wichtige Rolle. Im Folgenden werden wir die nötigen Layers hinzufügen, um die Punktwolke als Scatterplot zu zeichnen und einen weiteren Layer, der die Isoquantenkurve (einen Funktionsgraphen) zeichnet. Damit die Kurve gezeichnet werden kann, muss zuerst eine Funktion definiert werden.
library(ggplot2) colnames(dataset) <- c('x','y') z <- 0.2 # Isoquante bei 0.2 Deckungsbeitrag iso <- function(x){ return (z/x) } ggplot(dataset,aes(x,y)) + geom_point(size=3,colour='blue') + stat_function(fun=iso,size=2)
Mit diesem Code werden nun alle geometrischen Objekte gezeichnet. Je nach Geschmack kann die Grösse und Farbe angepasst werden. Die Funktion beschreibt eine Hyperbel, die bei kleineren x Werten sehr gross wird. Wird die Funktion im ganzen x-Bereich dargestellt, dann ist die y-Achse sehr stark verkleinert. Daher müssen wir den Definitionsbereich der Funktion ein bisschen einschränken. Dies können wir mit der Option xlim tun. So ist nun der Funktionsgraph auf die Punktwolke optimal abgestimmt.
library(ggplot2) colnames(dataset) <- c('x','y') z <- 0.2 # Isoquante bei 0.2 Deckungsbeitrag iso <- function(x){ return (z/x) } min_x = max(min(dataset$x),z/max(dataset$y)) max_x = max(dataset$x) ggplot(dataset,aes(x,y)) + geom_point(size=3,colour='blue') + stat_function(fun=iso,size=2,xlim=c(min_x,max_x))
Dieser Code wird noch nicht ganz genau die gleiche Ausgabe liefern, wie oben im Bild gezeigt. Es gilt noch Achsenbeschriftungen, Theme und weitere Einstellungen auszutesten. Probieren Sie’s aus!
Python’s seaborn
Heutzutage liegt Python im Trend und was früher mit R implementiert wurde, wird heute in Python geschrieben. Aber gerade was die Visualisierung im statistischen Kontext angeht, ist R nach wie vor die bevorzugte Sprache.
Damit Python im Power BI Desktop verwendet werden kann, ist eine Installation von Python nötig. Hierzu empfiehlt sich die Python-Distribution Anaconda zu verwenden (https://www.anaconda.com/).
Einer der wichtigsten Libraries für Visualisierungen in Python ist Matplotlib. Eine Abstraktionsebene höher (und damit einfacher zu bedienen) ist die populäre seaborn Library (https://seaborn.pydata.org/index.html).
Nachfolgend werden wir seaborn verwenden, um die obengenannte Darstellung zu erstellen.
import seaborn as sns import matplotlib.pyplot as plt import numpy as np dataset.columns = ['x','y'] sns.scatterplot(data=dataset,x='x',y='y') z = 0.2 # Isoquante bei 0.2 Deckungsbeitrag def iso(x): return(z/x) x_range = np.arange(min(dataset.x),max(dataset.x),0.01) x_range = x_range[z/x_range < 0.5] sns.lineplot(x_range,iso(x_range),color="black") plt.show()
Falls bei einem seaborn Befehl nicht angegeben wird, in welche Abbildung gezeichnet werden soll, dann wird alles übereinander in eine einzelne Abbildung gezeichnet. Auch hier können diverse weitere Einstellungen wie z.B. Achsenbeschriftungen oder Theme angepasst werden. Dazu ein kleiner Tipp: Die Seaborn Befehle liefern als Rückgabewert immer das Axes Matplotlib Objekt, welches auch mit Hilfe der Matplotlib Funktionen angepasst werden kann.
Die Flexibilität der Darstellung mit R und Python Visuals in Power BI kennt (fast) keine Grenzen.