Der Umsatz im aktuellen Jahr ist zu niedrig? Vielleicht liegen einfach keine aktuellen Daten vor. Wie zeigt man dem Benutzer, wann die Daten zuletzt aktualisiert wurden?
Aktualisierungsdatum oder Datenstand?
Wenn ich Auswertung betrachte muss ich wissen, welche Daten der aktuellen Auswertung zu Grunde liegen. Wenn diese noch von letzter Woche sind, ist der aktuelle Umsatz nicht aussagekräftig. Unterschieden werden muss aber zwischen Datenstand und Aktualisierungsdatum:
- Aktualisierungdatum: Zeitpunkt der technischen Aktualisierung
- Datenstand: Der letzte Auftrag, der vorliegt, ist von vorgestern. Weil die Datenquelle selbst nicht aktualisiert wurde. Dann sehe ich zwar am Aktualisierungsdatum, dass die letzte Aktualisierung erst 5 Minuten her ist - trotzdem sieht man noch alte Daten. Dieser Umstand muss unbedingt beachtet werden - sonst bringt das Datum nichts.
Wir betrachten hier nur das Aktualisierungsdatum. Den Datenstand kann man dem Betrachter leicht über eine Measure darstellen, wenn es notwendig ist. Beispielsweise:
Vorgehensweise
Es gibt leider weder in Power BI noch in Excel Power Pivot eine Funktion, anhand der man den letzten Zeitpunkt der Aktualisierung herausfinden kann.
Das ist aber auch nicht einfach: Ein Datenmodell besteht aus mehreren Abfragen. Beispielsweise einer Auftrags-Tabelle und einer Artikel-Tabelle. Wenn ich in der Datenquelle etwas geändert habe, kann ich die Artikel-Tabelle aktualisieren - ohne die Auftrags-Tabelle ebenfalls zu aktualisieren. Wann ist jetzt das Aktualisierungsdatum?
Wir möchten nicht für jede Tabelle ein Aktualisierungsdatum auf der Oberfläche angeben. Und natürlich gehen wir davon aus, dass im laufenden Betrieb immer alle Abfragen aktualisiert werden und der Speziallfall nur bei der Entwicklung des Reports relevant ist.
Also erstellen wir eine eigene Abfrage LastUpdate. Dort speichern wir selbst das Aktualisierungsdatum. Und dafür verwenden wir drei verschiedene Varianten:
Variante 1: FixedLocalNow()
Power Query kennt die Funktion DateTime.FixedLocalNow(). Diese Funktion gibt den aktuellen Zeitstempel wieder. Und zwar immer, wenn diese Abfrage (und dann auch alle anderen) aktualisiert werden.
Das Ergebnis ist erstmal eine nackter Wert. Um diesen später besser verwenden zu können, wandeln wir diesen in eine Tabelle um und geben der neuen Spalte den Namen LastUpdateTS. Ich lege meist noch ein Spalte an, in der ich nur das Datum speichere - um das ggf. in den Auswertungen später nutzen zu können. Beispielsweise für Year-to-Date Auswertungen.
Die Abfrage zum Kopieren:
Anzeige im Report
Legen wir einfach ein Measure an, das verknüpft mit etwas Text die Aktualisierungsinfo lesbar zurückgibt:
In Power BI kann man die Measure einfach in eine Card-Visual ziehen und im Report anzeigen lassen. In Excel muss man sich spezieller Cube-Formeln bedienen:
Nachteil von Variante 1
Die erste Variante ist prima für Excel Power Pivot. Die Datei befindet sich lokal in irgendeinem Land und dort findet auch die Aktualisierung statt.
Schauen wir uns das in Power BI an. In Power BI legen wir ein Card Visual an, veröffentlichen den Bericht in den Power BI Service und aktualisieren dort den Bericht:
Online steht eine andere Uhrzeit, als die aktuelle - obwohl man doch gerade aktualisiert hat?! Es fehlen zwei Stunden (die Sekunden der lokalen Zeit passen nicht ganz, da ich einen Moment für den Screenshot gebraucht habe).
Das liegt daran, dass der Server in einer anderen Zeitzone ist. Ist das beispielsweise Irland, dann ist die Uhrzeit eine oder zwei Stunden verschieden. Wo der aktuelle Dienst läuft, findet man ganz schnell im Power BI Service heraus. Oben rechts auf das kleine Fragezeichen klicken und im Menü Info auswählen.
FixedUtcNow()?
Wenn man jetzt ein bisschen forscht, dann findet man in Power Query die Funktion DateTimeZone.FixedUtcNow. Die gibt einen Zeitstempel in UTC (sowie der Zeitzoneninformation für UTC) zurück. Egal, in welcher Zeitzone der Power BI Service aktuell für mich läuft. Und dann muss man die Zeitzone ja nur auf Deutschland ändern.
Deutschland ist GMT+01, ist also eine Stunde voraus. Ja - außer im Sommer, da sind es zwei Stunden...
Variante 2: Die Zeitumstellungen berücksichtigen
Wir nehmen also FixedUtcNow() und schauen, wann in Deutschland die Zeitumstellung ist - und addieren dann je nachdem 1 oder 2 Stunden. Dafür habe ich folgende Tabelle in Power Query manuell angelegt:
Damit du das nicht abtippen musst:
Die Abfrage heißt bei mir SommerWinterZeit. Als nächstes erstelle ich eine Funktion, die mir den UTC-Zeitstempel in deutsche Lokal-Zeit umrechnet. Dazu rechne ich erst eine Stunde auf den UTC-Zeitstempel - damit habe ich Winterzeit in Deutschland (MEZ). Und dann gilt es herauszufinden, ob der Zeitstempel in die Sommerzeit fällt. Weil dann müssen wir eine weitere Stunde addieren:
Der Rest funktioniert wie in Variante 1. Du musst nur DateTimeZone.FixeUtcNow() verwenden. Da die obige Funktion einen Zeitstempel ohne Zeitzone erwartet, entfernst du einfach die Zeitzone mit DateTimeZone.RemoveZone(DateTimeZone.FixedUtcNow()) und übergibst das Ergebnis an die obige Funktion.
Variante 3: Wir nutzen einen WebService
Die Webseite http://worldtimeapi.org bietet eine API an (Application Programming Interface oder einfach: eine Schnittstelle), um das aktuelle Datum mit Uhrzeit für jede gewünschte Zeitzone abzufragen. Es handelt sich um eine REST-Schnittstelle, die leicht mit Power Query abzufragen ist.
Die API können wir leicht testen, in dem wir uns beispielsweise alle Zeitzonen geben lassen: http://worldtimeapi.org/api/timezone
Interessant ist hier allerdings nur die Zeitzone für Deutschland. Das kann man mit einem einfachen Filter über den URL mitgeben: http://worldtimeapi.org/api/timezone/Europe/Berlin
Das Ergebnis wird im JSON Format (JavaScript Object Notation) zurückgegeben. Power Query kommt prima mit JSON zurecht.
Um das Ergebnis in Power Query zu importieren, legen wir eine neue Abfrage vom Typ Web an:
Dort tragen wir den oben genannte URL für unsere Zeitzone ein und führen die Abfrage aus. Power Query erstellt einen Record mit den Ergebnis-Feldern:
Den Record
- wandeln wir in eine Tabelle
- filtern den Zeitstempel
- entfernen die Spalte Name
- ändern den Datentyp
- und ergänzen noch eine Spalte mit einer reinen Datumsinformation.
Oder in M ausgedrückt:
Welche Variante nehmen?
In Excel Power Pivot hat man das Problem mit einem Server in einer anderen Zeitzone nicht unbedingt. In Power BI muss man sich entscheiden, ob man sich auf einen externen WebService verlassen möchte. Man muss dann allerdings daran denken, die Zeitumstellungstermine ausreichend zu pflegen.
Und? Dachtest du, das sei eine leichte Aufgabe?
Kommentar hinterlassen