Suchen...
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Aktuelle Berichte mit Today

Today – unter Einsatz dieses kurzen, aber mächtigen Befehls sehen Sie Berichte in DeltaMaster immer auf dem neuesten Stand. Wie und wo Sie Today einsetzen können, erfahren Sie im Blog!

Today – neu im Release

Die Kennzahlen in einem Bericht werden immer einem bestimmten Zeitraum oder Zeitpunkt zugeordnet. Unsere Business-Intelligence-Software DeltaMaster hat im aktuellen und im letzten Release drei interessante und sehr nützliche Neuerungen erhalten, die die automatische Anpassung der Berichte über das aktuelle Rechner-Datum in einer einfachen und dennoch flexiblen Weise ermöglichen. So viel vorneweg: Alle drei Neuerungen haben mit dem neuen Ausdruck Today zu tun.

Demonstrieren werde ich diese neuen Features anhand von Daten über die Befüllung der Gasspeicher in Deutschland: Durch den Ukraine-Krieg hat speziell die Sicherheit der Versorgung stark gelitten.

Aktueller Bericht am 21.7.2022 über die Gasspeichersituation in Deutschland

Aktueller Bericht am 21.7.2022 über die Gasspeichersituation in Deutschland

Die Daten stammen von der AGSI (Aggregated Gas Storage Inventory). Obwohl europaweite Daten vorliegen, habe ich mich auf Deutschland beschränkt. Da die Aufbereitung der detaillierten Daten nach den einzelnen Energieversorgern einen recht hohen Aufwand verursacht hätte, begnüge ich mich mit dem Gesamtwert Deutschlands.

Hier soll nämlich nicht die Analyse der Daten im Vordergrund stehen, sondern die Antwort auf die Frage, wie ein Bericht möglichst pflegeleicht angelegt werden kann und trotzdem immer einen vom aktuellen Datum abhängigen Stand anzeigt. Im Optimalfall müssen wir an einem solchermaßen angelegten Bericht nie mehr etwas ändern.

Wir reden hier nicht über die Bereitstellung der Daten. Im Hintergrund halten wir die Datenbank immer so aktuell wie möglich. Allerdings werden die Daten von AGSI nicht tagesaktuell, sondern verzögert geliefert. Im gezeigten Screenshot haben wir uns am 21.7.2022 (Donnerstag) zu Bürozeiten (8 – 17 Uhr) den Bericht angeschaut.

In diesem Zeitraum zeigt die Webseite von AGSI immer die verfügbaren Werte bis zum Vorvortag. Wir gehen nun für unsere Zwecke immer von diesem festen Versatz von 2 Tagen aus. Weiterhin lassen wir uns in diesem Blogbeitrag nicht davon stören, dass der “Gas day” von 5 Uhr morgens bis um 5 Uhr morgens am Folgetag dauert (bzw. 4 Uhr während der Sommerzeit).

Erläuterungen zu den Kennzahlen bei der Gasspeicherung

Im Bericht sehen wir Kennzahlen zur Gasspeicherung. Es ist zwar zum Verständnis der Funktionsweise von Today nicht erforderlich, aber nichtsdestotrotz folgen nun ein paar Erläuterungen zur Bedeutung der Variablen.

Die Gasspeicher dienen als Puffer und Reserve zur Befriedigung von Nachfragespitzen.

Zunächst haben wir hier die momentan verfügbare Energiemenge “Gas in storage”, die bei einer sich nur wenig ändernden effektiv nutzbaren Kapazität “Working gas volume” einen aktuellen Füllstand “Full” in Prozent ergibt.

Dann folgen mit “Injection” die Befüllung und mit “Withdrawal” die Entnahme an diesem Tag. Diese Werte sind nach oben durch “Injection capacity” bzw. “Withdrawal Capacity” gedeckelt.

Consumption ist der gesamte Gasverbrauch Deutschlands im Jahr 2020. Nähere Details zum Verlauf über das Jahr sind nicht gegeben. Bei der Bundesnetzagentur gäbe es immerhin noch monatliche Daten.

Nimmt man die monatlichen Verbräuche des Vorjahres zum Maßstab, reicht der momentane Bestand von 158 TWh für vier Sommermonate, aber nur für etwas mehr als einen Wintermonat. Der Großteil der Gaslieferungen landet erst gar nicht in einem Speicher. Deshalb ist zum Beispiel die Gesamtentnahme in 2020 mit 141 Twh deutlich kleiner als der Gesamtverbrauch von 995 Twh.

Da die Größen Consumption, “Injection capacity”, “Withdrawal Capacity” und “Working gas volume” konstant bzw. nahezu konstant sind, haben wir die Sparklines weggelassen. Der Verlauf des Füllstandes in Prozent sieht aus diesem Grund so aus wie “Gas in storage” und die Anzeige der Sparklines wurde ebenfalls unterdrückt.

Mit Today immer auf dem richtigen Stand

Hätten wir uns obigen Bericht einen Tag früher am 20.7.2022 angeschaut, so hätten wir mit unveränderten Berichtseinstellungen das folgende Bild gesehen:

Aktueller Bericht am 20.7.2022 über den Gasspeicherstand in Deutschland

Aktueller Bericht am 20.7.2022 über den Gasspeicherstand in Deutschland

Für die Verteilung von Sitzungen an Berichtsempfänger bedeutet dies, dass diese nur einmal stattfinden muss, solange kein neuer Bericht enthalten ist oder ein geänderter Berichtsaufbau vorliegt! Öffnet der Empfänger an einem bestimmten Tag die Sitzung, ist das Datum immer passend auf den Vorvortag eingestellt.

Die Dynamik der Überschrift des Berichts habe ich durch Einsatz der Ausdrücke {cp} (Current Period) und {np2} (Next Period 2) erreicht.

Magic Button Aktuell

Im Screenshot ist im Editiermodus der Aktuell-Button aktiviert und mit diesem Magic Button ist auch die neue Funktionalität verknüpft. Im Modellieren-Menu, Bereich Logik, können wir sehr flexibel festlegen, welche Verbindung von Aktuell mit dem Datum vorliegen soll. Setzen wir zum Beispiel eine virtuelle Zeitdimension mit Zwischenebenen Quartalen und Monaten zusätzlich zu den Tagen ein, können wir uns auf den aktuellen Monat oder den Vormonat beziehen:

Auf was soll sich Aktuell beziehen?

Auf was soll sich “Aktuell” beziehen?

Bei den Vorschlägen berücksichtigt DeltaMaster sowohl das Rechnerdatum, schaut aber gleichzeitig auch nach, ob in der Datenbank die notwendigen Periodenelemente überhaupt vorliegen. Ginge die Datenbank nur bis Juni 2022, würde DeltaMaster auch im Juli für “aktuelle Periode” den Juni vorschlagen.

Unter dem Punkt “auswählen” ließe sich ein Tag, Monat, Quartal oder auch Jahr unabhängig vom Rechnerdatum fix auswählen.

Wir konzentrieren uns nun auf den Punkt “definieren”, bei dem wir auch Ausdrücke hinterlegen können, die Today benutzen.

Aktuelle Periode definieren

In der oben gezeigten Grafischen Tabelle hatten wir eine virtuelle Zeitdimension mit Wochen eingesetzt, also mit den drei Ebenen Jahr, Wochen und Tag.

Zunächst schauen wir auf den Grundbefehl “today”, der aus dem Rechnerdatum den aktuellen Tag ermittelt und das passende Element aus der Zeitdimension zuweist. Mit diesem Befehl ist es nun nicht mehr nötig, Befehle wie “Now()” oder “Getdate()” einzusetzen. Auch die anschließenden Stringmanipulationen mit Substring, um aus dem Systemdatum ein Element der Zeitdimension zu konstruieren, ersparen wir uns ebenfalls.

Der einfache Ausdruck “today” nimmt uns freundlicherweise diese Arbeit ab! Zwischen Groß-und Kleinschreibung wird nicht unterschieden, sowohl Today, TODAY als auch toDAY funktionieren gleichermaßen.

Nehmen wir an, dass wir am 21.7.2022 auf die Daten schauen und bei der Modellierung der Zeitachse in der Schnelle bisher nur die Tage mit tatsächlich vorhandenen Werten berücksichtigt haben.

Today läuft noch ins Leere

Today läuft noch ins Leere

DeltaMaster zeigt eine Vorschau: Today ergäbe den Tag 21.07.2022, aber dieses Element ist nicht im Modell vorhanden. DeltaMaster beschwert sich aber nicht – auch nicht bei noch fehlenden Werten! -, wenn wir die Zeitachse bei der Modellierung für die Ausgabe von Prognosen beispielsweise bis zum Jahresende 2022 vorhalten.

Da wir nun aber wissen, dass die Datenlieferung immer 2 Tage hinterherhinkt, können wir uns durch Anfügen von “.lag(2)” auf den Vorvortag und somit im vorliegenden Fall auf den 19.07.2022 beziehen:

Today.lag(2) zeigt auf den jüngsten Tag mit Daten

Today.lag(2) zeigt auf den jüngsten Tag mit Daten

Modell ohne Tage

In unserem Modell sind die Tage enthalten. Es existieren auch Konstellationen, bei denen Tage nicht im Modell enthalten sind, sondern nur Monate.

Auch hier kann man sich mit today.month auf den aktuellen Monat beziehen:

Hauptsache, der benutzerdefinierte Ausdruck referenziert ein vorhandenes Element

Hauptsache, der benutzerdefinierte Ausdruck referenziert ein vorhandenes Element

Zwar enthält unser Modell in diesem Beispiel keine Tage, nichtsdestotrotz führt der benutzerdefinierte Ausdruck “today.month” dynamisch zum aktuellen Monat und somit zum vorhandenen Element “Juli 2022”.

Ausgehend von diesem Monat sind wieder weiterverweisende Ergänzungen möglich: today.month.lag(1) ergibt den letzten garantiert vollständigen Monat (Juni 2022) und today.month.lag(1).quarter zeigt auf das dazugehörige Quartal Q2/2022.

Es sind solche Konstruktionen möglich, wie sie auch in den Beiträgen Startelemente für Sparklines und Benutzerdefinierte Ausdrücke in Zeitachsen und Zeitanalyseelementen beschrieben wurden. Der Unterschied: Dort bezog man sich auf das ausgewählte Periodenelement im Berichtsfilter (referenziert mit “current”), hier verwendet man das passende Element zum heutigen Datum (“today”).

Today universell einsetzbar

Übrigens ist today ein universeller Befehl, der sowohl auf relationalen Modellen als auch auf Cubes funktioniert. Sie müssen nur die Version 6.4.4 oder später verwenden. Sie sollten eine mit 6.4.4 erstellte Sitzung nicht mehr mit einer älteren Version im Logikmodus öffnen und speichern – die Aktuelle-Periode-Einstellung geht dann verloren.

Pro Sitzung kann nur ein Aktuelle-Periode-Ausdruck angegeben werden, aber ausgehend von diesem Ausdruck lassen sich zum Beispiel auch vom Tageslevel abweichende Berechnungen durchführen.

Gut zu wissen ist auch, dass der Befehl today nicht nur auf regulären Hierarchien, sondern auch auf virtuellen Hierarchien funktioniert.

Stand am Wochenende

Kehren wir zurück zu den Gasspeicherdaten.

Die Woche weist einen typischen Verlauf mit höheren Nettozuwächsen am Wochenende aus. Für die folgende Tabelle, die ja an einem Tag verankert ist, wollen wir auch jeweils die Werte des letzten vorhandenen Sonntags errechnen und anzeigen. Ab Dienstag können wir uns auf diesen Sonntag beziehen und erst wenn der nächste Dienstag erreicht ist, springen wir zum Folgesonntag.

Dazu legen wir in unserem relationalen Modell einen benutzerdefinierten Ausdruck für ein Zeitanalyseelement an. Dieser lautet: current.lag(6).week.children.last. Eine Woche geht immer von Montag bis Sonntag. Nur wenn current ein Sonntag ist, bleibt man mit lag(6) in derselben Woche. In den anderen Fällen springt man mit current.lag(6).week zur Vorwoche. children.last sorgt dann dafür, dass von den Tagen der ausgewählten Woche der letzte, also der Sonntag gewählt wird.

Anstelle von children.last lässt sich auch lastchild verwenden.

Letzter Sonntag

Letzter Sonntag

Der in der Editieransicht aktivierte Aktuell-Button sorgt dafür, dass am 21.7.2022 im Berichtsfilter der Tag 19.7.2022 eingestellt ist. Mit current lässt sich dieser auslesen und die genannte Konstruktion zeigt nun den Wert vom 17.7.2022, dem letzten Sonntag.

Im vorliegenden Fall werden bei den Sparklines immer die letzten 28 Tage angezeigt. Wenn es Sie stört, dass die erste Woche unvollständig ist, können wir im Sparklines-Tab der Optionen der Grafischen Tabelle mit einem benutzerdefinierten Ausdruck Current.lag(27).week.children.first das Startelement der Sparklines auf den Montag der unvollständigen Woche legen:

Vier vollständige Wochen und die angebrochene Woche

Vier vollständige Wochen und die angebrochene Woche

Befinden wir uns mit today.lag(2) auf einem Sonntag, werden vier vollständige Wochen angezeigt.

Today in der Defaultauswahl

Eine zweite Anwendung von “today” ergibt sich in der Defaultauswahl. In DeltaMaster lassen sich in den Berichtseigenschaften eines Berichts vorausgewählte Elemente für jede Dimension festlegen. Diese können wir auch dynamisch anlegen. Dies geschieht entweder per MDX oder wie hier auf dem verwendeten relationalen Modell über eine SQL-Abfrage.

Für die Zeitdimension ergeben sich nun mit einem einfach anzulegenden benutzerdefinierten Ausdruck mit today leichter zu verwirklichende Aktualisierungen:

Bericht fix auf Daten vom 14.7.2022 gespeichert

Bericht fix auf Daten vom 14.7.2022 gespeichert

Im vorliegenden Bericht ist der Aktuell-Button inaktiv. Wir haben den Bericht am 16.7.2022 fix mit den zur Verfügung stehenden Daten bis zum 14.7.2022 gespeichert. Normalerweise würde dieser Bericht nun ständig diese Daten vom 14.7.2022 zeigen, unabhängig davon, an welchem Tag wir den Bericht öffnen und anschauen.

Nun definieren wir aber eine dynamische Default-Auswahl auf der Zeitdimension, wieder mit today.lag(2).

Damit die Default-Auswahl greift, müssen zwei Dinge erfüllt sein:

  • Die Sitzung muss ohne Datenwerte gespeichert werden (einstellbar unter Optionen/Allgemein).
  • Die zugehörige Datenbank muss die gewünschte Periode enthalten.

Der erste Punkt folgt der Logik, dass Werte mit Absicht gespeichert werden. Warum sollte man – mit möglicherweise anderen Dimensionselementen – Werte berechnen und speichern und damit die Sitzung vergrößern, wenn diese Werte beim Anklicken des Berichtes gar nicht angezeigt werden sollen?

Wird nun die Sitzung beispielweise am 21.7.2022 geöffnet, sind alle Berichte außer dem Startbericht noch unberechnet. Dies lässt sich am Hellgrau der Berichtsnamen erkennen:

Trotz Einsatzes von today ist der Bericht volle Wochen noch nicht berechnet

Bericht volle Wochen noch nicht berechnet

Klickt man nun den Bericht “volle Wochen” an, wird mit der Defaultauswahl der Bericht neu berechnet:

Am 21.7.2022 werden die Daten vom 19.7.2022 angezeigt

Die Überschrift des Berichts war hier zu Demonstrationszwecken ohne dynamische Platzhalter fest angelegt und deshalb ändert sie sich nicht.

Today im Publisher

Schließlich sei noch die dritte Möglichkeit erwähnt, auch im Publisher im Berichtsupdate benutzerdefinierte Ausdrücke einzusetzen:

Berichtsupdate mit Today und Jobausführung am 25.7.2022

Mit today.lag(8).week.children.last wird dem Publisher mitgeteilt, dass der Tag auf den letzten Sonntag mit vorhandenen Daten eingestellt wird. Wieso lag(8)? An einem Dienstag liegen die Daten bis zum Sonntag vor zwei Tagen vor. Mit lag(8) springt man zum Montag der Vorwoche, die zugehörige Woche geht von diesem Montag bis zu dem Sonntag, dessen Daten bereits vorliegen.

An einem Montag sind die Daten vom Vortags-Sonntag noch nicht da. Mit lag(8) springt man zum Sonntag der Vorwoche, dessen Daten bekannt sind. Dieser Sonntag ist gleichzeitig das letzte Kindelement der zugehörigen Woche.

Wird somit der Job am Montag, dem 25.7.2022 ausgeführt, zeigt der “volle-Wochen”-Bericht nun die letzten vier vorliegenden vollständigen Wochen von jeweils Montag bis Sonntag:

Der Bericht zeigt nun die letzten 4 vollständigen Wochen

Der Bericht zeigt nun die letzten 4 vollständigen Wochen

Muster für technische Elementnamen

Wir haben hier immer eine virtuelle Zeitdimension verwendet. DeltaMaster kennt dann die technischen Elementnamen in den einzelnen Ebenen und today funktioniert ohne weitere Vorbereitungen.

Bei einer regulär erstellten Zeithierarchie versucht DeltaMaster, den Aufbau der technischen Namen abzuleiten. Im Modellieren-Modus kann in den Ebeneneigenschaften einer Zeitebene ein Muster für den Aufbau der Elemente hinterlegt werden, falls die eindeutige Erkennung nicht automatisch funktioniert bzw. prinzipiell nicht funktionieren kann.

Wenn zum Beispiel eine Datumsspalte den Eintrag 20112012 besitzt, ist man versucht, den 20.11.2012 anzunehmen. Es könnte aber auch theoretisch der 20.12.2011 gemeint sein. Im ersten Fall würde man das Muster {dd}{MM}{yyyy} hinterlegen, im zweiten das Muster {yyyy}{dd}{MM}.

Wir haben nun beispielsweise 3 Spalten für Tag, Monat und Jahr in unserer Datenbank im folgenden Format vorliegen (es geht hier um Wetterdaten, die schon 1879 beginnen):

Die Werte der Spalten Tag, Monat und Jahr

Die Werte der Spalten Tag, Monat und Jahr

Wir könnten allein aus der Tag-Spalte eine virtuelle Zeithierarchie erstellen, bauen aber nun eine reguläre Hierarchie aus allen drei Spalten zusammen.

Damit today nun funktionieren kann, müssen einerseits die Ebenen im Logik-Bereich von Modellieren zugeordnet sein:

Die zugeordneten Ebenen müssen hier sichtbar sein!

Die zugeordneten Ebenen müssen hier sichtbar sein!

Weiterhin stellen wir die korrekte Erkennung durch Angabe von Mustern in den jeweiligen Ebeneneigenschaften sicher:

Zuordnung von Mustern zu den Ebenen

Zuordnung von Mustern zu den Ebenen

Für Tag verwenden wir {yyyy}-{MM}-{dd}T00:00:00, für Monat {yyyy}{MM} und für Jahr {yyyy}. Dabei steht beispielsweise {MM} dafür, dass die Monate bis September auch mit zwei Ziffern angegeben sind und {yyyy} bezeichnet Jahresangaben mit 4 Stellen. Analog zu {MM} steht {dd} für einen zweistellige Tagesangabe.

Welche Bausteine für solche Muster sonst noch existieren, wird in den Release Notes 6.4.3 (9) genauer beschrieben.

Nun kann ich today einsetzen, und da die Datenbank am 31.12.2021 endet, versuche ich heute am 27.7.2022 mit today.pya(1) (“period 1 year ago”) einen Verweis auf den Tag vor einem Jahr:

Today ist nun einsatzbereit

Quellen

Quelle (Source info): Gas Infrastructure Europe (GIE) AGSI+ Storage Transparency Platform

Die Daten für Deutschland wurden über die anklickbare Historie heruntergeladen.
Wir übernehmen keine Garantie für die Korrektheit der hier im Blogbeitrag gezeigten Werte.