In einer Block-Storage Datenbank werden die Daten in sogenannte Datenblöcke gespeichert. Eine Standardfunktion und eine Art Sicherheitsmechanismus ist, dass Essbase in einer Berechnung nur in spezielle FĂ€lle neue Datenblöcke erstellt. Es kommt immer wieder vor, dass eine Berechnung kein Ergebnis erzeugt. Der Grund ist oft, dass es keinen Datenblock gibt um das Ergebnis zu speichern. Daher ist es fĂŒr den Entwickler oft eine Herausforderung, um die Datenblöcke vorher anzulegen oder Sorge zu tragen, dass Essbase immer die notwendigen Datenblöcke erstellt. In diesem Beitrag beschreibe ich verschiedene Methoden mit denen geziehlt Datenblöcke angelegt werden können.
Ein kurzer Ausflug in die Theorie von Datenblöcken.
Ein Datenblock besteht aus gespeicherte Elemente aller Dense Dimensionen. Jeder Datenblock in einer bestimmten Anwendung hat dieselbe Struktur, z.B. ein Raster aus allen Kennzahlen und Monate. Wenn eine einzige Zahl in eine Datenbank hochgeladen wird, erstellt Essbase einen Datenblock. Zudem wird in einem Index gespeichert, fĂŒr welchen Schnittpunkt der Sparse Dimensionen diese Zahl hochgeladen wurde: z.B. fĂŒr Florida und das Produkt Orangensaft.
Bei einer Aggregation der Daten entstehen dann viele Datenblöcke fĂŒr die Hierarchie-Elemente der Sparse Dimensionen.

Abbilung 1: Die Data Storage settings der Beispielanwendung.
Wegen der KomplexitĂ€t gehe ich mit meiner ErklĂ€rung noch einen Schritt weiter und verwende dafĂŒr die Beispiel-Anwendung Sample Basic. Diese Anwendung hat die Dimensionsstruktur wie in Abbildung 1 gezeigt wird. Der Datenblock wird durch die Dense Dimensionen Years, Measures und Scenario gebildet. Ein Datenblock kann nur fĂŒr die Kombination von jeweils einem Product und einem Market existieren. Dieses sind die Sparse Dimensionen.

Abbildung 2: Excel mit markierte Level0 Kombinationen.
In der Abbildung 2 habe ich in Excel die Struktur von einem Block in der Sample.Basic Datenbank erstellt. Die grĂŒnen Zellen sind die gespeicherten Elemente der Dense Dimensionen, und hier kann ein Datenload oder eine Eingabe stattfinden. Die grau markierten Zellen sind entweder Eltern Elemente oder haben Formeln. Diese werden berechnet, wenn der Block von der Festplatte in den Speicher geladen wird.

Abbildung 3: Die Sparse Dimensionen der Beispielanwendung.
Ein Aufriss von den Sparse-Dimensionen wird in der Abbildung 3 gezeigt. In dem weiteren Verlauf des Beitrags werde ich hiermit die Beispiele erstellen.
Es ist also wichtig, das Datenmodell zu kennen!
Das Problem nÀher beschrieben.
Wie am Anfang schon beschrieben, erstellt Essbase nicht in allen FÀllen den benötigten Datenblock. In den meisten FÀllen schon, wie beim Laden von Daten mit SmartView oder per Laderegel, dort gibt es kein Problem. Auch bei der Aggregation der Daten werden die Datenblöcke erstellt. Auch der DATACOPY Befehl in einer Berechnungen wird die benötigten Blöcke ohne Probleme erstellen. Doch das Problem kann auftreten bei der Verwendung einer Gleichung in einer Business Rule oder Calc Script.
In der Abbildung 4 sehen wir ein Beispiel, wo wir die Sales Daten von Texas und Grape in Florida Orange kopieren wollen. In diesem Fall werden keine Datenblöcke erzeugt.

Abbildung 4: In diesem Skript werden keine Datenblöcke erzeugt.
Wenn wir aber die Formel umschreiben, wie in Abbildung 5, dann werden Datenblöcke erzeugt. Was ist den Unterschied? In dem zweiten Fall steht ein Element einer Sparse Dimension links von der Gleichung. Wie oben beschrieben, wird ein Element einer Dense Dimension in alle möglichen Datenblöcke einer Datenbank verwendet. Eine Gleichung ohne FIX wĂŒrde dann alle möglichen Datenblöcke einer Datenbank erstellen, und schon bei kleine Datenmodelle sind das bestimmt mehr GB an Daten als die Festplatte fassen kann. Deshalb gibt es diese âSicherungâ.

Abbildung 5: Das Dense Member ist in den FIX, hiermit werden Datenblöcker erzeugt.
SET CREATENONMISSINGBLK und SET CREATEBLOCKONEQ
Es gibt natĂŒrlich auch Wege, um diesen Sicherheitsmechanismus abzuschalten und Essbase die Datenblöcke erstellen zu lassen. Dieses wird erreicht mit den Settings SET CREATENONMISSINGBLK und SET CREATEBLOCKONEQ. Ein groĂer Nachteil ist, dass der Einsatz von diesen Settings oft in viel extra Rechenzeit endet und deshalb sollten diese bedachtsam eingesetzt werden.
Mit SET CREATENONMISSINGBLK ON schaut Essbase wĂ€hrend der Berechnung im Speicher nach, ob ein Block ĂŒberhaupt einen Datenwert enthalten wĂŒrde. Wenn dem so ist, dann wird dieser Datenblock erstellt, sonst nicht. Dieses erzeugt also keine leere Datenblöcke, und das ist ein sehr groĂer Vorteil. Die Setting funktioniert sowohl in einer Formel mit einem Dense oder Sparse Element. Diese Funktion sollte nur mit einem begrenzten FIX â ENDFIX eingesetzt werden, denn potentiell entstehen viele Daten, die nicht unbedingt gewollt sind. Dieses Setting schaltet auch die SET CREATEBLOCKONEQ ab.
Das Setting SET CREATEBLOCKONEQ ON erzeugt Datenblöcke, und zwar viele! Hierbei wird nicht geschaut, ob diese Daten enthalten oder nicht. Nur wenn man eine Konstante einsetzt, z.B. âFloridaâ = 100; werden keine Böcke erstellt, ansonsten aber wohl. Es sind also sehr spezielle FĂ€lle, wo diese Setting zum Einsatz kommt.
Die CREATEBLOCK Funktion
@CREATEBLOCK? den kenne ich noch garnicht. Ja, das kann sehr gut sein, denn diese Funktion kam erst in der Version 11.1.2.3. uns zur VerfĂŒgung. Die Anwendung ist sehr einfach, denn mit der Funktion muss nur ein Membername oder eine Liste mit Membernamen angegeben werden. Hierunter werden auch Memberkombinationen mit dem CrossDimensionalOperator und Funktionen die eine Liste von Elemente ausgeben wie z.B. @IDESCENDANTS verstanden. Mann sollte hier ein Element oder Elemente einer Sparse Dimension wĂ€hlen und dann erfolgt die Berechnung im Top-down Modus.
@CREATEBLOCK(mbrName|mbrList)
Damit nicht zuviele Blöcke erzeugt werden, sollte auch diese Funktion unbedingt mit FIX auf den benötigten Bereich eingestellt werden. Das Erzeugen der Blöcke geht superschnell, doch wenn dann die Aggregation kommt, dann kann es zu kitische GröĂen kommen.
In dem Block werden alle Zellen auf #missing gesetzt und damit wird ein leerer Block erstellt. Aber keine Sorge, wenn der Block schon existiert, dann werden die Daten nicht angerĂŒhrt, denn die Funktion erstellt nur Blöcke, die es noch nicht gibt. Danach kann die Berechnung erfolgen, fĂŒr welche diese Blöcke angelegt wurden. Nach Abschluss wĂ€re es eine gute Sache, um die nicht benötigten Datenblöcke mit dem Kommando CLEARBLOCK EMPTY wieder zu entfernen. Hiermit bleiben keine unnötige Altlasten in der Datenbank zurĂŒck.
DATACOPY
BewÀhrt und oft eingesetzt wird auch der DATACOPY Befehl. Weil diese auf den Index schaut, ist diese Methode auch sehr schnell. Wenn der kopierte Bereich anhand der Werte aus dem Quell-Bereich Berechnet wird, dann hat man immer einen Datenblock und auch keine zuviel. Vorallem bei Allokationen, wo ich den Treiber mit DATACOPY in den Rechenbereich kopiere, funktioniert ganz gut.
Fazit
Gute Calc Skripte schreiben ist nicht einfach, aber es ist einfach, damit zu beginnen. Es gibt vieles zu beachten und der Datenblock ist eines davon. Ich hoffe dieser Beitrag bringt ein wenig Licht in die Katakomben der Essbase Rechnenmaschine.
Ihr Philip Hulsebosch