Power BI — Covid 19 Statistik

Power BI — Kleines Intro Mit Corona Statistik

Urlaub in Schweden 2020 — eine Frage der Statistik?

Henrik Massow

--

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.

Photo by Jonathan Brinkhorst on Unsplash

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?

Photo by StellrWeb on Unsplash

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.

Statistische Daten EU

Der Link zur benötigten Ressource kann wie folgt beschafft werden.

Link zur API

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:

Daten der schwedischen Statistiker
Adresse der Daten der schwedischen Statistiker

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.

Web-Abfrage Power BI
Adresse EU Statistik
Preview der Daten

Wichtig ist hier, UTF-8 als Zeichencodierung einzustellen und dann auf “Daten transformieren” klicken.

Spalten entfernen

Hier habe ich noch die Spalten ausgedünnt, vieles brauchen wir nicht.

Fast fertig

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.

Daten aus Web-Abfrage
Infektionen der letzten 7 Tage

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.

Neuinfektionen je Einwohner

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.

Dummy Daten erfassen
Dummy Daten erfassen
Ergebnis ist eine MeasureTable

Hier können wir nun ein neues Measure anlegen:

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.

gelöschte Dummy-Daten

Im obigen Bild habe ich nun noch Column1 gelöscht, so dass unsere Measures-Tabelle wirklich nur noch Measures verwaltet.

Neuinfektionen je 100.000

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

Photo by Sharon Pittaway on Unsplash

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.

Measure für kritische Fallzahl

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

Konditionale Hexcodes

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.

dynamisch erzeugte Datumtabelle

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.

Beziehungen

Visualisierungen — Du sollst dir selbst ein Bild machen

Ein Visual anlegen

Daten für das Visual auswählen.

Daten für unser 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!

Datum richtig einstellen

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.

Schweden mit Slicer ausgewählt

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.

Datenschnitt für Datum

Formatierungen-jetzt wird es bunt

Formatieren von Visuals
Farben in die Visuals bringen
noch mehr Farbe
Das Ergebnis mit bedingter Formatierung

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.

Auswertung -sieht nicht gut aus für meinen Urlaub…

Was mit Visuals noch so möglich ist…

Visualisierungen
Visualisierungen

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.

Abfragenvorschau Schweden
Ergebnis der 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.

Neue Tabelle aus Schweden-Daten

Jetzt wieder einige berechnete Spalten erstellen, das Spiel ist ähnlich wie oben und verwendet die gleichen Measures.

Neunfektionen letzte 7 Tage
Neuinfektionen je Einwohner
Neuinfektionen je 100.000 Einwohner

Natürlich stellen wir auch hier schnell wieder eine Verknüpfung zu unserer Datums-Tabelle her:

Verknüpfungen

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.

Duplizieren

Und hier haben wir das Ergebnis:

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:

Daten für Schweden im Vergleich — von EU erhoben gelb — von schwedischer Behörde lila

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.

Italien im Vergleich

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.

--

--