Essbase-Berechnungsskripte durch Verwendung von NOT in IF-Anweisungen optimieren

In Oracle Essbase-Berechnungsskripten können Sie mit der if-Anweisung Code ausführen, wenn eine Bedingung zutrifft. Mit else- und else if-Anweisungen geben Sie die neuen Bedingungen an, die getestet werden sollen, wenn die zuvor ausgewertete Bedingung nicht zutrifft.

Sie können Code, der if- und else if-Anweisungen verwendet, optimieren. Dazu analysieren Sie die Bedingung, die auf den Großteil Ihrer Daten zutrifft, und verschieben die Auswertung dieser Bedingung dann an den Anfang des Codes, damit sie so früh wie möglich ausgeführt wird.

Beispiel für ein Berechnungsskript für Sample.Basic, wobei Accounts und Time dicht besetzt sind:

SET UPDATECALC  OFF;
"SalesYTD"(
    IF(@ismbr("Jan"))
        SalesYTD" = "Sales";
Else
        "SalesYTD"="Sales" + @prior("SalesYTD");
Endif
)

In diesem Fall erfüllen über 90% der Daten das Kriterium der else-Bedingung. Nur etwa 10% der Daten erfüllen das Kriterium der if-Bedingung. Aufgrund der @prior-Funktion in der else-Bedingung muss Januar vor allen anderen Monaten berechnet werden. Beim Ausführen dieser Berechnung wird die folgende insgesamt verstrichene Zeit gemeldet:

Total Calc Elapsed Time for [IF.csc] : [0.203] seconds

Beachten Sie, dass bei dieser Berechnung das Element "SalesYTD" im Zellenmodus berechnet wird. Das bedeutet, dass der Monat Januar unabhängig von der Reihenfolge der bedingten if-Anweisungen als Erstes berechnet wird, da er in der Modellstruktur vor anderen Monaten steht.

Derartige Skripte können Sie optimieren, indem Sie die Anweisungen neu anordnen und einen NOT-Operator wie in diesem Beispiel gezeigt zur ersten Bedingung hinzufügen:

SET UPDATECALC  OFF;
"SalesYTD"(
    IF(NOT(@ismbr("Jan")))
        "SalesYTD" = "Sales" + @prior("SalesYTD");
Else
        "SalesYTD"="Sales";
Endif
)

Die Berechnung dauert in diesem Fall weniger als ein Viertel der Zeit im Vergleich zum vorherigen Beispiel, da über 90% der Daten das Kriterium in der if-Anweisung erfüllen.

Note:

In diesem Beispiel muss die Formel unbedingt in der Modellstrukturreihenfolge berechnet werden (Februar nach Januar, März nach Februar usw.), um die richtigen Ergebnisse zu erhalten. Sie können @calcmode(Cell) verwenden, um die Reihenfolge durchzusetzen, wenn das nicht automatisch geschieht.