Datenblöcke erstellen in Essbase

Bei der Erstellung von Calc Skripte ist es notwendig darauf zu achten, dass Datenblöcke erstellt werden. Essbase hat eine „Sicherung“, dass nicht unnötig Datenblöcke entstehen und somit die Datenbank grösser machen. Als Entwickler hat man aber eine Herausforderung und Wissen rund um dieses Thema ist also wichtig. Dieser Beitrag beschreibt zuerst was ein Datenblock ist und dann wie diese entstehen.

Die Definition eines Datenblocks

Zuerst einmal die Basis: In der Speicherform Block Storage und Hybrid Storage werden Daten in sogenannte Datenblöcke gespeichert. Dieses werden gebildet aus den Gespeicherte Elemente (Stored Member) der Dense Dimensionen. Stored Member

In der Abbildung 1 gibt es fiktiv 3 Dimensionen mit jeweils 3 Member. In allen Dimensionen sind 2 Elemente als Store Data oder Never Share definiert. Ein Element in jeder Dimension ist z.B. auf Dynamisch Berechnen eingestellt. Das Datenblock auf der Festplatte/SSD hat dann die Größe der orangen markierten Zellen.

Abbildung 1: Datenblock im Speicher

Wenn der Datenblock in den Speicher kommt, werden die übrigen Zellen, hier grau dargestellt, ausgerechnet und wird der Block also grösser (Expanded Blocksize).

Wenn dieser abgebildete Datenblock in einer Anwendung mit 5 Dimensionen ist, dann kann es einen solchen Datenblock nur für die Schnittmenge der Stored Elemente von den restlichen 2 Dimensionen geben.

Beispiel von 2 sparse Dimensionen zu dem oben gezeigten Datenblock.

Customer_A

                Customer_A1

                Customer_A2

                Customer_A3

Product_A

                Product_A1

                Product_A2

                Product_A3

Für alle Kombinationen aus Customer und Product kann es einen Datenblock geben. Eine Kombination wird dargestellt als Product_A1 -> Customer_A1. Für diesen kann es nur einen einzigen Block mit den 6 gespeicherten Zellen geben. In jeder Zelle kann nur ein einziger Datenwert aufgenommen werden.

Abbildung 2: Blöcke in Sparse Dimension.

Jeder Datenblock hat dieselbe Struktur von den Zellen her.

Einen Datenblock kann ein Upperlevel Block sein, wenn ein oder beide Elemente ein Knoten ist. Sonst ist es ein Block der Ebene 0.

Technisch kann es sein, dass ein Block keinen Datenwert hat. Dieses ist ein Empty Block.

Entstehen von einem Datenblock

Es gibt eine kleine Anzahl an Möglichkeiten, wie ein Datenblock entsteht.

Import von Daten.

Beim Importieren von Daten in die Datenbank entstehen Blöcke. Wenn es noch keinen Block für die Kombination von Sparse Elementen in der Quelle gibt, dann wird ein Block erstellt. Wenn es diesen schon gibt, dann werden weitere Zellen gefüllt. Gibt es für die Zelle schon einen Wert, dann liegt es an die Importparameter, ob dieser überschrieben, oder der importierte Datenwert addiert bzw. subtrahiert wird. Es kann immer nur ein Wert in einer Zelle geben.

Berechnen von Daten.

Die andere Weise, wie ein Datenblock entstehen kann, ist durch ein Calc Skript. Hier unterscheiden wir verschiedene Berechnungen:

Aggregation

Die Aggregation wird gemacht durch ein Calc Skript mit z. B. CALC DIM (Account); oder AGG(Product);

Hier entstehen nur Upperlevel Blocks, denn es ist immer mindestens ein Knotenelement im Spiel. Wir brauchen uns hier keine Sorgen zu machen, die notwendigen Blöcke werden immer erstellt.

Gleichung

Eine andere Form der Berechnung ist die Gleichung. Diese kann eine Form haben wie Produkt B = Produkt A *1.2;  und in diesem Fall wird der Wert nur geschrieben, wenn es für das Ziel, hier Produkt B, schon einen Block gibt. Wenn nicht, dann geht die Berechung ins leere und bringt das falsche Ergebnis.

Eine Lösung ist das Calc Kommando: SET CREATEBLOCKONEQ ON;

Wenn dieses eingesetzt wird, dann schaut Essbase, ob ein Block notwendig ist, und wenn ja, wird einer erstellt. Leider ist dieses aber ein sehr langsamer Prozess und Berechnungen mit diesem Parameter dauern meistens lange. Deshalb sollte dieser nach Möglichkeit nicht eingesetzt werden!

DATACOPY

Der Befehl DATACOPY erstellt auch Blöcke und es können, je nach Definition, Level0 als auch Upperlevel Blöcke entstehen. Beim DATACOPY hat man eine Quell- und einen Zielbereich. Dieses erstellt im Zielbereich Datenblöcke. Dieses ist also auch eine Methode, die oft eingesetzt wird, nicht um Werte zu kopieren, sondern um die benötigten Blöcke zu erstellen.

Wenn ein Block Datenwerte (und eine 0 ist ein Datenwert) hat, dann ist es einfach – es werden Blöcke erstellt. Fertig.

Jetzt geht es aber ins eingemachte…. Ob leere Blöcke aber kopiert werden, ist abhängig von der Setting SET COPYMISSINGBLOCK. In manchen Fällen ist es gewünscht, dass leere Blöcke entstehen, z.B. wenn danach eine Berechnung kommt mit einer Gleichung, wo diese Blöcke Daten bekommen. In anderen Fällen wollen wir es nicht, denn, je mehr unnötige Blöcke, je ineffizienter die Datenbank.

SET COPYMISSINGBLOCK ON

Wenn die Quelle keinen Block hat und das Ziel auch keinen Block, dann ist das Ergebnis kein Block.

Wenn die Quelle keinen Block hat und das Ziel aber einen leeren Block, dann ist das Ergebnis kein Block.

Wenn die Quelle einen leeren Block hat und das Ziel aber keinen Block, dann wird der leere Block kopiert und gibt es diesen auch im Ziel.

Abbildung 3: Logik von SET COPYMISSINGBLOCK ON

SET COPYMISSINGBLOCK OFF

Wenn die Quelle keinen Block hat und das Ziel auch keinen Block, dann ist das Ergebnis kein Block.

Wenn die Quelle keinen Block hat und das Ziel aber einen leeren Block, dann ist das Ergebnis kein Block.

Wenn die Quelle einen leeren Block hat und das Ziel aber keinen Block, dann ist das Ergebnis kein Block!

Abbildung 4: Logik von SET COPYMISSINGBLOCK OFF

Bei einem DATACOPY werden die Zielwerte überschrieben. Wenn man also einen leeren Bereich nimmt, kann man auf diese Weise einfach Bereiche in der Datenbank leer machen.

Fazit

Das Konzept vom Datenblock ist sehr wichtig für den Essbase Entwickler. Gutes Wissen rund um wie Datenblöcke entstehen und wann nicht ist essenziell für gute Calc Skripte. Das kopieren von leere Blöcke ist wichtig zu kennen.

Ihr Philip Hulsebosch

Veröffentlicht unter Essbase Getagged mit: , , , , , , ,