CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Dynamische Berichte in relationalen Modellen

Dynamische Berichte, die sich auf Kommando anpassen? Mit dem neuen Release von DeltaMaster kann man in relationalen Modellen noch einfacher Berichte anlegen, die sich sogar während der Präsentation variieren lassen.

Dynamische Berichte in DeltaMaster – welche sind gemeint?

Idee der Anwendung von Zeitanalyseelementen

In unserer BI-Intelligence-Software DeltaMaster gibt es mit dem aktuellen Release 6.3.7.1 neue Möglichkeiten für relationale Anwendungen, Schalter-Dimensionen in der dynamischen Berichtserstellung einzusetzen.

Genauer gesagt wird es hauptsächlich um dynamische Berichte gehen, die benutzerdefinierte Zeitanalyseelemente verwenden. Diese habe ich bereits im Beitrag Selfservice: Eine Frage der Zeitanalyseelemente ausführlich beschrieben.

Hier wurden benutzerdefinierte Zeitanalyseelemente auf vielfältige Weise eingesetzt!

In dieser Grafischen Tabelle werden benutzerdefinierte Zeitanalyseelemente auf vielfältige Weise eingesetzt!

Mittels dieser benutzerdefinierten Zeitanalyseelemente lässt sich beispielsweise – hier etwa ausgehend von einem im Filter eingestellten Monat März 2021 – Bezug nehmen auf den Vorjahresmonat, auf das Maximum eines Zeitraumes der letzten 24 Monate, den durchschnittlichen Wertzuwachs der letzten 4 Jahre nur für diesen Kalendermonat März oder den Wert des übergeordneten 1. Quartals 2021.

Numerische Werte in Zeitanalyseelementen

Die im Beispiel eingesetzten benutzerdefinierten Zeitanalyseelemente sehen folgendermaßen aus:

Definitionen der benutzerdefinierten Zeitanalyseelemente

Definitionen der benutzerdefinierten Zeitanalyseelemente

In diesem Beispiel sind somit sämtliche Varianten vertreten, wie numerische Werte in benutzerdefinierten Zeitanalyseelementen verwendet werden können:

 

  • <offset>: Mit lag(12) gehen wir 12 Monate in der Zeit zurück.
  • <count>: Bei range(24) werden 24 Werte inklusive des aktuellen Monats verwendet.
  • <step>: Zwischen den 4 Werten bei range(4,12) gibt es einen Abstand von jeweils 12 Monaten.
  • <level index>: Das Quartal entspricht hier in der Periodendimension mit ancestor(2) dem 2. Level von oben (0 ist das All-Element, 1 das Jahr).

 

Schalter-Dimensionen ermöglichen dynamische Berichte

Im neuesten Release 6.7.3.1 ist es nun erlaubt, die festen Zahlenwerte in den benutzerdefinierten Zeitanalyseelementen durch Verweise der Form <viewX> auf ausgewählte Berichtsfilterelemente zu ersetzen. Dabei steht X für die interne ID der zugehörigen Dimension.

Die Elementnamen in diesen Dimensionen müssen daher entweder selbst numerisch oder – falls Stringvariablen vorliegen – direkt als Zahl interpretierbar sein. Ein Elementname der Form “12 Monate” ist somit nicht erlaubt, davon unabhängig kann der Ausdruck aber als Aliasname verwendet werden.

Obwohl nicht zwingend verboten, referenzieren wir nicht auf Dimensionen des eigentlichen Datenmodells, sondern im Normalfall auf nicht verwandte Dimensionen (“unrelated dimensions”), also Dimensionen, deren Elemente nicht in der Fakttabelle auftreten.

Es gibt dann keine Überlappungen mit dem eigentlichen Datenmodell, sondern wir benutzen diese Schalter-Dimensionen nur zur Parameterübergabe. Die zugrundeliegenden Tabellen können somit leicht einer bestehenden Anwendung hinzugefügt werden.

Unterschiedliche numerische Werte, die wir in einem Bericht in benutzerdefinierte Zeitanalyseelemente einsetzen wollen, erfordern allerdings auch eigene Dimensionstabellen. Pro Schalter-Dimensionstabelle übergeben wir immer nur genau einen Wert.

Ausdrücke wie lag(12) oder range(4) lassen sich in relationalen Anwendungen seit Release 6.3.1 auch als benutzerdefinierter Ausdruck in Achsendefinitionen verwenden. Zum Beispiel ergibt range(4) die folgende Darstellung:

Dynamische Berichte können auch eine flexible Spaltenachse über einen benutzerdefinierten Ausdruck erhalten.

Flexible Spaltenachse über benutzerdefinierten Ausdruck

Auch hier lässt sich der fixe Wert 4 durch eine Berichtsfilterauswahl der Form <viewX> ersetzen. Diese und weitere Anwendungen, die über reine dynamisierte Zeitanalyseelemente hinausgehen, zeigen wir bei den nun folgenden Beispielanwendungen.

Beispielanwendungen

Flexible Zeitintervalle auf flexibler Ebene

Nehmen wir einmal an, dass wir im Berichtsfilter immer einen einzelnen Monat auswählen. Wir möchten Maximum und Minimum über die letzten Perioden sehen, wollen uns aber noch offenhalten, ob diese auf Monats-, Quartals- oder Jahresebene anzuzeigen sind. Außerdem wünschen wir noch eine flexible Möglichkeit, die Anzahl der Perioden einzustellen.

Wir definieren nun zwei Tabellen – eine enthält eine Auswahl von möglichen Anzahlen der Elemente eines Intervalls, die andere das Level, auf dem agiert wird. Zusätzlich gibt es für die Anzeige sprechende Namen:

Schalter-Dimensions-Tabellen für Anzahl der Perioden und Level

Schalter-Dimensions-Tabellen für Anzahl der Perioden und Level

Wir fügen beide Tabellen den Datenquellen hinzu, jedoch verbinden wir sie nicht mit der Fakttabelle. Im Modellieren-Modus deklarieren wir Level und Anzahl Werte als Dimensionen. Im Dimensionsbrowser entfernen wir jeweils die einelementige All-Ebene, weil in diesem Element ja kein nutzbarer numerischer Parameter hinterlegt ist.

Das Level möge hier die interne ID = 13 besitzen und Anzahl Werte die ID = 14.

Nun legen wir ein Zeitanalyseelement an, das zunächst ausgehend vom eingestellten Monat über ancestor(<view13>) zum ausgewählten, übergeordneten Level springt. Dann berücksichtigen wir mit .range(<view14>) die Anzahl der Werte und schließlich berechnen wir mit .max bzw. .min Maximum und Minimum über den ausgewählten Bereich. Das Zeitanalyseelement für Minimum sieht beispielsweise folgendermaßen aus:

Flexible Definition des Minimums

Der dynamische Bericht im Einsatz

Nun kann im Präsentationsmodus die gewünschte Ebene und die gewünschte Anzahl der Perioden ausgewählt werden:

Ein dynamischer Bericht mit mehreren Auswahlmöglichkeiten

Ein dynamischer Bericht mit mehreren Auswahlmöglichkeiten

Hier zeigen wir in der ersten Spalte noch einmal den ausgewählten Monat an. Die zweite Spalte stellt den Wert des gewünschten Levels (also ancestor(<view13>)) dar, das in der gezeigten Konstellation ebenfalls dem Monat entspricht. Die letzten beiden Spalten liefern uns nun Minimum und Maximum auf den letzten 12 Werten des eingestellten Levels Monat.

Wählen wir nun die letzten 4 Werte und schalten auf Quartale um, passt sich der Bericht dynamisch an:

Dieser dynamische Bericht zeigt nun Minimum und Maximum der letzten 4 Quartale!

Nun berechnet für die letzten 4 Quartale!

Hier erhält der Anwender somit eine höhere Flexibilität bei der Berichtsdarstellung, ohne dass die Modellierung der eigentlichen Daten berührt wurde.

Sichtbarkeit der Schalter-Dimensionen in der Filterleiste

Eine Dimension, die nicht mit der Fakttabelle verbunden ist, wird normalerweise im Präsentationsmodus nicht angezeigt. Da wir jedoch Elemente aus nicht verwandten Dimensionen verwenden möchten, wurde die Neuerung “Berichtsfilter in benutzerdefinierten Zeitanalyseelementen nutzen” von einer flankierenden Maßnahme begleitet:

Wenn ein benutzerdefiniertes Zeitanalyseelement eine Referenz der Form <viewX> verwendet, sehen wir diese Dimension auch im Präsentationsmodus!

Darüber hinaus erscheint eine Dimension auch, wenn der zugehörige <viewX>-Ausdruck in eines der folgenden, im Bericht eingesetzten Konstrukte eingeht:

  • Benutzerdefinierte Analysewerte
  • Berechnete Elemente
  • Benutzerdefinierter Ausdruck für Achse einer Grafischen Tabelle im Falle der Zeitdimension

Schauen wir einmal kurz auf diese anderen Fälle, auch wenn sie nicht zwingend Zeitanalyseelemente mit benutzerdefiniertem Ausdruck verwenden oder benötigen.

Berechnete Elemente

Zum einen können sich berechnete Elemente direkt in der Definition auf <viewX>-Ausdrücke der nicht verwandten Dimensionen beziehen. Das einfachste denkbare berechnete Element mit einem solchen Bezug erwähnt nur den <viewX>-Ausdruck:

Das einfachste berechnete Element

Das einfachste berechnete Element

Das ausgewählte Element wird dann numerisch interpretiert und liefert hier unabhängig von der Kennzahl den eingestellten Wert der Hilfsdimension:

Die Hilfsdimension erscheint in der Filterleiste

Die Hilfsdimension erscheint in der Filterleiste

Im Präsentationsmodus erscheint die Schalter-Dimension und der Zeitraum kann ausgewählt werden. Der hier sichtbare Aliasname ist “12 Monate”, das zugehörige Element heißt aber nur “12”.

Kommen wir zu einem komplexeren Beispiel: Oben hatten wir einen dynamischen Bericht angelegt, der die Ausgabe von Maximum und Minimum über einen frei einstellbaren Zeitraum auf einem frei wählbaren Level ermöglichte.

Wir definieren nun die Differenz der beiden Zeitanalyseelemente Maximum und Minimum als berechnetes Element “Spanne” und ergänzen den bereits erwähnten Bericht um dieses Element:

Zusätzlich wird jetzt auch die Spanne berechnet!

Zusätzlich wird jetzt auch die Spanne berechnet!

Auch wenn wir die inneren Spalten und den <viewX>-Bezug aus den Namen von Minimum und Maximum entfernen und somit <viewX> nicht mehr direkt in der Definition der Spanne, also

auftaucht, sehen wir die Schalter-Dimensionen weiterhin:

Dynamische Berichte - die Schalter-Dimension bleibt auch bei indirekter Referenzierung sichtbar

Schalter-Dimension bleibt auch bei indirekter Referenzierung sichtbar!

Hängt also ein berechnetes Element direkt oder indirekt von <viewX> ab, wird die zugehörige Dimension in der Filterleiste erscheinen. Erst wenn in diesem Bericht die Spanne-Spalte entfernt wird, verschwinden die Schalter-Dimensionen und lassen sich auch nicht wieder durch Klicken auf das kleine Quadrat herbeizaubern.

Dynamische Berichte mit benutzerdefiniertem Ausdruck für die Achse

Anfangs hatten wir schon einmal einen benutzerdefinierten Ausdruck range(4) für die Zeitachse verwendet, bei dem wir die Anzahl der Elemente fest angeben. Ersetzen wir die 4 durch ein <viewX> einer passenden nicht verwandten Hilfsdimension, steht diese Schalter-Dimension im Präsentationsmodus zur Verfügung:

Dynamische Berichte erlauben das Umschalten des Zeitraumes in der Achse

Wir möchten nun 6 anstelle der 3 Monate sehen!

Hier können wir anstelle der 3 Monate zum Beispiel den Zeitraum auf 6 Monate umstellen. Gleichzeitig ist ersichtlich, dass wir zwar recht flexibel den Zeitraum wählen können, aber eben auch nur aus den vorbereiteten Elementen. Folgerichtig können wir die 4 in diesem Beispiel nicht auswählen, bzw. wir müssten die Tabelle der Wahlmöglichkeiten um diesen Fall aufstocken!

Benutzerdefinierte Analysewerte

Legen wir einmal eine Hilfstabelle mit Umrechnungsfaktoren für Währungen an:

Eine Hilfstabelle mit Umrechnungsfaktoren

Eine Hilfstabelle mit Umrechnungsfaktoren

Die numerischen Umrechnungsfaktoren verwenden wir als Dimensionselemente, die Währungsnamen für die Anzeige.

In einem Analysewert Umrechnungsfaktor lesen wir das Element aus:

Umrechnungsfaktor

Umrechnungsfaktor

In einem neuen Analysewert “Umsatz in <view15>” multiplizieren wir Umsatz (in Euro) und Umrechnungsfaktor:

Umsatz in der ausgewählten Währung

Umsatz in der ausgewählten Währung

Wir können nun Beträge nachträglich auch in anderen Währungen anzeigen, obwohl die Datenbank nur Euro vorhält:

Dynamischer Bericht mit Währungsumstellung

Dynamischer Bericht mit Währungsumstellung

Auch im Namen des Analysewerts verwenden wir den <viewX>-Ausdruck, sodass sich der Name ebenfalls anpasst.

Dynamische Berichte mit Analysewerten mit benutzerdefinierten Zeitanalyseelementen

Schließen wir den Kreis, indem wir nun Analysewerte verwenden, die sich auf benutzerdefinierte Zeitanalyseelemente beziehen.

Wir benötigen zunächst einen flexiblen Zeitraum bis zur Vorperiode. Hier eignet sich ein benutzerdefiniertes Zeitanalyseelement mit der Definition lag(1).range(<view7>), wobei in der Dimension mit der ID 7 wieder verschiedene ganzzahlige Werte hinterlegt sind.

Nun legen wir einen Analysewert an, der dieses Zeitanalyseelement verwendet. Hier bietet sich ein Filterwert an, der etwa den Umsatz mit dem Zeitanalyseelement verbindet:

Umsatz auf den letzten Perioden bis zur Vorperiode

Umsatz auf den letzten Perioden bis zur Vorperiode

Diesen Filterwert kann ich jetzt in einer Grafischen Tabelle, aber auch in weiterführenden Analysen verwenden.

Etwa in einer Comparator-Analyse vergleichen wir die Umsatzverteilung auf den vergangenen Monaten bis zum Vormonat mit der Umsatzverteilung des aktuellen Monats.

Hier können wir wieder die Anzahl der Monate in der Zeitraum-Auswahl einstellen.

Im Vergleich zu den vorhergehenden 3 Monaten hat sich relativ gesehen der Umsatz aus der Region Süd mehr in die anderen Regionen verschoben.