DATACOPY in einer ASO Datenbank

Viele denken, dass es in einer Aggregate Storage Datenbank keine Calc Skripte gibt. Nun, das ist nicht ganz falsch, aber es gibt 2 Funktionen, die wir in Blockstorage in Calc Skripte ausfĂĽhren: DATACOPY und ALLOCATION. In diesem Beitrag zeige ich, wie einfach eine Datenkopie innerhalb der ASO Storage Datenbank zu machen ist.

Wie es funktioniert

Ich nehme die ASOSamp.Sample Datenbank, die als Beispielanwendung in Essbase verfügbar ist. Hier möchte ich die Daten von dem Element „Previous Year“ in das „Current Year“ kopieren.

Abbildung 1: Daten der ASOSamp vor dem Kopieren.

Wir brauchen zum Kopieren ein MaxL Skript und eine Datei mit einem Befehl darin. MaxL skripte kennen sie Wahrscheinlich schon, aber dieses hat 3 unterschiedliche Teile, die ich in hierunten farblich markiert habe.

  • Der erste Teil ist, dass eine Berechnung auf der ASOSamp mit einem Skript ausgefĂĽhrt werden soll.
  • Der zweite Teil gibt die Point-Of-View (POV) zu diesem Skript.
  • Der dritte Teil definiert die Region, welche involviert ist.

MaxL Skript

execute calculation on database ‚ASOsamp‘.’Sample‘ with local script_file „C:\temp\ASO_COPY.csc“

POV „Crossjoin(Descendants([Geography], [Geography].Levels(0)),

Crossjoin(Descendants([Transaction Type], [Transaction Type].Levels(0)),

Crossjoin(Descendants([Stores], [Stores].Levels(0)),

Crossjoin(Descendants([Products], [Products].Levels(0)),

Crossjoin(Descendants([Income Level], [Income Level].Levels(0)),

Crossjoin(Descendants([Age], [Age].Levels(0)),

Crossjoin(Descendants([Promotions], [Promotions].Levels(0)),

Crossjoin({[Cash]},

Crossjoin({[Original Price]},

Descendants([MTD], [Time].Levels(0) ))))))))))“

SourceRegion „{[Previous Year],[Current Year]}“;

Wichtig, alle Dimensionen mĂĽssen aufgenommen werden. Also nicht, wie in MDX, wo man die TopKnoten weglassen kann.

Die Skript Datei muss aus dem MaxL zu finden sein. Wenn das MaxL auf dem Server gestartet wird, dann sollte der Pfad aus der Sicht des Servers definiert werden. Zum Beginnen ist es am einfachsten, wenn das MaxL lokal liegt.

Skript Datei

Der Befehl in der Skript Datei bezieht sich auf die SourceRegion in dem MaxL. Es ist ein MDX Statement welcher hierunten dargestellt ist.

([Current Year]) := ([Previous Year]) ;

Abbildung 2: Skript Datei

Beim AusfĂĽhren des MaxL wird eine Ausgabe wie in Abbildung 3 dargestellt. Hierin sieht man, dass Shared Member nicht berĂĽcksichtigt werden.

Abbildung 3: Erfolgreiches Kopieren der Daten.

Ein Aktualisieren des Excel Blattes zeigt jetzt die kopierten Daten an.

Abbildung 4: Die Daten wurden kopiert.

Noch ein Beispiel

In dem nachfolgenden Beispiel zeige ich, wie der Dezember-Wert von dem Vorjahr in den Januar des Aktuellen Jahres kopiert wird. Eine häufig verwendete Funktion bei Inventar oder andere Bilanz-Größen.

MaxL Skript 2

Hier wird die SoureRegion erweitert mit der Dimension Time. Es wurden 2 Tupel gebildet.

execute calculation on database ‚ASOsamp‘.’Sample‘ with local script_file „C:\temp\ASO_COPY.csc“

POV „Crossjoin(Descendants([Geography], [Geography].Levels(0)),

Crossjoin(Descendants([Transaction Type], [Transaction Type].Levels(0)),

Crossjoin(Descendants([Stores], [Stores].Levels(0)),

Crossjoin(Descendants([Products], [Products].Levels(0)),

Crossjoin(Descendants([Income Level], [Income Level].Levels(0)),

Crossjoin(Descendants([Age], [Age].Levels(0)),

Crossjoin(Descendants([Promotions], [Promotions].Levels(0)),

Crossjoin({[Cash]},

{[Original Price]} ))))))))“

SourceRegion „Crossjoin({[Previous Year],[Current Year]},{[Jan],[Dec]})“;

Skript Datei 2

Die Skript Datei wird entsprechend erweitert. Das Ziel steht, wie bei Calc Skripte, an der linken Seite.

([Current Year],[Jan]) := ([Previous Year],[Dec]) ;

Und eine Aktualisierung zeigt, dass die Kopie der Zahl funktioniert hat.

Abbildung 5: Die Dezember Daten wurden in den Januar kopiert.

Ihr Philip Hulsebosch

Veröffentlicht in Essbase Verwendete Schlagwörter: , ,