Man kann mit der Zeit viel anstellen. Man kann sie wöchentlich lesen, man kann sie totschlagen oder einteilen.
Im folgenden Beispiel liegen Zeitinformationen in den Daten vor, die klassifiziert werden können, um daraus Erkenntnisse abzuleiten. Konkret geht es um eine Fast-Food-Kette, welche in Ihrer Kundenstruktur das Geburtsdatum des Kunden abgebildet hat und in den Bewegungsdaten die Kundennummer vorhanden ist.
Mit diesen Informationen lassen sich mehrere Szenarios abbilden:
Unabhängig von den nachfolgend beschriebenen Ansätzen wird immer eine Tabelle benötigt, in der Altersklassen definiert sind:
Altersklassen:
CREATE TABLE [dbo].[T_S_Altersklasse]( [AltersklasseID] [int] NULL, [AltersklasseBEZ] [varchar](50) NULL, [Alter_von] [int] NULL, [Alter_bis] [int] NULL ) ON [PRIMARY]
In dem Beispiel wurden nun 12 Klassen angelegt und befüllt.
Die Klassengrenzen werden mit den beiden Spalten Alter_von und Alter_bis abgegrenzt. Dadurch lassen sich offensichtliche Datenfehler (z.B. negatives Alter) in die AltersklasseID 99 verschieben.
Mit dieser Einteilung der Tabelle ist zwar eine Verknüpfung mittels left join in der Faktenview nötig, allerdings ist die Flexibilität bzgl. Änderungen höher und damit der Aufwand bei einer Anpassung der Altersklassen geringer.
Ein alternativer (aber eben ohne die oben genannten Vorteile) Aufbau der Tabelle wäre folgender:
Ansatz 1:
Betrachtung der Altersklassen zum Verkaufszeitpunkt:
Mit diesem Ansatz wird das Ziel verfolgt, das Alter zum Kaufzeitpunkt herauszufinden. Durch die Einteilung in Altersklassen erkennt man z.B., welche Altersklasse welche Produkte bevorzugt kauft.
Das Alter wird bestimmt mit dem Befehl:
DATEDIFF(YEAR,k.Geburtsdatum, [Datum])
Der Befehl Datediff errechnet den Zeitabstand in Jahren (YEAR) zwischen Geburtsdatum (k.Geburtsdatum) und Kaufdatum ([Datum]). Da das Geburtsdatum am Kundenstamm hängt, muss dieser verknüpft werden (daher k.Geburtsdatum)
Im left join wird die Tabelle T_S_Altersklasse angesprochen. Dabei wird das errechnete Alter zum Kaufzeitpunkt mit den beiden Klassengrenzen Alter_von und Alter_bis verglichen.
left join T_S_Altersklasse ts on DATEDIFF(YEAR,k.Geburtsdatum, [Datum]) >= ts.Alter_von and DATEDIFF(YEAR,k.Geburtsdatum, [Datum]) <= ts.Alter_bis
Ansatz 2:
Betrachtung der Altersklassen nach aktueller Verteilung:
Es soll eine zielgruppengerichtete Marketingaktion stattfinden. Dazu ist es notwendig, die aktuelle Altersstruktur der Käufer zu kennen.
Das aktuelle Alter wird bestimmt mit:
DATEDIFF(YEAR,k.Geburtsdatum, getdate()) Im left join wird wieder die Tabelle T_S_Altersklasse verknüpft. left join T_S_Altersklasse ts on DATEDIFF(YEAR,k.Geburtsdatum, getdate()) >= ts.Alter_von and DATEDIFF(YEAR,k.Geburtsdatum, getdate()) <= ts.Alter_bis
Das Alter geht nun aus heutiger Sicht in die Alterskassen ein, d.h. man sieht die Aufsplittung nach Klassen aller Käufer zum aktuellen Zeitpunkt. Zu beachten hierbei ist natürlich, dass es dadurch täglich zu Verschiebungen kommen kann.
Ansatz 3:
Betrachtung nach Jahrgängen
Eine Einordnung nach Jahrgängen zum Verkaufszeitpunkt ist hier das Ziel. Die Käufer sollen in Jahrgangsklassen aufgeteilt werden. Somit bleibt ein Kunde immer in einer Klasse, unabhängig von seinem Alter und Betrachtungszeitpunkt.
Ähnlich dem Ansatz 1 werden hier anstatt Altersklassen Jahrgangsgruppen angelegt:
CREATE TABLE [dbo].[T_S_Altersklasse_Jahrgang]( [Altersklasse_JahrgangID] [int] NULL, [Altersklasse_JahrgangBEZ] [varchar](50) NULL, [Jahrgang_von] [int] NULL, [Jahrgang_bis] [int] NULL ) ON [PRIMARY]
Die Tabelle wird nun befüllt mit den Jahrgangsklassen:
In der Faktentabelle wird die Tabelle T_S_Altersklasse_Jahrgang verknüpft auf Basis des Geburtsjahres.
left join T_S_Altersklasse_Jahrgang ts on left(k.Geburtsdatum,4) >= ts.Jahrgang_von and left(k.Geburtsdatum,4) <= ts.Jahrgang_bis