Zeitverschiebungen

Schön, wenn man im (proprietären, ziemlich teuren) Report-Tool namens Business Objects einen Filter wie ’sampled last year‘ einstellen kann. Das entbindet einen von der eigenen Rumrechnerei mit Zeitschemata.

Intelligent ist es auch, wenn das (proprietäre, nicht minder teure) Datenaufzeichnungs-Tool Simatic-IT Historian seine Messwerte in UTC-Zeit abspeichert, damit man Daten aus verschiedenen Zeitzonen vergleichen kann.

Blöd nur, wenn das Report-Tool das irgendwie nicht mitbekommt und deshalb zum Beispiel die in Deutschland (UTC+1) aufgezeichneten Daten zwischen 2008-12-31 23:00:00 und 23:59:59 angeblich nicht mehr in 2008 liegen, sondern schon in 2009.

Schon fehlt in der Monatsübersicht des vergangenen Jahres der Dezember, denn dessen Monatswert wird – logisch – auf 31.12. 23:59:59 geschrieben, schliesslich kann die Summe nicht älter sein als der letzte Messwert.

Und nu?

Eigentlich sollte man nur diesen komfortablen Filter ’sampled last year‘ anpassen müssen. Leider ist der – prost proprietär – geschützt, verrammelt und verriegelt. Kommt man nicht ran.

Also neuen Filter erstellen, beziehungsweise eine dynamische Variable. Business Objects hat dieses sehr clevere Universe-Konzept, in dem die ganzen Komfort-Features für die Report-Erstellung abgelegt sind und dieses Universe kann man mit einem (proprie… – wir sagten es schon) Tool namens Designer ändern. Wer auf die Idee gekommen ist, die Begriffe ‚Universe‘ und (hoffentlich itelligent) ‚Designer‘ zu verwenden, hatte offenbar Humor.

Das Jahresende nach Business Objects

Unsere Messwerte werden mit UTC-Unix-Zeitstempel gespeichert, also brauchen wir eine dynamische Variable im Universe, die den UTC-Wert der letzten Sekunde des vergangenen Jahres in Sekunden seit 1970-01-01 00:00:00 enthält.

Dem System liegt ein MS-SQL-Server zugrunde, also basteln wir erst mal die richtige Formel zusammen, die immer den aktuell richtigen Wert liefert. Zum Beispiel: ’select datediff(second, ‚1970-01-01 00:00:00′, dateadd(year, datediff( year, 0, getdate() ), 0)) – 1‘.

Das liefert den Wert 1230767999, dessen Richtigkeit die Seite Unix-Time-Conversion bestätigt.

090108_zeitverschiebung-2

Nun greifen wir uns per Designer das aktuelle Universe und fügen ein ‚General Time Object‘ hinzu:

  • In dem Zweig General Time Objects / Condition Objects ein neues Objekt erstellen
  • Name und Typ einstellen und den SQL-Ausdruck aus dem Versuch mit dem SQL Query Browser hineinkopieren
  • Unter Tabellen unbedingt eine zum PPA gehörende Tabelle auswählen, sonst schlägt die Syntaxprüfung fehl
  • Bei Eigenschaften „Kennzahl“ einstellen, also Skalar, das sind die rosa Böppel
  • Bei Erweitert die Benutzung mindestens in Bedingungen erlauben

090108_zeitverschiebung-3

  • Um das Jahr als ganzes selektieren zu können noch eine Variable StartVorigesJahr einfügen, die die erste UTC-Sekunde des vergangenen Jahres liefert. Der SQL-Ausdruck dafür ist übrigens ‚datediff(second, ‚1970-01-01 00:00:00′, dateadd(year, datediff( year, 0, getdate() )-1, 0))‘

Jetzt das Universe abspeichern und exportieren, damit die Berichte im Repository darauf zugreifen können.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: