Power BI — Covid 19 Statistik
Power BI — Kleines Intro Mit Corona Statistik
Urlaub in Schweden 2020 — eine Frage der Statistik?
Mache ich dieses Jahr Urlaub in Schweden? Nun, dieses Jahr wird das wohl eine Frage der Covid 19 Statistik werden. Denn anders als die meisten europäischen Länder hat Schweden in Sachen Covid 19/Corona keinen Lock-Down gewählt, sondern versucht eine sog. Herdenimmunität aufzubauen.
Diese politische/epidemiologische Entscheidungen sollen für diesen Artikel aber unerheblich sein. Ich will lediglich an den zu Schweden veröffentlichten Zahlen eine kleine Einführung in Power BI Desktop geben und zeigen, wie einfach mit diesen Tool eigene statistische Auswertungen erstellt werden können.
Was wollen wir auswerten?
Aktuell (Juni 2020) haben sich die Länder der EU darauf verständigt, gegenseitig Reisewarnungen aufzuheben. Reisewarnungen bleiben jedoch bestehen bzw. werden neu ausgesprochen, wenn in einem Land pro 100.000 Einwohner in den letzten sieben Tagen mehr als 50 Neuinfektionen gemeldet werden.
Da nun auch mein Sommerurlaub näher rückt, habe ich daher mal angefangen eine Statistik in Power BI zu bauen, die genau die obige Konstellation auswertet — wenngleich meine Statistik letztlich irrelevant ist. 🤣
Datenquellen
Im Netz hatte ich bisher nur Excel-Auswertungen hierzu gefunden, bei denen der Autor mühsam die Tages-Statistiken manuell zusammengesucht 😢 hat. Das Problem dabei ist, dass nicht immer nur ein neuer Tag hinzu kommt, sondern Nachmeldungen auch bereits erfasste Tage ändern können. Außerdem möchte ich neben Schweden auch weitere Länder auswerten. Zeit also für Automatisierung, Zeit für die Suche nach geeigneten Datenquellen.
EU
Für die EU gibt es die entscheidende Datenquelle hier.
Der Link zur benötigten Ressource kann wie folgt beschafft werden.
Wir merken uns also https://opendata.ecdc.europa.eu/covid19/casedistribution/csv, um hieraus gleich eine Web-Abfrage in Power BI zu bauen.
Daten aus Schweden
Die Daten der EU beinhalten natürlich auch Schweden, da mich Schweden angesichts meiner Urlaubspläne und des schwedischen Sonderweges wegen aber besonders interessiert, werde ich eine zweite Abfrage erstellen, die Daten direkt von den schwedischen Behörden bezieht.
Mal sehen ob es signifikante Differenzen gibt???
Hierzu habe ich in Google “Sjukdomsfall per dag JSON” eingegeben, was (nach meinen rudimentären schwedischen Kenntnissen) wohl etwas wie “Krankheitsfälle pro Tag JSON” heißen sollte und als Ziel hatte, eine JSON-Datei zu bekommen mit eben diesen Daten zu bekommen. Ich hatte den Begriff “Sjukdomsfall per dag” mal in einem Artikel auf einer schwedischen Seite gefunden — man muss also manchmal ein wenig suchen.
Fündig geworden bin ich dann hier, die richtigen Daten finden wir dort wie folgt:
Die Adresse für unsere spätere Abfrage lautet dann: https://free.entryscape.com/store/360/resource/15
Power BI
Abfragen aus dem Web
Um die Daten aus dem Web in Power BI zu bekommen brauchen wir jeweils eine Abfrage. Hierzu bin ich wie folgt vorgegangen.
Wichtig ist hier, UTF-8 als Zeichencodierung einzustellen und dann auf “Daten transformieren” klicken.
Hier habe ich noch die Spalten ausgedünnt, vieles brauchen wir nicht.
Unsere Daten sind damit schon ausreichend aufbereitet und wir können mit den Berechnungen starten. Wie man sieht, haben wir hier nicht nur Schweden, sondern auch viele andere Länder.
Im obigen Bild habe ich die Infektionen der letzten 7 Tage als berechnete Spalte ermittelt. Es gibt sicher viele Wege zum Ziel, ein intelligenter Einsatz von Measures mag möglicherweise sogar eleganter sein. Aber für unsere Zwecke und zum Hausgebrauch taugt diese Art und Weise allemal.
Was in der Formel passiert ist schnell erklärt.
Grundsätzlich greift Power BI bei berechneten Spalten immer nur auf die aktuelle Spalte zu. Es können also nur die jeweiligen Werte der aktuellen Zeile /des aktuellen Datensatzes in die Berechnung einbezogen werden.
Wir wollen hier aber die Werte der letzten 7 Tage für das jeweilige Land haben, brauchen also Zugriff auf andere Zeilen (in der Sprache von Power BI: Wir brauchen einen anderen Kontext). Hierbei hilft die Funktion Calculate
weiter.
Die Funktion führt eine Berechnung über alle Zeilen aus, die auf Basis eines Filters gefunden werden.
Die Berechnung die hier ausgeführt werden soll heißt Sum([Neuinfektionen])
und bildet demnach die Summe aller Felder “Neuinfektionen”, die unser Filter ausgesiebt hat. Der Vorteil ist, wir müssen hier keine besondere Sortierung unserer Zeilen erzwingen oder irgendwelche Formeln — wie in Excel — kopieren. Die Funktion Calculate
geht einfach in jede Zeile, filtert dann alle Zeilen nach dem eingegebenen Filter und führt schließlich die FunktionSum([Neuinfektionen])
aus.
Der Filter darf natürlich nicht starr sein, sondern muss dynamisch sein. Dazu nutze ich hier die Filter()
Funktion. Konkret Filtere ich für jede Zeile in der ganzen Tabelle nach allen Datensätzen, bei denen das Land dem Land der jeweiligen Zeile entspricht und das Datum in den letzten 7 Tagen liegt.
Auch hier bin ich sicher, dass es noch elegantere Lösungen gibt. Dennoch bekommen wir auf dieser Basis ohne Probleme unsere berechnete Spalte, die wir wiederum für weitere Berechnungsschritte nutzen können.
Oben haben ich die Neuinfektionen durch die Einwohnerzahl geteilt. Hierzu gibt es die grandiose Funktion “Divide”, die das alte “Division durch 0 Problem” in Excel dadurch löst, dass sie die Eingabe eines “Fall-Back-Werts” erlaubt.
In Excel hätte dies zu einer Wenn-Dann-Funktionen geführt:
Wenn(Einwohner = 0;0;Infektionen / Einwohner)
Measures Organisieren
Measures gehören zu den leistungsstärksten Features von Power BI. Sie sind ein wenig wie berechnete Spalten, nur dass sie viel dynamischer verwendet werden können.
An dieser Stelle will ich Measures als globale Konstanten missbrauchen. Dazu organisiere ich die Measures zunächst der Übersichtlichkeit halber in einer extra Tabelle. Dies geht wie folgt.
Hier können wir nun ein neues Measure anlegen:
Das Measure ist relevante Menge
und bekommt hier den fixen Wert 100.000, damit kann ich später darauf reagieren, falls die Regierungen eine andere Referenzmenge definieren sollen, also nicht mehr pro 100.000 Einwohner gerechnet werden sollte. Wir hätten sonst kein Measure gebraucht, sondern hätten 100.000 auch fest verformeln können, das Measure dient also der Wartbarkeit der Anwendung.
Im obigen Bild habe ich nun noch Column1 gelöscht, so dass unsere Measures-Tabelle wirklich nur noch Measures verwaltet.
In unser Datentabelle haben wir nun auch Zugriff auf das Measure und können die Neuinfektionen je 100.000 (oder was immer wir in dem Measure für einen Wert erfasst haben) berechnen.
Im Grunde war das schon alles! Wir haben nun die relevante Größe für eine Reisewarnung.
Bring Farbe in deine Daten — Konditionale Formatierung
Ich will später in den Visuals farblich hervorheben, ob wir über, unter oder nahe der kritischen Grenze von 50 Neuinfektionen sind.
Als Measure erfasse ich daher noch die kritische Fallzahl von 50. Als Measure deshalb, um — sollte diese Grenze mal angepasst werden — diesen Werte später leicht ändern zu können.
In einer berechneten Spalte lege ich dann einen Farbwert als Hexcode fest.
0–40 Neuinfektionen = grün
40–50 Neuinfektionen = gelb/orange
>50 Neuinfektionen = rot
Datumstabelle
Für Zeitreihen ist es meistens eine gute Idee eine separate Datumstabelle zu haben. Diese können wir als neue Tabelle mit folgender Formel dynamisch aus unseren Daten herleiten lassen.
Beziehungen
Power BI lebt von den Beziehungen unserer Daten zueinander. Daher erstelle ich noch eine Verknüpfung zwischen der neuen Datumstabelle und den Daten aus unser EU-Statistik.
Visualisierungen — Du sollst dir selbst ein Bild machen
Daten für das Visual auswählen.
Hinweis: Wichtig ist hier, beim Datum die richtige Einstellung zu wählen, sonst (Datumshierachie) versucht Power BI nach Monaten, Jahen etc. zu gruppieren. Dies ist oft ein cooles Feature, hier aber gerade nicht!
Filetieren — Slices to the Rescue
Bis hier hin addiert Power BI nun leider die Neuinfektionen der letzten 7 Tage auf 100.000 Einwohner aller Länder und gibt sie tagesweise aus. Das ist nicht das was wir wollten.
Wäre es nicht schön, wenn wir ein Land auswählen könnten? O.K. das machen wir. Hierzu legen wir ein zweites Visual an und machen daraus einen Datenschnitt/Slicer.
Wäre es nicht auch schön, wenn wir das Datum eingrenzen könnten? O.K. auch das machen wir. Hierzu legen wir ein zweites Visual an und machen daraus ebenfalls einen Datenschnitt/Slicer.
Formatierungen-jetzt wird es bunt
Das Coole ist jetzt: Wir brauchen jeden Tag nur auch auf Aktualisieren klicken und bekommen immer die aktuellen Werte. Außerdem ist unser Kreativität in Sachen Farben keine Grenzen gesetzt. Für Schweden hier mal das Gelb und Blau der schwedischen Flagge.
Was mit Visuals noch so möglich ist…
Schwedische Daten
Vertrauen ist gut — Kontrolle ist besser
O.K. jetzt können wir uns noch für Schweden die Daten der schwedischen Behörden ziehen. Dazu erstellen wir eine neue Abfrage.
Um die wichtigsten Daten hieraus zu isolieren, erstelle ich eine neue Tabelle. Hierzu verwende ich die Funktion SELECTCOLUMNS
um mir das Datum und die Neuinfektionen auszuwählen.
Ich hätte auch bereits in der Abfrage nicht benötigte Spalten entfernen können, allerdings will ich eventuell noch mal eine Auswertung nach Regionen machen, daher habe ich die Original-Daten weitgehend übernommen.
Jetzt wieder einige berechnete Spalten erstellen, das Spiel ist ähnlich wie oben und verwendet die gleichen Measures.
Natürlich stellen wir auch hier schnell wieder eine Verknüpfung zu unserer Datums-Tabelle her:
Visuals wiederverwenden
Um das schon mal erstellte Visual zu verwenden, habe ich die Seite mit dem Visual einfach dupliziert und dann die Datenfelder und Slices ein wenig angepasst.
Und hier haben wir das Ergebnis:
Die Daten der EU und der schwedischen Behörden weichen übrigens voneinander ab, allerdings ergibt sich dennoch keine wesentlich andere Aussage: es sieht verdammt “rot” aus.
Aber natürlich können wir den Vergleich auch visualisieren. Hier hilft wieder das Duplizieren des alten Schweden-Visuals und das Hinzufügen der EU-Werte und eines Datenschnitts für die Länderauswahl. And here it is:
Ebenso schnell können wir den Diagrammtyp ändern um uns den kritischen Wert als zusätzliche Linie anzeigen zu lassen. Hier mal mit Italien als Beispiel.
Fazit
Schwedenurlaub 2020 — still not sure!
Power BI Desktop — Cooles Tool, gelle?
Ausblick
Wenn ich Zeit habe, gibt es vielleicht noch mal eine Anleitung die stärker auf Measures basiert und die Macht von Power BI noch deutlicher macht.