Donnerstag, 29. Januar 2015

Entpivotieren von Daten mit mehrschichtigen Spaltenüberschriften

Wenn man sich mit der Analyse und/ oder Aufbereitung von Daten und einem anschließenden Reporting beschäftigt, dann ist man in den meisten Fällen nicht der Erzeuger der Daten, sondern bekommt diese zugeliefert bzw. zieht sie aus einem bestehenden System (bspw. Hyperion Essbase, SAP BW etc.) ab. Dabei hängt der Aufwand, der mit der Weiterverarbeitung dieser Daten in Verbindung steht, stark von deren Struktur ab.
Der Wunschzustand ist eine Tabelle, wie sie in Abbildung 1 zu sehen ist. Die Daten liegen Spaltenweise (in Datensatzform) vor, und haben Überschriften.


Abbildung 1: Der Idealzustand für die Weiterverarbeitung von Daten: Eine flache Tabelle






Ausgehend von diesen Daten können weiterführende Analysen vorgenommen werden. Beispielsweise wäre es hier möglich eine Pivottabelle auf diese Daten zu setzen und über Slicing, Dicing, Drill-Through und Drill-Down auf die Suche nach Abweichungen, zusammenhängen und dergleichen zu gehen.


Kreuztabellen mit einschichtige Spaltenüberschriften 


Leider werden die Daten nicht immer in diesem Idealzustand geliefert. Häufig liegt eine Matrix vor, wie sie in Abbildung 2 zu sehen ist.


Abbildung 2: Matrix mit einschichtiger Spaltenbeschriftung
Hier liegt eine Kreuztabelle vor, die das Jahr (rot hervorgehoben), in die horizontale aufspannt und als Spaltenbeschriftung nutzt. Dies kann für Berichte sinnvoll sein, weil es die Lesbarkeit verbessert, ist jedoch für weiterführende Analysen extrem hinderlich.
Um Daten dieser Struktur in eine Form zu bringen, wie sie in Abbildung 1 dargestellt ist, bietet Power Query eine tolle Funktionalität, die sich in der deutschen Version im Reiter Transformieren hinter Spalten entpivotieren verbirgt. Wie dies inhaltlich funktioniert ist im Video-Tutorial von Excel MVP Ken Puls bestens beschrieben (Link). 


Kreuztabellen mit zweischichtige Spaltenüberschriften 


Schwieriger wird es jedoch, wenn man eine Matrize erhält, die nicht eine, sondern zwei Spaltenüberschriften hat. Abbildung 3 zeigt ein Beispiel.

Abbildung 3. Matrix mit zweischichtiger Spaltenbeschriftung

Um eine solche Struktur dahingehend zu transformieren, dass ein Aufbau wie in Abbildung 1 erreicht wird, bedarf es schon einiger Tricks. Auch dies ist mit Power Query machbar und wird in einem  - nach meinem Geschmack – sehr guten Post erläutert (Link). Hierbei reicht die reine Nutzung der GUI von Power Query leider nicht mehr aus, sondern es wird vertieft mit M gearbeitet.
So weit, so gut. Was ist jedoch mit Matrizen, die mehr als zwei Spaltenüberschriften aufweisen?

Kreuztabellen mit mehrschichtigen Spaltenüberschriften 


Nach meinem Kenntnisstand ist Power Query nicht in der Lage Datenstrukturen, wie von mir gewünscht, zu transformieren, sofern diese mehr als zwei Spaltenüberschriften aufweisen. Innerhalb von Excel kenne ich keinen weiteren Lösungsansatz für diese Problematik, so dass ich mir eine eigene Lösung gebaut habe: Mit VBA.
Ausgangspunkt ist eine Datenstruktur, wie sie in Abbildung 4 dargestellt ist.

Abbildung 4: Matrix mit mehrschichtiger Spaltenbeschriftung

Das folgende Video zeigt die Nutzung meines Programms.


Die Beispieldatei, inklusive VBA-Skript, könnt Ihr hier herunter laden: Download

Viel Spaß damit und bis zum nächsten Mal,
Lars