08.09.2015
Anton Grening
Autor: Anton Grening

Zeit­stem­pel­funk­tion­en in ACL™

In diesem Blogeintrag wird sich alles rund um Felder für Datums- und Zeitangaben und den dafür vorgesehenen Datentyp DATETIME drehen. Dieser ist seit der Version 10.0 im Funktionsumfang von ACL™ und bietet zahlreiche Vorteile die der Datentyp DATE in den früheren Versionen nicht liefern kann. Der neue Datentyp ist vor allem für das Arbeiten mit Zeitstempeln gedacht und speichert sowohl Datum als auch die Uhrzeit in einem einheitlichen Format. Eine solche Erfassung von Zeitpunkten spielt in der Datenanalyse oft eine wichtige Rolle, da diese in der Regel automatisch erfasst werden und dadurch sehr genau angeben, wann etwas geschehen ist. In unseren zahlreichen Analysen berücksichtigen wir solche Zeitstempel zum Beispiel bei der Auswertung von Weblogs oder Buchungen außerhalb der üblichen Geschäftszeiten. Diese Werte werden vom System geschrieben, weshalb sie sich nicht ohne weiteres ändern oder manipulieren lassen.

Oft werden solche Einträge allerdings als Textfelder abgelegt, was das Weiterarbeiten mit diesen Werten etwas erschwert. Möchte man Datums- und Zeitangaben, oder die Kombination aus beidem in einem Feld als sogenannter Zeitstempel in ein entsprechendes Format bringen, damit darauf Datums- und Zeitberechnung oder Funktionen angewendet werden können, so ist das in ACL™ mit den neuen Funktion leicht zu realisieren:

 

Konvertiert Zeichen oder numerische Werte in das Datumsformat

Beispiel

Rückgabewert*
CTOD(string/zahl)

CTOD(„20141231“)
CTOD(20141231)

31 Dez 2014
CTOT(string/zahl)CTOT(„t235959“)
CTOT(0,235959)
23:59:59
CTODT(string/zahl)CTODT("20141231 235959")
CTODT(20141231,235959)
31 Dez 2014 23:59:59

*Das Anzeigeformat des Rückgabewertes kann jederzeit in den ACL™ Optionen angepasst werden. In diesem Beispiel wurde folgendes Format verwendet DD MMM YYYY hh:mm:ss

 

Eine ausführliche Erläuterung kann auch der ACL™ Dokumentation entnommen werden, in der mit Anwendungsbeispielen genauer auf die Funktionalität und verschieden Formate eingegangen wird.
Hat man nun die Datums- und Zeitinformationen in dem benötigten Datentyp (DATETIME), können damit verschiedene Fragestellungen beantwortet werden. Wie bereits erwähnt verwenden wir Zeitstempel um zum Beispiel Buchungen außerhalb der üblichen Geschäftszeiten zu ermitteln. Mit den Informationen im DATETIME Format kann das über simple Logikabfragen umgesetzt werden, denn durch den Datentyp wird das Feld wie ein Kalenderdatum bzw. eine Uhrzeit gesehen und Abfragen ermöglicht, die mit einem Textfeld nicht möglich sind. So können beispielsweise sogar über den Schnellfilter Einträge, die vor oder nach einem bestimmten Zeitpunkt liegen, selektiert werden.

Bild 1: Filteroptionen für Zeitstempel

ACL™ bietet außerdem eine sehr breite Palette an Funktionen die auf Zeitstempelfelder angewandt werden können. Alle hier vorzustellen würde den Rahmen sprengen, allerdings kann ich Ihnen die Gewissheit geben, dass für nahezu jede Fragestellung eine passende Funktion vorhanden ist.

Wie ist es aber, wenn man mit diesen Feldern Berechnungen durchführen möchte? Was ist die Differenz von zwei Zeitstempeln und wie kann man den Ergebniswert interpretieren? Solche Fragen tauchen dann auf, wenn man Dauern zwischen zwei Zeitstempeln benötigt. So soll zum Beispiel berechnet werden, wie viel Zeit nach dem Anlegen einer Kundenauftrags vergeht, bis die jeweiligen Positionen erfasst werden. Dies kann mehrere Gründe haben, sei es die Suche nach ungewöhnlichen Bewegungen oder die Optimierung von Prozessen.

Für gewöhnlich wird ein Kundenauftrag im System in zwei Tabellen verwaltet. Eine Kopftabelle für allgemeine Informationen zum Auftrag und eine weitere Tabelle für die jeweiligen Positionsdaten. Damit wir die Datums- und Zeitangaben aus beiden Tabellen (Zeitstempel der Anlage des Auftrags und Zeitstempel der Erfassung der Position) auswerten können, müssen wir diese zunächst über einen Relation in eine Tabelle bringen. Wie Sie dazu vorgehen müssen, haben wir bereits in diesem Blogeintrag an einem anderen Beispiel erläutert.
Hat man beide Zeitstempel auf eine gemeinsame Ebene gebracht, lässt sich die Differenz der zwei Werte ermitteln. Das Ergebnis ist ein serieller Wert, der von Computerprogrammen für Rechenoperationen mit Datumsangaben verwendet wird. Dabei bekommt jeder Tag eine Ganzzahl zugewiesen, die angibt wie viele Tage ausgehen vom Basisdatum 1. Januar 1900 vergangen sind. (In ACL™ entspricht z.B. die serielle Datumszeit mit dem Wert 1 dem 2. Januar 1990, und die mit dem Wert 42004 dem 1. Januar 2015)
Ähnlich wird auch die Uhrzeit umgerechnet, dafür werden die Stellen nach dem Komma der seriellen Datumszeit verwendet. Eine Uhrzeit wird als unvollständiger Tag gesehen und als Bruchwert angegeben. (12:00:00 Uhr entspricht 12 vergangenen Stunden, also einem halben Tag und wird als serieller Wert mit 0,5 angegeben; 01:00:00 Uhr entspricht einer Stunde und 0,04167 als Bruchwert usw.)

Versteht man wie eine serielle Datumszeit aufgebaut ist und wie diese interpretiert werden kann, so lässt sich mit dem Ergebnis, z.B. aus einer Subtraktion ganz einfach weiterarbeiten. Dazu erzeugen wir uns ein neues berechnetes Feld (c_differenz) das jeweils den Zeitstempel der Position von dem der Kopfdaten abzieht. Der Wert vor dem Komma, gibt die Anzahl der Tage zwischen den zwei Zeitstempeln an und der Wert nach dem Komma die Uhrzeit als Bruchwert im Verhältnis (1 Tag = 24 Stunden).

Bild 2: Differenz von zwei Zeitstempel und Umrechnung in Tage, Stunden, Minuten und Sekunden

Das klingt vielleicht etwas umständlich, soll aber nur den technischen Hintergrund näher aufzeigen. Die eigentliche Umrechnung bzw. Konvertierung der seriellen Datumszeit gestaltet sich aber sehr einfach. Dazu stellt ACL™ die Funktionen STOD(), STOT() und STODT() zur Verfügung. Es macht wenig Sinn die Differenz der zwei Zeitstempel wieder in ein Datum umzurechnen, allerdings kann mit Hilfe der Rückrechnung die Anzahl der Differenz in Stunden, Minuten und Sekunden sehr einfach ermittelt werden. Ausgehend von c_differenz (Zeitstempel_Position - Zeitstempel_Kopf) können wir durch die Anwendung der entsprechenden Funktionen zunächst die Anzahl der Tage (Wert vor dem Komma) entnehmen und anschließend mit der STOT()-Funktion den Wert nach dem Komma in das Zeitformat bringen. Das neue Feld mit den Tagen (c_Dauer_Tage) und das umgewandelte Feld mit der Zeitdauer (c_Dauer_Zeit) geben Aufschluss welche Dauer zwischen den zwei Zeitstempeln liegt. (Vorsicht: Bei dem Feld c_Dauer_Zeit handelt es sich nicht um eine Uhrzeit so wie man es für gewöhnlich ablesen würde, sondern um eine Angabe zur Dauer in Stunden, Minuten und Sekunden) Benötigt man diese Angaben allerdings als separate Felder, so können diese mit den Funktionen HOUR(), MINUTE() und SECOND() aufgetrennt werden. Dadurch ist das Ergebnis auch leichter nachzuvollziehen und die Felder können für weitere Auswertungen einzeln herangezogen werden.

Zeitstempel sind ein wichtiges Element in der Datenanalyse und finden in den verschiedensten Auswertungen Verwendung. Denken Sie beim nächsten Mal, wenn Sie mit dem Datentyp DATETIME arbeiten, an die vielen Funktionen die ACL™ Ihnen dafür zur Verfügung stellt; Und sollten Sie Dauern ermitteln oder mit Datums- und Zeitangaben rechnen müssen, verwenden Sie ruhig die Umrechnung in serielle Datumszeit.

Haben Sie noch Fragen oder Kommentare? Dann schreiben Sie uns doch einfach an info@dab-gmbh.de.


Kommentare (0)
Sei der erste, der diesen Blog-Beitrag kommentiert.
Blog Anmeldung

Sie sind nicht angemeldet. Bitte melden Sie sich an um diesen Blogbeitrag zu kommentieren.

anmelden