CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Einteilung der Zeit in Klassen

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.

Altersklassen

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:

Alternativer Aufbau

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:

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