Zeitreihenanalysen im täglichen Controlling, rollierende Planungen (rolling budgets) und rollierende Hochrechnungen (rolling forecast) brauchen dynamisch berechnete Intervalle. Abhängig von der Berichtsperiode wählt die Zeitreihenanalyse in DeltaMaster die Intervalle automatisch.
Problemstellung
In der Regel wird in der Zeitreihenanalyse in DeltaMaster ein fester Zeitraum ausgewählt, für den die Werte angezeigt werden. Das ist jedoch eine statische Auswahl und muss bei Änderungswünschen manuell angepasst werden. Es kommt in unserem Produktsupport öfter die Frage auf, ob man die Zeitreihe nicht dynamisch machen könne, zum Beispiel über die vergangenen 12 Monate. Dieser Blogbeitrag soll Antworten liefern und zwar auf genau diese Fragestellung und auch etwas darüber hinaus.
Vorbereitend wird ein neuer Bericht mit einer Zeitreihenanalyse erstellt, in den auf gewohnte Art und Weise eine Kennzahl gezogen wird. Für dieses Beispiel wird die bekannte Chair-Demo verwendet und als Kennzahl wird Umsatz ausgewählt. In Abbildung 1 sieht man das Ergebnis der ersten Schritte. Im unteren Teil des Fensters lassen sich die angezeigten Monate fest einstellen.
Default-Filtereinstellung
Im ersten Schritt auf dem Weg zu einer dynamischen Zeitreihenanalyse wird ein Default-Element im Filterkontext des Berichts gesetzt.
Abbildung 2 zeigt den Weg zum Editor und Abbildung 3 den MDX-Ausdruck, welcher eingetragen werden muss. Für dieses Beispiel soll der aktuelle Monat gesetzt werden:
StrToMember("[Periode].[Periode].[Monat].&["+format(now(),"yyyyMM")+"]")
Dynamische Zeitreihenanalyse mit einer bestimmten Kennzahl
Der nun dynamisch gesetzte Filter hat jedoch keinen Einfluss auf den festgelegten Zeitraum der Zeitreihenanalyse. Um das gewünschte Verhalten zu erreichen wird nun eine Kennzahl angelegt, die nur für die gewünschten Monate Werte enthält (hier: die vergangenen 12 Monate).
In Abbildung 4 wird aus dem Modus Modellieren heraus, ein neuer benutzerdefinierter Analysewert angelegt, mit folgendem MDX-Statement (DimensionID der Periode in unserer Beispielanwendung ist 2):
IIf (count (intersect( .lag(13) : , [Periode].[Periode].CurrentMember)) >0 , #1 , NULL)
Dadurch wird für jeden Monat, der in der Spanne bis .lag(13) liegt, also aktueller Monat bis 13 Perioden in die Vergangenheit, die oben angegebene Kennzahl ausgegeben, für alle anderen ist der Wert NULL.
Mit dieser Kennzahl kann nun eine neue Zeitreihe gebaut werden. Wählt man nun noch im rechten Menü aus, dass Nullwerten abgeschnitten werden sollen, so erhält man das gewünschte Ergebnis.
Wichtig: der Default im Filterkontext wirkt erst beim erneuten Öffnen der Anwendung, daher muss zum Prüfen des Ergebnisses die Anwendung einmal gespeichert, geschlossen und anschließend neu geöffnet werden.
Generalisierung der Kennzahlen
Der oben beschriebene Ansatz beinhaltet das Anlegen einer neuen benutzerdefinierten Kennzahl, um die Zeitreihe dynamisch zu gestalten. Es ist jedoch auch möglich, diesen Schritt von der gewählten Kennzahl unabhängig zu machen, indem man ein berechnetes Element anlegt. Die Schritte hierfür, sind in Abbildung 7 und 8 dargestellt.
Es wird im Modus Modellieren in einer der Hilfsdimensionen, in diesem Beispiel in der Kumulationsdimension, ein neues berechnetes Element mit folgendem MDX-Ausdruck angelegt.
IIf( count( intersect( .lag(13) : , [Periode].[Periode].Currentmember) ) >0 , (Measures.CurrentMember, [Kumulation].[Kumulation].[Kumulation].&[1] ) , NULL)
In welcher Hilfsdimension das Element angelegt wird, ist nicht entscheidend. Es ist darauf zu achten, dass diese Dimension nicht in der Zeitreihe verwendet wird. Falls eine andere Dimension verwendet wird, muss der Ausdruck „[Kumulation].[Kumulation].[Kumulation].&[1]“ entsprechend angepasst werden.
Die feste Kennzahl wurde damit durch das Tupel aus „Measures.CurrentMember“ und dem ersten Element der Kumulation („nicht kumuliert“) ersetzt. Wird dieses neue Element im Bericht, im Filter der Dimension „Kumulation“ ausgewählt, kann nun jede beliebige Kennzahl in den Bericht gezogen werden, um eine dynamische Zeitreihe der vergangenen Monate zu erhalten.
Ergebnis
Im Ergebnis kann man die Unterschiede zwischen der Filterauswahl erkennen. In Abbildung 7 steht der Filter auf August 2020, Abbildung 8 simuliert den Monatswechsel auf September 2020. Der frühste Wert Juli/August 2019 ist zu sehen, durch die „.lag(13)“ Funktion im MDX, sowie der neueste Wert des aktuellen Monats.
Abschließend ist noch auf zwei Besonderheiten hinzuweisen.
- Die statische Auswahl der Monate in der Zeitreihenanalyse muss anfangs vor allem in die Zukunft groß genug gewählt werden, um die Darstellung auch beim Monatswechsel zu gewährleisten. Sollte im Filterkontext ein Monat als Default gesetzt werden, der über die statisch gewählte Anzeige hinausgeht, kann dieser nicht dargestellt werden. Durch das Abschneiden der Nullwerte ist aber immer gewährleistet, dass leere Monate in der Zukunft nicht mit angezeigt werden. Wie in den Abbildungen 7 und 8 erkennbar, haben wir uns für bis zu zwei Jahre in der Zukunft entschieden.
- Zudem darf man sich davon nicht irritieren lassen, dass der entsprechende Default aus dem Filterkontext nicht im Filter der Periodendimension selbst angezeigt wird. Das liegt in der Eigenschaft des Berichts: bei der Zeitreihenanalyse steckt die Periode ja bereits durch die statische Auswahl in der x-Achse. Der Default wird aber trotzdem ausgelesen, nur nicht angezeigt.