Manchmal gibt es in einem Produkt eine tolle neue Funktionalität, aber eine essentielle Option fehlt, um das gesamte Potential dieser Neuerung anzuwenden. So ist es auch mit der Essbase Aggregate Storage Option (ASO). Es gibt den Datenbank Export, aber leider nur in dem von Essbase originären Format („native format“), und nicht im Spaltenformat. Wo im Block Storage beide Optionen zur Verfügung stehen, muss man sich im ASO auf das originäre Format beschränken.
Wie sie sicherlich wissen: der Datenbank Export ist superschnell und ASO hat meistens viele Daten. Essbase selbst kann sehr gut mit seinem eigenen, originären Format (native format) umgehen, aber die Struktur, in der die Daten dann vorliegen, verhindert eine Weiterverwendung außerhalb von Essbase. Harry Gates hat eine Lösung mit dem Namen “ASO Export Parser” erstellt und dieser Beitrag schaut sich diese Funktion des cubeSavvy Utilities mal näher an.
Abbildung 1: Logo von cubeSavvy
So, was genau ist nun das Problem mit dem originäre Dateiformat von Essbase? Ist eine ASO Datenbank nicht die Datenbank für das Reporting und daher die Endstation der Daten? Und warum sollte man ASO Daten in einer andern Datenbank einspielen, wenn diese schon in der besten Datenbank der Welt sind? Berechtigte Fragen, aber Oracle Essbase Datenbanken sind Teil einer größeren IT Architektur. Es gibt mindestens drei gute Gründe, warum ASO Datenbank Daten in anderen Datenbanken eingespielt werden könnten:
- Benutzer geben in ASO zusätzliche Daten ein, Korrekturen oder Anderes. Diese werden in andere Systeme nicht wieder erneut eingegeben.
- In ASO können Berechnungen wie Allokationen stattfinden. Die Ergebnisse können woanders auch Verwendung finden.
- Wiederaufsetzbare Prozesse. Wenn was schief geht, sollte man auf den alten Stand wieder zurückkommen können.
Es ist also oft nicht sinnvoll, diese Daten nur in ASO vorzuhalten. Es braucht also einen zuverlässigen und sicheren Prozess, um die Daten aus ASO Datenbanken wieder weiter zu verarbeiten.
Berechnungen verwenden oft Substitutionsvariablen mit einer Zeitreferenz. Auch gibt es Prozesse, die in einer bestimmten Reihenfolge ausgeführt werden müssen, um das richtige Ergebnis zu bekommen. Eine Wiederholung dieser Berechnungen, im Falle eines zurücksetzen der Daten, würde dann entsprechend lange dauern. Es könnten dann auch schnell Fehler auftreten und das Endergebnis wäre anders als vor diesen Arbeiten.
Ein Datenimport ist meistens verbunden mit vielen anderen Prozessschritten. Diese Schritte sollten ohne Probleme an dem Anfang der Kette erneut gestartet werden können, ohne dass sich das Ergebnis ändert. Nur so kann sichergestellt werden, dass, wenn ein Fehler auftritt, dieser nach Korrektur keinen Einfluss auf das Ergebnis hat.
Sie wissen sicherlich, dass es keinen schnelleren Weg gibt, Daten aus einer Oracle Essbase Datenbank zu exportieren, wie den „Daten Exportieren“ Prozess. Dieser ist optimiert und ist der stabilste und verlässlichste Export. Leider kann man keinen Filter anwenden und im ASO gibt es nur einen Export des Level 0, wie auch in der Abbildung 2 ersichtlich.
Abbildung 2: Export Database einer ASO Datenbank.
Was ist das originäre Format und warum ist es ein Problem?
Das native oder originäre Datenformat ist der effizienteste Weg, um Essbase Daten in einer Text Datei zu speichern. Aber dieses Format ist nicht geeignet, wenn man diese Daten filtern möchte in eine relationale Tabelle oder mit MS Excel laden will. Die Struktur eines Exports der ASOSamp Applikation ist sichtbar in der Abbildung 3.
Abbildung 3. Datei im originären Format.
Die Elemente einer Dimension werden in den Spalten abgelegt – in diesem Beispiel sind das 5 Elemente der Dimension … Hierdurch können in einer Zeile maximal 5 Datenwerte nacheinander stehen. Wenn es aber für das letzte Element “Returns” keinen Wert gibt, dann wird dieser ohne Platzhalter weggelassen. Wenn ein Element vor dem letzten mit Daten keinen Wert hat, dann wird dieser mit einem Platzhalter versehen.
Eine Dimension liegt in den Spalten, alle anderen Dimensionen sind in den Zeilen abgelegt. Aus dieser Logik ist es so, dass in der Zeile 2 immer ein Element aus jeder dieser Zeilendimensionen vorhanden ist. Danach kommen die Datenwerte in der jeweiligen Reihenfolge wie die Elemente der Spaltendimension. Wenn sich aber jetzt ein Element aus einer Zeilendimension zu seinem vorherigen Element ändert, dann wird der neue Elementname in der Zeile angezeigt. Die Elemente, die sich nicht ändern, werden nicht wiederholt. Aus der Logik ist es so, dass in jeder Zeile minimal 1 neues Element mit seinen Daten aufgeführt wird.
Dieses Format macht es so schwierig, diese Datei zu verarbeiten. Denn die wiederholten Elemente, die nicht angezeigt werden, hängen von der Dimensionsstruktur ab. Diese braucht man also zum entschlüsseln.
Fragen sie sich, wie das in Abbildung 3 dargestellte Format in eine spaltenstrukturierte Datei umgeformt werden kann? Welche Schritte wären hierfür notwendig? In der Abbildung 4 habe ich die notwendigen Einfügungen in roter Farbe eingetragen. Hier sieht man die Elementnamen, die in der nativen Form weggelassen werden, aber im Spaltenformat notwendig sind. Es sind sehr viele, daher auch die starke Komprimierung in diesem Format!
In der Originaldatei gab es 5 Datenspalten für die Elemente Original Price“ „Price Paid“ „Units“ „Transactions“ and „Returns“. Diese wurden jetzt in die Zeilen gebracht, sodass jede Zeile immer nur ein Datenwert hat. Es ist ein Datensatz.
Die Zeile 4 in der Originaldatei mit dem Element “Photo Printers” und “14010” sind jetzt in der Abbildung 4 in die Zeilen 9 bis 12 gerutscht. Dort wird das Element “Camcorders” ersetzt durch das Produkt “Photo Printers” und das Element „017589“ mit „14010“.
Abbildung 4: In Spalten Format umgewandelte Datei. Die rot markierten Namen wurden in der Struktur durch die Umwandlung hinzugefügt.
Es ist auch erkennbar, dass die Elemente sich in jeder Zeile wiederholen. Somit entsteht in jeder Zeile ein kompletter Datensatz mit genau einem Element aus jeder Dimension, am Ende, ganz rechts, steht der Datenwert.
In der Abbildung 5 sehen sie eine Datei im Spaltenformat, die durch das cubeSavvy Utilities erstellt wurde. Wie Sie dabei vorgehen müssen, zeige ich Ihnen im folgenden Abschnitt.
Abbildung 5. Datei in Spaltenformat.
Wie kann das Tool cubeSavvy Utilities hier helfen?
Nun, ganz einfach, es wandelt eine Datei im originären Format in eine Datei im Spaltenformat um.
CubeSavvy Utilities kann von der Webseite http://www.cubesavvy.com/ heruntergeladen werden. Diese Werkzeugkiste in der Version 4.0 enthält den “Outline XML Parser”, “MDX Query”, “File Filter” und natürlich den “ASO Export Parser”. Dieses Tool wurde durch Herrn Harry Gates, einen sehr talentierten Entwickler und Essbase Fan erstellt.
Die Basis für den Umwandlungsprozess mit dem “ASO Export Parser” sind
- eine Exportdatei im originären Format und
- die Essbase Outline.
In dem Umwandlungsprozess muss der „ASO Export Parser” die fehlenden Elementnamen identifizieren und an der richtigen Stelle einfügen. Hierzu braucht der „ASO Export Parser” die Outline als Quelle für Dimensionselemente.
Wenn eine Verbindung zum Essbase Server existiert, macht das Tool seine Abfragen auf die Essbase Outline mit der Essbase Java API.
Eine Offline Alternative ist der XML Export der Outline, um als Quelle zu verwenden.
Was sind meine Erfahrungen mit dem ASO Export Parser?
Ich habe die ASOSamp Applikation für meine Tests verwendet, denn diese kommt mit der Installation von Essbase und ist ihnen vielleicht bekannt. Damit können Sie auch meine Testergebnisse validieren.
Die Installation
Eine echte Installation ist nicht notwendig. Die heruntergeladene Datei wird in ein Verzeichnis entpackt, wo es seine eigene Ordnerstruktur erstellt. Dieses ist in der Abbildung 6 sichtbar.
Abbildung 6: Ordner Struktur nach dem auspacken.
Das ganze Tool ist im Java geschrieben und ohne Installation zu verwenden. Nur den Pfad von Java des Rechners in die Config-Datei eintragen und los geht es.
Die cubeSavvy Utilities können mit einem Doppelklick auf die Datei cubeSavvyUtilities.jar gestartet werden.
Die Benutzeroberfläche
Abbildung 7 zeigt die Benutzeroberfläche, oben rechts können dann die Verbindungsdaten eingegeben werden.
Abbildung 7: Benutzeroberfläche vor dem Anmelden.
Nach einer Anmeldung aktivieren sich die Reiter mit den verschiedenen Tools. Wenn sie den Reiter „ASO Export Parser“ wählen dann sehen sie ein Fenster wie in der Abbildung 8 gezeigt. Dort gibt es wieder Reiter mit den Namen “Parse” und einen mit dem Namen “Member Filter”. Auf dem ersten kann die Applikation und die Datenbank selektiert werden. Die Liste ist gut programmiert, denn in der Übersicht werden nur ASO Applikationen gezeigt. In der dritten Zeile wird die Datei im originären Format selektiert und in der fünften Zeile werden der Pfad und der Dateiname der in Spaltenformat konvertierten Datei eingegeben. Die Datei wird erstellt, wenn diese nicht vorhanden ist.
In der Zeile „MaxL export outline XML file“ kann anstatt der Applikation und Datenbank die als XML exportierte Outline angegeben werden. Dann kann die Konvertierung ganz ohne Serverzugriff stattfinden.
Der Umwandlungsprozess wird mit dem Knopf “Parse to columns” gestartet.
Abbildung 8: Der ASO Export Parser.
In der Abbildung 9 wird gezeigt, wie man eine Essbase Outline als XML Datei abspeichert. Dieses kann sehr einfach mit einem einzigen Befehl ausgeführt werden.
Abbildung 9: Export der Outline in XML Format.
Abbildung 10. Konvertierung der Daten mittels einer Outline XML Datei.
Der Reiter “Member Filter” beschreibt es schon – es ist auch möglich die Ausgabedatei mit Filterkriterien zu versehen. Dieser Filter kann auf alle Dimensionen Anwendung finden und damit können große Dateien im originären Format auch in einzelne Dateien Zerlegt werden. Dieses ist eine sehr praktische Funktion, wenn man Plan- und Ist-Daten voneinander trennen möchte, oder wenn Daten von bestimmten Produkten aus dem Export entfernt werden müssen. Natürlich kann der Filter auch auf Monate gelegt werden.
Wie in der Abbildung 11 sichtbar, gibt es die aus anderen Produkten bekannten Selektionen wie <CHILDRENOF, <OFSAMEGENERATION, <ONSAMELEVEL, <DESCENDANTSOF, <ALLSIBLINGSOF und <LSIBLINGOF (wenn angewandt auf Feb, bringt es Jan). Seit Version 4 gibt es auch die Funktion, mit <MEMBER ein einzelnes Element auszuwählen.
Automatisierung
Nach meiner Ansicht ist ein Softwaretool für den echten Betrieb unbrauchbar, wenn es keine Automatisierungsfunktion hat. Darum war mir der automatische Ablauf mit einer Konfigurationsdatei ein so wichtiger Teil meiner Tests. Ich kann hier schon dem Ergebnis vorgreifen, denn der ASO Export Parser hat diese Tests gut überstanden.
Das Java Programm kann von der Kommandozeile mit einer Konfigurationsdatei gestartet werden. Ein Beispiel einer Konfigurationsdatei ist in Abbildung 12 gegeben. Leider kann man in dieser Version noch keine Parameter zur Konfigurationsdatei mitgeben, wie zum Beispiel den Namen der Applikation und Datenbank. Aber, ich vermute, dieses wird es bald in einer nächsten Version geben.
Abbildung 12: Die Konfigurationsdatei. Die Zeilen 38 bis 42 sind für den ASO Export Parser.
Abbildung 13: Batch Fenster nach dem Prozesslauf.
Auch in einem Test, in dem ich 200 sehr große Exporte seriell gemacht habe, gab es gute und konsistente Erfolge. Auch das Abfangen von Fehlern verlief gut.
Die Filterdefinition sieht etwas anders aus als in der Benutzeroberfläche, aber es wurde ein Beispiel in die Konfigurationsdatei aufgenommen, welche dann angepasst werden kann.
Die Performance
Die Daten werden in dem originären Format sehr effizient gespeichert. Darum ist die Datei in Spaltenformat viel größer. In dem Fall mit der ASOSamp Applikation wuchs die Datei um den Faktor 20. Also wurde die Datei mit 1 Mb zu einer von 20 Mb.
Der ASO Typ wird normalerweise eingesetzt wenn es viele Daten und viele Dimensionen gibt. Um ein solches Tool in der Praxis zu verwenden, sollte ein Umsetzen in das Spaltenformat auch schnell sein. In Tabelle 1 habe ich einige der Ergebnisse dargestellt.
Dateigröße des ASO Export | Dateigröße in Spaltenformat | Benötigte Zeit |
Mb | Mb | Sekunden |
8 | 124 | 20 |
15 | 249 | 104 |
20 | 374 | 45 |
25 | 498 | 82 |
30 | 623 | 265 |
36 | 748 | 104 |
41 | 872 | 95 |
46 | 997 | 96 |
51 | 1122 | 102 |
57 | 1247 | 121 |
112 | 2447 | 249 |
216 | 4958 | 560 |
Tabelle 1: Leistung der Konvertierung
Wie sie sehen können, ist die Leistung sehr gut. Auch größere Dateien werden schnell in Spaltenformat umgesetzt. Um ihnen eine Größenordnung zu geben: die 200 Mb Datei enthält mehr als 40 Million Datenzellen in ASO.
Auch mit der Filterfunktion war die Performance gut. Dieses ist dargestellt in der Tabelle 2.
Dateigröße des ASO Export | Dateigröße in Spaltenformat | Benötigte Zeit | Filter |
Mb | Mb | Sekunden | |
25 | 124 | 97 | <CHILDREN OF „Antares – CO“ |
25 | 15 | 91 | <CHILDREN OF „Antares – CO“<CHILDREN OF „Digital Cameras/Camcorder“ |
Tabelle 2: Leistung der Konvertierung mit Filter
Schlussfolgerungen
Harry Gates hat eine gute Werkzeugkiste für die Essbase Fans programmiert. Der ASO Export Parser füllt eine wichtige Lücke in der ASO Funktionalität, die Oracle liegengelassen hat.
Die cubeSavvy Utilities werden weiter entwickelt. Ideen und Hinweise zu Bugs aus der Community sind willkommen. Ich habe mir die Version 4.0 angesehen und glaube, dass der ASO Export Parser schon gut genug ist, um in der Praxis eingesetzt zu werden. Er läuft stabil und ist schnell in dem, was er machen soll.
Ich kann Ihnen nur empfehlen, die Utilities herunterzuladen und selber zu testen.
Ihr Philip Hulsebosch.
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.