EPM 11.1.2.3 – Neue Funktionen Essbase

Oracle Essbase hat umfangreiche Änderungen erfahren, hervorzuheben sind u.a. die Möglichkeit,

  • neue Laufzeit-Variable für Kalkulations-Skripte,
  • sowie die obligatorische Erweiterung der Befehls-Referenz für MaxL, essbase.cfg und Kalkulation

und, und, und….

Laufzeit-Variablen in Kalkulationen (nur BSO)
Neben den bekannten Substitutions-Variablen erlaubt Version 11.1.2.3 die Verwendung von Laufzeit-Variablen, sie werden nicht über den bekannten Dialog „Substitutions-Variablen“ administriert, sondern zunächst mit Befehl „SET RUNTIMESUBVARS“ im Kalkulations-Skript deklariert.

Beispiel:
SET RUNTIMESUBVARS (Kalkulations-Befehl im Berechnungs-Skript)
{
AktuellerMonat = „September“;
};

Die Variablen selbst werden in geschweifte Klammern „{ }“ gesetzt, beendet mit einem Semikolon.

AktuellerMonat ist der Name der Variable (erforderlich), September ist ein Standardwert (optional). Ist ein Standardwert vorhanden, kann er bei Ausführung des Skriptes per MaxL oder Essbase API überschrieben werden.

Ist kein Standardwert vorhanden, muss er zur Laufzeit angegeben werden, das ist über die EssGetRuntimeSubVars-API möglich. Weitere Details hierzu sind in Kapitel Neue Funktionen in der Essbase-API zu finden.

Vorteil für den Anwender
Die Arbeit mit Variablen erleichtert Pflege und Erstellung von Kalkulations-Skripten, als Entwickler habe ich auf dem Kundensystem oft nicht die Möglichkeit, Substitutions-Variablen zu erstellen. Hier schaffen die neuen Laufzeit-Variablen Abhilfe, innerhalb des CalcScriptes deklariert, erfüllen sie den gleichen Zweck. Werden die Standardwerte angegeben, profitiere ich direkt von den Vorteilen.

Beispiele Sample.Basic
Laufzeitvariable

11123_Neue_Funktion_ESS_RTSV_1

11123_Neue_Funktion_ESS_RTSV_2

11123_Neue_Funktion_ESS_RTSV_3

Optimierter Zugriff bei Outline- und Dimensionsaufbau
Besonders schnell passiert es bei ASO-Outlines, aber auch bei sehr großen BSO-Outlines wird die Arbeit im Outline-Editor zäher, speziell Öffnen und Speichern erfordern dann deutlich mehr Geduld als man es eigentlich erwartet. Abhilfe kann ein neuer Essbase-Konfigurations-Parameter schaffen, der die Performance während Dimensions-Aufbau und Outline-Änderungen optimiert, dafür sorgt eine neue Hash-Tabellen-Logik, die im Wesentlichen den für Outline-Operationen verfügbaren Speicherbereich vergrößert. Die Größe der Hash-Tabelle wird als Essbase-Konfigurations-Parameter ESTIMATEDHASHSIZE in der Essbase.cfg konfiguriert und kann für ASO- und BSO-Datenbanken verwendet werden, jeweils für jede Datenbank auf dem Server oder für eine bestimmte Applikation / Datenbank.

Die erwartete Anzahl Elementnamen und Aliase wird in Millionen angegeben, Standardwert ist 5, d.h. 5 Millionen Strings können gleichzeitig in den Speicher geladen werden. Höchster möglicher Wert ist 256. Wird der Wert zu niedrig angesetzt, sind Performance-Einbußen bei der Modell-Bearbeitung zu erwarten, ein zu hoher Wert kann die Systemleistung insgesamt beeinträchtigen.

Beispiel:
ESTIMATEDHASHSIZE 5
Parameter gilt für alle Applikationen / Datenbanken auf dem Server.

ESTIMATEDHASHSIZE Sample.Basic 2
Parameter gilt nur für Datenbank Sample.Basic

Vorteil für den Admin
ASO ermöglicht sehr große Outlines, wenn für viele Elemente gleichzeitig viele Aliase existieren, kann dieser Parameter individuell den passenden Speicher bereitstellen und die Outline-Bearbeitung beschleunigen.
nach oben
Eindeutige Namen für SharedMember
Mit der Funktion „Doppelte Namen zulässig“ (Allow duplicate names) ist es möglich, unterschiedliche Elementnamen für Basis- und Shared-Member zu vergeben, diese Funktion muss vom Administrator innerhalb der Datenbank-Struktur aktiviert werden.

Nun kann man von dieser Einstellung profitieren, auch wenn die Datenbank keine doppelten Namen erlaubt. Im Front-End, z.B. SmartView, können SharedMember eindeutig identifiziert werden, indem man dafür einen qualifizierten Namen angibt.

Beispiel:
[East-State].[New York]
11123_Neue_Funktion_ESS_SharedMember_1

Vorteil für den Anwender
Anwender können die Auswahl von Elementen bzgl. SharedMember gezielt steuern, d.h. man kann entscheiden, ob ein Element der Haupt-Hierarchie oder der alternativen Hierarchie angezeigt werden soll. Das ist vor allem für Berechnungen, z.B. Verteilungs-Logiken sinnvoll, die sich gezielt auf Geschwister-Elemente dieser Elemente beschränken sollen.
nach oben
Konfiguration der Teradata TPT-API
Wenn Sie die Teradata TPT-API zum Laden von Daten verwenden, können Sie die Schnittstelle nun konfiguriert werden, sie bietet dadurch größere Flexibilität für individuelle Anpassungen.

Weitere (englischsprachige) Informationen finden Sie in Anhang A im Oracle Essbase SQL Interface Guide’s Guide.
nach oben

Neue Kalkulations-Funktionen
Wir begrüßen neue Kalkulations-Skript-Funktionen:

@CREATEBLOCK (Erstellt einen Block für Sparse-Elemente oder -Element-Kombinationen)
@INTERSECT (Gibt die Schnittmenge zweier Element-Listen zurück)
@ISMBRUDA (Gibt WAHR zurück, wenn das UDA für ein bestimmtes Element existiert)
@ISRANGENONEMPTY (Gibt WAHR zurück, wenn der gesuchte Element-Bereich Werte enthält)
@MEMBERAT (Gibt das Element aus einer Element-Liste zurück)
@RANGEFIRSTVAL / @RANGELASTVAL (Gibt den ersten / letzten Wert einer Element-Liste zurück)

@CREATEBLOCK
Erstellt einen Block für Sparse-Elemente oder Sparse-Element-Kombinationen, Dense-Elemente erhalten den Werte #MISSING.

Syntax @CREATEBLOCK(Elementname|Element-Liste (natürlich nur aus Sparse-Dimensionen!))

Fehlerhafte Ergebnisse, weil Datenblöcke nicht automatisch per Kalkulation erzeugt werden, sind eine große Herausforderung bei der Erstellung von Berechnungs-Skripten. Hilfreiche Informationen zur bekannten Thematik „Block-Erstellung“ finden Sie hier.

Aufgabe von @CREATEBLOCK ist, im Bottom-Up-Modus (Erläuterung im weiteren Text) schnell und zuverlässig alle benötigten Blöcke zu erstellen, dies geschieht ohne Lesen oder Schreiben von Daten. Darin liegt auch der Unterschied zum Erzeugen von Blöcken per DATACOPY-Befehl.

Beachte:

Existiert ein mit dieser Funktion angesprochener Datenblock bereits, hat das keine Auswirkungen auf den existierenden Block.
Enthält die Element-Liste ein Cross-Dimension-Element, z.B. [„100-10″->“New York“], wird ein Block für diese Kombination erzeugt.
@CREATEBLOCK kann auch in Outline-Formeln verwendet werden.
In einer leeren Datenbank werden keine Blöcke erzeugt.
Auf Sparse-Elementen wird die Kalkulation im Top-Down-Modus ausgeführt, es werden alle theoretisch möglichen Blöcke geprüft, nur die benötigten Blöcke werden erzeugt.
Beispiel Sample.Basic (Annahme: Market „New York“ ist ein Element einer Sparse-Dimension):

„New York“ (
@CREATEBLOCK („100“);
)

Auf Dense-Elementen wird die Kalkulation im Bottom-Up-Modus ausgeführt, basierend auf den bereits vorhandenen Blöcken werden nur die benötigten Blöcke erzeugt.

Beispiel Sample.Basic (Annahme: Account „Sales“ ist dense, Blöcke bestehen für [100-10] und [New York])

FIX(„100-10“, „New York“)
„Sales“ (
@CREATEBLOCK („100“);
)
ENDFIX

Nur Block „100“->“New York“ wird erstellt.

Das gleiche Ergebnis bringt folgender Befehl:
Beispiel Sample.Basic (Annahme: Account „Sales“ ist dense, Blöcke bestehen für [100-10] und [New York])

„Sales“ (
@CREATEBLOCK („100″->“New York“);
)

Beispiel Sample.Basic (Annahme: Blöcke bestehen für [100] und [Budget])
Budget = @CREATEBLOCK („100“);

Der bestehende Block für Element „Budget” wird nicht bearbeitet / verändert.

Auf einem Sparse-Element ausgeführt, werden mit @CREATEBLOCK möglicherweise mehr Blöcke erstellt, als benötigt, die unerwünschten Auswirkungen bezüglich Kalkulations-Dauer und Speichbedarf kennen wir. Es empfiehlt sich, diese Funktion innerhalb eines möglichst eng gefassten FIX-Bereichs und auf einem Dense-Element auszuführen, dann erstellt @CREATEBLOCK leere Datenblöcke als Ziel / Speicherort einer späteren Bottom-up-Kalkulation.

Unglaublich! Nach all den Jahren und von Generation zu Generation weitergereichten Tricks und Tips zum Erstellen von Datenblöcken, gibt es nun eine eigens dazu erstellt Funktion @CREATEBLOCK. Wir freuen uns!

@INTERSECT
Syntax: @INTERSECT(list1, list2)
Gibt die Schnittmenge zweier Element-Listen zurück

Beachte:
Diese Funktion behandelt Elemente und evtl. vorhandene SharedMember als ein Element, deshalb gibt es zwischen diesen Elementen keine Schnittmenge.

Beispiel Sample.Basic
@INTERSECT(@CHILDREN(„100“), @ATTRIBUTE(Can))
Die Schnittmenge enthält die Elemente 100-10 und 100-20.

@INTERSECT(@CHILDREN(„Colas“), @CHILDREN(„Diet Drinks“);
Die Schnittmenge ist leer, weil Basis-Element und SharedMember nur gemeinsam betrachtet werden können, beide gelten als ein Element.

FIX (@INTERSECT(@CHILDREN(„100-10“), @CHILDREN(„Diet Drinks“)))
Sales = 500;
ENDFIX;

Die Schnittmenge ist leer (wg. SharedMember), dadurch gibt es keinen funktionierenden FIX auf Produkte, alle Produkte erhalten auf Kennzahl Sales den Wert 500.

@ISMBRUDA
Syntax: @ISMBRUDA(mbrName, UDAStr)
Gibt WAHR zurück, wenn das gesuchte UDA für ein bestimmtes Element existiert.

Beachte:
Wird ein unbekannter Elementname angegeben, gibt die Validierung einen Fehler zurück.

Beispiel Sample.Basic
@ISMBRUDA („New York“, „Major Market“) and @ISMBRUDA([Market].[New York], „Major Market“)
Funktion gibt WAHR zurück.

@ISMBRUDA(„New York“, „Small Market“) AND @ISCHILD(„Market“)
“New York” ist kein „Small Market” die erste Bedingung gibt FALSCH zurück.

IF(@ISMBRUDA(„New York“)
Ohne UDAString schlägt die Validierung fehl, es fehlt ein erforderlicher Parameter

@ISRANGENONEMPTY
Syntax: @ISRANGENONEMPTY(ZEROASDATA|ZEROASMISSG, mbrList)
Prüft, ob ein bestimmter Element-Bereich Werte enthält, gibt WAHR zurück, wenn Werte vorhanden sind, gibt FALSCH zurück, wenn der Bereich leer ist. Rechenintensive Operationen können so auf Bereiche beschränkt werden, in denen auch tatsächlich Werte vorhanden sind.

Beachte:
Der Anwender definiert, wann ein Bereich leer ist. Was heißt das?

Ein Bereich mit #MISSING ist immer ein leerer Bereich, “0” kann wahlweise als #MISSING (Parameter ZEROASMISSG) oder als Wert “0” (Parameter ZEROASDATA) interpretiert werden:

Beispiel Sample.Basic
@ISRANGENONEMPTY(ZEROASDATA, Sales->Cola)
Die Bedingung gibt WAHR zurück, da die Kombination von Cola und Sales kein #MISSING enthält.

FIX (Budget)
Sales (IF(@ISRANGENONEMPTY(ZEROASMISSG, Jan:Mar))
Sales = 500;
ENDIF;);
ENDFIX

Die Bedingung gibt WAHR zurück, wenn der Bereich Januar bis März keinen Wert enthält, dann werden alle Werte der Kombination von Budget und Sales auf 500 geändert.

@MEMBERAT
Syntax: @MEMBERAT(mbrList, mbrIndex)
Gibt das Element aus einer Element-Liste zurück

Beachte:
Für Parameter mbrIndex wird eine Ganzzahl erwartet. Ein positiver Memberindex beginnt am Anfang der Liste („1” gibt das erste Element einer Liste zurück), ein negativer Memberindex beginnt am Ende der Liste („-1” gibt das letzte Element einer Liste zurück).
Bei allen anderen Zahlen gibt die Validierung einen Fehler zurück.

Beispiel Sample.Basic
@MEMBERAT(@CHILDREN(„Colas“), 1);
Gibt Element 100-20 (Diet Cola) zurück.

Sales = @ MEMBERAT(@CHILDREN(„Total Expenses“), -1);
Gibt Element Misc zurück, da es das letzte Kind-Element von Total Expenses ist.

@MEMBERAT(@CHILDREN(„100-10“), 1);
Gibt einen Fehler zurück, da es kein Kind-Element für „100-10“ gibt.

@RANGEFIRSTVAL
Syntax: @RANGEFIRSTVAL(SKIPNONE | SKIPMISSING | SKIPZERO | SKIPBOTH, mbrList)
Gibt den ersten Wert aus einer Element-Liste zurück, der die Kriterien des ersten Funktions-Parameters erfüllt.

Zentrale Kriterien sind die Parameter SKIPNONE | SKIPMISSING | SKIPZERO | SKIPBOTH.
Das heißt, es wird der erste Wert eines Element-Bereiches zurückgegeben, gleichgültig, ob dies ein Wert, eine „0“ oder #MISSING ist (SKIPNONE),

der nicht leer ist (SKIPMISSING),
der keine „0“ enthält (SKIPZERO) oder
der keine „0“ und kein #MISSING enthält (SKIPBOTH )
Beachte:
Die Funktion gibt #MISSING zurück, wenn kein Element der Liste dem Suchkriterium entspricht.

Beispiel Sample.Basic
@RANGEFIRSTVAL(SKIPMISSING, @CHILDREN(„Qtr1“)); oder
@RANGEFIRSTVAL(SKIPMISSING, „Jan“:“Mar“); oder
@RANGEFIRSTVAL(SKIPMISSING, („Jan“,“Feb“,“Mar“))

Alle 3 Statements geben den ersten vorhandenen Wert (= Nicht #MISSING) zurück, dabei werden die Elemente in der Reihenfolge der Outline durchsucht.

@RANGEFIRSTVAL(SKIPZERO, @CHILDREN(„Jan“));
Gibt #MISSING zurück, da es kein Kind-Element für Jan gibt.

@RANGEFIRSTVAL(SKIPBOTH, @CHILDREN(„Qtr1“));
Gibt den ersten vorhandenen Wert (= Nicht #MISSING und Nicht 0) gem. Reihenfolge in der Outline zurück. Wenn alle Monate Werte enthalten, wird Jan zurückgegeben.

@RANGEFIRSTVAL (SKIPBOTH, (Actual->Feb, Actual->Mar, Actual->Jan))
Gibt den ersten vorhandenen Wert (= Nicht #MISSING und Nicht 0) in der Reihenfolge der Liste zurück. Wenn alle Monate Werte enthalten, wird Feb zurückgegeben.

@RANGELASTVAL
Syntax: @RANGELASTVAL(SKIPNONE | SKIPMISSING | SKIPZERO | SKIPBOTH, mbrList)
Gibt den letzten Wert aus einer Element-Liste zurück, der die Kriterien des ersten Funktions-Parameters erfüllt.

Zentrale Kriterien sind die Parameter SKIPNONE | SKIPMISSING | SKIPZERO | SKIPBOTH.
Das heißt, es wird der letzte Wert eines Element-Bereiches zurückgegeben, gleichgültig, ob dies ein Wert, eine „0“ oder #MISSING ist (SKIPNONE),

der nicht leer ist (SKIPMISSING),
der keine „0“ enthält (SKIPZERO) oder
der keine „0“ und kein #MISSING enthält (SKIPBOTH )
Beachte:
Die Funktion gibt #MISSING zurück, wenn kein Element der Liste dem Suchkriterium entspricht.

Beispiel Sample.Basic

FIX(„100-10“, „New York“, „Sales“, „Jan“)
„Budget“ = @RANGELASTVAL(SKIPBOTH, @CHILDREN(Qtr1)->“Actual“);
ENDFIX

Das Budget soll den Wert der Cola-Verkäufe im Januar vom letzten Actual-Wert in Quartal 1 übernehmen.

@RANGELASTVAL(SKIPMISSING, @CHILDREN(„Qtr1“)); oder
@RANGELASTVAL(SKIPMISSING, „Jan“:“Mar“); oder
@RANGELASTVAL(SKIPMISSING, („Jan“,“Feb“,“Mar“))

Alle 3 Statements geben den letzten vorhandenen Wert (= Nicht #MISSING) zurück, dabei werden die Elemente in der Reihenfolge der Outline durchsucht.

@RANGELASTVAL(SKIPZERO, @CHILDREN(„Jan“));
Gibt #MISSING zurück, da es kein Kind-Element für Jan gibt.

Geänderte Kalkulations-Funktionen
Funktion @NAME hat ein weiteres, optionales Argument erhalten. Es kommt nur zur Anwendung, wenn die Datenbank-Option „Doppelte Elementnamen zulässig“ (allow duplicate member names) aktiviert ist.

Parameter UNIQUE zwingt @NAME, den qualifizierten, eindeutigen Elementnamen zurückzugeben, wenn der Elementname mehrfach vorhanden ist.

Ist der Elementname bereits eindeutig oder ist „Doppelte Elementnamen zulässig“ nicht aktiviert, wird Parameter UNIQUE ignoriert und der einfache Elementname wird zurückgegeben.

Beispiel Sample.Basic:
@MEMBER(@NAME(@CURRMBR(„Market“), UNIQUE))
Dimension “Market” enthält 2 Elemente “New York”, mit qualifiziertem Namen [State].[New York] und [City].[New York].
Bei Berechnung von Element “New York State” gibt UNIQUE den qualifizierten Namen [State].[New York] an die @NAME-Funktion zurück.
nach oben
Neue Parameter in der Essbase-Konfiguration (essbase.cfg)
Neue Konfigurations-Parameter

  • ENABLERTSVLOGGING: Protokolliert die neuen Laufzeit-Ersatzvariablen (Runtime-Substitution-Variables). Ist ebenfalls eine neue Funktion im Kalkulations-Manager
  • ESTIMATEDHASHSIZE: Definiert die Größe des Speicherbereichs der Hash-Tabelle
  • UNICODEENABLE: Ermöglicht die Erstellung von Unicode-Modus-Applikationen
  • ENABLERTSVLOGGING


Definiert, ob die in Berechnungs-Skripten verwendeten Laufzeit-Variablen (s. EPM 11.1.2.3 – Neue Funktionen CalcManager) in der Oracle Essbase Log-Datei protokolliert werden, Standardwert ist FALSE.
Der Parameter gilt wie üblich wahlweise für jede Datenbank auf dem Server oder für eine bestimmte Applikation / Datenbank.

Beispiel
ENABLERTSVLOGGING TRUE
ENABLERTSVLOGGING Sample.Basic TRUE

ESTIMATEDHASHSIZE
Definiert die Größe des Speicherbereichs der Hash-Tabelle (erwartete Anzahl Elementnamen und Aliase in Millionen, die in den Speicher geladen werden).

Der Parameter gilt für jede Datenbank auf dem Server oder für eine bestimmte Applikation / Datenbank.

Beispiel: ESTIMATEDHASHSIZE Sample.Basic 5

UNICODEENABLE
Ermöglicht es, Unicode-Modus-Applikationen zu erstellen und Non-Unicode-Appliktionen zu Unicode-Applikationen zu migrieren, ohne dass der Essbase-Server per EAS, MaxL oder API in den Unicode-Modus gesetzt wird. Der Parameter gilt Server-weit.

Beispiel: UNICODEENABLE.

Nicht mehr vorhandene Konfigurations-Parameter
Folgende Konfigurations-Parameter wurden gelöscht, belässt man sie in Datei essbase.cfg, werden sie ignoriert, sie müssen also nicht zwingend aus Datei essbase.cfg gelöscht werden.
PRELOADALIASNAMESPACE
PRELOADMEMBERNAMESPACE
nach oben

Neuer MaxL-Befehl
Die Befehls-Erweiterung with runtimesubvars RTSV-LIST ermöglicht es, den neuen Essbase-Laufzeit-Variablen die benötigten Werte zur Laufzeit per MaxL mitzugeben.

Beispiel:

execute calculation Sample.Basic.Calc3 with runtimesubvars ‘AktuellerMonat=”Sep”;
Preisanpassung=1.05;
PlanBasis= „Actual“->“Sales“;’;

In Sample.Basic wird Berechnungs-Skript Calc3 aufgerufen, die im Skript definierten Laufzeit-Variablen erhalten hier die benötigten Werte. Ist nur erforderlich, wenn im Berechnungs-Skript keine Standardwerte angegeben sind.


Neue Funktionen in der Essbase-API
Der Vollständigkeit halber sei hier ohne weitere Erläuterung auf die neuen API-Funktionen verwiesen:

Neue C Haupt-API’s
EssCalcFileWithRuntimeSubVars
Führt ein Berechnungs-Skript auf der aktiven Datenbank mit der angegebenen Laufzeit-Variablen aus. Die Variablen können in einer Text-Datei (mit Endung .rsv) als Text oder Schlüssel/Wertpaar definiert werden.

EssCalcWithRuntimeSubVars
Führt ein Berechnungs-Skript auf der aktiven Datenbank mit der angegebenen Laufzeit-Variablen aus. Die Variablen werden als Text oder Schlüssel/Wertpaar zur Laufzeit definiert.

EssGetRuntimeSubVars
Diese Funktion ist die Schnittstelle zu einem Client, in dem das Berechnungs-Skript läuft. Sie fragt alle Informationen (Variablen-Name, Wert, Beschreibung) ab, die in der Deklaration SET RUNTIMESUBVARS der Variable im Berechnungs-Skript angegeben sind.

Neue C Haupt-Strukturen
ESS_RUNTIMESUBVARS_DESC_T
Wird von der API-Funktion EssGetRuntimeSubVars verwendet, wird für den Datentyp des RTSV-List-Argumentes benötigt, das Argument ist eine Liste der Laufzeit-Variablen im Berechnungs-Skript.

Dokumentation für Apple Mobil-Geräte optimiert

Fast die gesamte EPM-Dokumentation ist in einer für Apple Mobilgeräte (iPad, iPhone, iPod) optimierten Darstellung verfügbar, zu finden unter „mobi“ und „ePub“.
http://docs.oracle.com/cd/E40248_01/nav/portal_3.htm

11123_Neue_Funktion_Planning_Doku_Apple

Berater, entwickler und fan von Oracle Essbase und Planning.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*