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

Historische Betrachtung von Bestandswerten

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).

Abbildung 1: Schematische Darstellung eines Ladeprozesses für historische Bestandsdaten

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).

Abbildung 2: Beispieltabellen mit Daten für eine Berechnung historischer Bestandswerte

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.

Abbildung 3: Ausschnitt aus einem Kennzahlenschema mit historischer Betrachtung des Auftragbestandes