In einem Kundenprojekt gab es vor einiger Zeit eine sehr interessante Anforderung: In einem monatlichen Turnus soll eine Bottom-Up Planung erfolgen, in deren Verlauf – auf drei unterschiedlichen Stufen – Planzahlen für die verkauften Stückzahlen in den folgenden sechs Monaten eingegeben werden sollen. Letztendlich soll aus diesen Informationen eine genaue Produktionsplanung erfolgen, um eine möglichst ökonomische und effiziente Produktions- und Lagerauslastung zu erreichen.
Die Erfassung soll innerhalb eines vorgegebenen Zeitkorridors stattfinden – meistens in der 3. Woche eines Monats, evtl. jedoch, abhängig von Feiertagen, auch danach. Als Prämisse gilt, dass eine Stufe abgeschlossen werden muss, bevor die nächste Stufe die Berechtigung zur Datenerfassung erhält. Übertragen auf unser Chair-Modell könnte man die drei Stufen wie folgt abgrenzen:
- Anwender mit Regionalverantwortung: Eingabe auf alle Produkte und eine bestimmte Region
- Anwender mit Produktgruppenverantwortung: Eingabe auf Produkte einer bestimmten Produktgruppe über alle Regionen
- Anwender mit Globaler Verantwortung: Eingabe auf alle Produkte und Regionen
Die Eingaben auf einer Stufe sollen nicht durch die Eingabe auf einer höheren Stufe überschrieben werden, sondern auf eigenen Measures erfasst werden, sodass der gesamte Eingabeprozess auch im nachhinein noch schlüssig abgebildet werden kann.
Die Umsetzung
Als Grundlage für die zeitgesteuerte Planung war natürlich zuerst einmal ein Planungskalender nötig, in dem die Zeiten für die unterschiedlichen Erfassungsstufen hinterlegt werden können.
Feldname | Datentyp | Beschreibung |
Start_Phase_1 | datetime | Start-Datum der ersten Planungsphase |
Start_Phase_2 | datetime | Start-Datum der zweiten Planungsphase und gleichzeitig Ende der ersten Planungsphase |
Start_Phase_3 | datetime | Start-Datum der dritten Planungsphase und gleichzeitig Ende der zweiten Planungsphase |
End_Phase_3 | datetime | Ende-Datum der dritten Planungsphase |
Um eine komfortable Eingabeunterstützung anzubieten, wurde eine relationale Erfassungsmaske in DeltaMaster zur Verfügung gestellt, mit deren Hilfe eine Datumseingabe möglich ist. Praktisch ist hierbei, dass der SQL-Durchgriff erkennt, wenn in der relationalen Tabelle ein Feld vom Datentyp “datetime” vorliegt. In diesem Fall wird automatisch ein Kalender für die Datumsauswahl eingeblendet.
Für die Rechte-Steuerung im SSAS wurde eine zusätzliche Measuregroup angelegt, in der – je nach Planungsstufe – eine bestimmte Zahl hinterlegt wird. Die Befüllung dieser Measuregroup erfolgt über eine StoredProcedure, die bei jeder Modell-Aktualisierung (die natürlich jede Nacht laufen muss) mit aufgerufen wird. Die StoredProcedure prüft, ob sich das aktuelle Datum innerhalb einer der drei im Planungskalender angegebenen Zeitpunkte befindet. Wenn ja wird ein entsprechender Wert in die Faktentabelle der Measuregroup geschrieben. Im einfachsten Fall kann die Measuregroup ausschließlich auf die Wertart-Dimension bezogen werden. Im vorliegenden Projekt wird auf das “Plan”-Element in der Wertart-Dimension einer der Werte ‘0’, ‘1’, ‘2’ oder ‘3’ auf das Measure “PlanningStatus” geschrieben.
Im SSAS wird danach für jede Planungsphase eine Rolle angelegt. Hierbei ist darauf zu achten, dass keine Einschränkungen aus einer anderen Rolle mit dieser Rolle überschrieben werden (so wie im Artikel Rechteverwaltung in SSAS – Teil 1 beschrieben).
In der Rolle sind vor allem anderen die folgenden beiden Einstellungen von Bedeutung:
- Die Zugriffsrechte auf den Cube müssen auf Lese-/Schreibrecht eingestellt sein
- Die Einstellung “Lese-/Schreibberechtigung aktivieren” (Enable read/write permission) muss auf der Seite “Zellendaten” (CellData) aktiviert werden und als Bedingung muss im Textfeld der entsprechende Wert in der Measure “PlanningStatus” abgeprüft werden.