Gelegentlich ist eine Berechnung historischer Bestandswerte gar nicht möglich, weil die dafür notwendige Datenbasis im ERP-System nicht vorhanden ist. Im ersten Abschnitt wird daher beschrieben, wie man leicht selbst eine eigene Historie der Bestandsdaten aufbauen kann. Sind im ERP-System alle notwendigen Informationen zu einer Nachberechnung der historischen Bestandswerte vorhanden, kann die Bestandsgröße auch ohne eigene Datenhaltung berechnet werden. Ein Beispiel dazu findet sich im zweiten Abschnitt.
Aufbau einer eigenen Bestandshistorie
Lässt sich aus den Daten des Vorsystems keine Historie der Bestandswerte ermitteln, müssen diese in einem eigenen Archiv gesichert und dann ausgewertet werden. Zuerst stellt sich die Frage, mit welcher Periodengenauigkeit (Tag, Monat, Jahr) das Archiv gefüllt werden soll.
Eine tägliche Sicherung aller Daten führt schnell zu großen Datenmengen. Der betriebswirtschaftliche Nutzen, um Bestandsdaten auf Tagesebene zu vergleichen, ist vergleichsweise gering. Ein Jahresvergleich dagegen ist sehr ungenau, saisonale Schwankungen können nicht abgebildet werden. Es empfiehlt sich daher, die Daten monatlich, jeweils zu einem bestimmten Stichtag, zu archivieren.
Eine Importroutine, die Bestandsdaten täglich aus dem ERP-System lädt, monatlich archiviert und für die tägliche Analyse aufbereitet, könnte folgendermaßen aussehen (vgl. Abbildung 1).
Folgende SQL-Anweisungen zeigen beispielhaft, wie der in Abbildung 1 grau hinterlegte Prozess einer monatlichen Archivierung in einen Datenladeprozess integriert werden könnte.
--Löschen der Daten des aktuellen Monats aus der Archivtabelle --(der letzte Importtag des Vormonats wird nicht gelöscht und --bleibt somit im Archiv stehen) Delete T_Import_Bestandsdaten_Archiv Where datepart(yyyy, Import_Datum ) * 100 + datepart(mm, Import_Datum ) = datepart(yyyy, getdate() ) * 100 + datepart(mm, getdate ()) --Einfügen neuer Tagesdaten in die Archivtabelle Insert Into T_Import_Bestandsdaten_Archiv Select *, getdate() --aktuelles Importdatum ergänzend einfügen From T_Import_Bestandsdaten_Tag
Berechnung historischer Bestandsgrößen
In vielen ERP-Systemen können aus den vorhandenen Daten Bestandsgrößen berechnet werden und müssen nicht separat archiviert werden. Dazu benötigt man Informationen, in welchem Zeitraum ein Wert (z.B. ein Auftrag) gültig (offen) ist. Der Startzeitpunkt ist meist ein Anlagedatum oder Bestelldatum. Schwieriger wird es, den Endzeitpunkt zu bestimmen. Ob ein Lieferdatum, Fakturadatum oder ein anderes Abgangsdatum herangezogen werden soll, muss von Fall zu Fall bestimmt werden.
Auch hier sollen die Daten monatlich zu einem Stichtag (im folgenden Beispiel soll es immer der letzte Tag im Monat sein) berechnet werden. Als eine kleine Hilfe dient dabei nachfolgende Sicht, die aus einer Datumstabelle auf Tagesbasis (hier Tabelle „T_Import_Periode_manuell” mit der Spalte „Periode”, Format „datetime”) den letzten Tag im Monat als Stichtag für die historische Bestandsbetrachtung berechnet.
Create View V_S_Stichtag as SELECT distinct dateadd(mm,1,Convert(datetime, Convert(varchar, Datepart(yyyy, Periode)*10000 + Datepart(mm, Periode)*100+1), 112) - day(Convert(datetime, Convert(varchar, Datepart(yyyy, Periode)*10000 + Datepart(mm, Periode)*100+1), 112))+1)-1 as Stichtag, Datepart(yyyy, Periode)*100 + Datepart(mm, Periode) MonatID From T_Import_Periode_manuell
Berechnungslogik: Dem Tagesdatum wird ein Monat addiert, anschließend wird das neue Datum auf den 1. Tag des Monats gesetzt, um danach einen Tag abzuziehen.
Die Sicht liefert folgendes Ergebnis:
Stichtag MonatID
2010-03-31 201003
2010-04-30 201004
2010-05-31 201005
Häufig liefern ERP_Systeme die benötigten Daten in separaten Tabellen (im Beispiel eine Auftragstabelle, vgl. Abbildung 2 unten) die Bestandswerte (hier Auftragswert für die Berechnung eines Auftragbestandes) mit ihrem Erstellungsdatum (hier Auftragsdatum) und in einer zweite Tabelle (vgl. Abbildung 2 unten), die die Information hinterlegt, ab wann der Bestandswert keine Gültigkeit mehr besitzt (hier im Beispiel ein Lieferdatum je Auftrag).
Für eine historische Abbildung des Auftragsbestandes nach Monaten mit Stichtag ‘letzter Tag im Monat’ liefert folgende SQL-Abfrage
Select VSS.Stichtag, TIA.AuftragNr, TIA.Kunde, TIA.Artikel, TIA.Auftragswert From T_Import_Auftrag AS TIA left join T_Import_AuftragLieferdatum AS TIAL on TIA.AuftragNr = TIAL.AuftragNr inner join V_S_Stichtag AS VSS on TIA.AuftragDatum <= VSS.Stichtag and Isnull(TIAL.LieferDatum, Convert(datetime, '20501231', 112)) >= VSS.Stichtag
dieses Ergebnis:
Stichtag AuftragNr Kunde Artikel Auftragswert
2010-03-31 0815 K1000 A1020 100
2010-04-30 0816 K1010 A2010 250
2010-04-30 0817 K1010 A3010 125
2010-05-31 0816 K1010 A2010 250
Man erkennt, dass zum Stichtag 31.03.2010 ein Auftrag offen war (Auftragsbestand 100), zum 30.4. zwei Aufträge (Auftragsbestand 375) und zum 31.05. wieder nur ein Auftrag (Auftragsbestand 250). Diese Abfrage ist Basis für den Aufbau eines historischen Bestandswertewürfel.
Auf Grundlage so gewonnener Faktentabellen lassen sich die Daten sehr gut in OLAP-Datenbanken speichern und analysieren. Abbildung 3 zeigt beispielhaft einen Ausschnitt aus einem Kennzahlenschema, in dem man mit Hilfe von Sparklines sehr schön die monatliche Entwicklung des Auftragsbestandes erkennen kann.