計算スクリプトでの式

Essbase式は、データベース・アウトラインのメンバー間の数学的関係と位置関係を計算します。これらは、アウトラインのメンバーに適用したり、計算を厳密に制御するために計算スクリプトで使用できます。

計算スクリプトでEssbase式を定義する場合、それらはキューブ・アウトラインのメンバーに適用される式よりも優先されます。この方法で式を使用すると、キューブ・アウトラインにエンコードされた関係を超えて、バッチ計算の柔軟性が向上します。

基本的な式、条件式および相互依存式を使用して計算する式を記述できます。

Essbase計算スクリプトでは、次の両方の操作を実行できます。

  • キューブ・アウトラインで既存のメンバー式を計算します

  • 計算スクリプトの実行中に続く新しい式を定義します

アウトラインのメンバーに適用されている既存の式を計算するには、後にセミコロン(;)を付けたメンバー名を使用します。たとえば、計算スクリプトの次のコマンドは、アウトラインのVarianceメンバーに適用される式を計算します。

Variance;

アウトライン計算の結果の値を上書きするには、計算スクリプトで式を手動で適用します。たとえば、計算スクリプトの次の式では、キューブを一巡してメンバーPayables、MarketingおよびMiscの値を加減し、その結果をExpensesメンバーに置きます。この式は、アウトラインでExpensesメンバーに置かれている式より優先されます。

Expenses = Payroll + Marketing + Misc;

ノート:

式は共有メンバー、またはラベルのみのメンバーには適用できません。

関連項目: ブロック・ストレージ・キューブの式の開発

Essbase計算スクリプトの基本的な方程式

Essbase計算スクリプトでは、式を使用してキューブ・アウトライン・メンバーに値を割り当てます。割当ては、計算スクリプトの実行中に存続します。

Essbase計算スクリプトの方程式の構文は次のとおりです:

member = mathematical_expression;

memberはアウトラインのメンバー名、mathematical_expressionは任意の有効な数学式です。

Essbaseによって式が評価され、指定されたメンバーに値が割り当てられます。

次の例では、Essbaseはデータベースを一巡してSales内の値からCOGS内の値を減算し、結果をMarginに配置します。

Margin = Sales - COGS;

この例では、Essbaseはデータベースを一巡してRetailの値からCostの値を減算し、結果の値をRetailの値のパーセンテージとして計算し、その結果をMarkupに置きます。

Markup = (Retail - Cost) % Retail;

> (大なり)と< (小なり)の論理演算子を等式で使用することもできます。

次の例では、2月の売上高が1月の売上高より多い場合にSales Increase Flagの値は1になり、そうでない場合値は0になります。

Sales Increase Flag = Sales -> Feb > Sales -> Jan;

Essbase計算スクリプトの条件式

Essbase計算スクリプト式で条件式を使用して、if/elseロジックを定義し、計算中のイベントのフローを制御できます。

計算スクリプトでメンバー式の一部としてIF文を使用する場合は、次の操作を行う必要があります。

  • IF文と単一メンバーの関連付け

  • IF文をカッコで囲む

次の例では、IF…ENDIF文全体を丸カッコで囲み、Profitメンバーと関連付けています(Profit (IF(...)...))。

Profit
(IF (Sales > 100)
   Profit = (Sales - COGS) * 2;
ELSE
   Profit = (Sales - COGS) * 1.5;
ENDIF;)

Essbaseはデータベースを循環し、次の計算を実行します。

  1. IF文によって、現在のメンバーの組合せに対するSalesの値が100より大きいかどうかがチェックされます。

  2. Salesが100を超える場合、Essbaseは、Salesの値からCOGSの値を減算し、その差に2を乗算し、結果をProfitに配置します。

  3. Salesが100以下の場合、Essbaseは、Salesの値からCOGSの値を減算し、その差に1.5を乗算し、結果をProfitに配置します。

条件付きコマンドおよび計算スクリプトのフローの制御の詳細は、計算コマンド・グループを参照してください

Essbase計算スクリプトの相互依存式

アウトラインの式と同様に、計算スクリプトの式は、Essbaseキューブ・アウトラインのメンバー間の数学的関係を計算します。

式は、その評価が同じディメンションの他のメンバーの値に依存する場合、相互依存とみなされます。

Essbaseの相互依存式の例として、キャッシュ・フローの評価があり、開始在庫は、前月の終了在庫に依存します。

計算スクリプトで相互依存の式を使用するときは、IF文の場合と同じルールが適用されます。次のことが必要です。

  • 数式を単一のメンバーに関連付ける

  • 式をカッコで囲みます

次の例では、相互依存式全体を丸カッコで囲み、Opening Inventoryメンバーと関連付けています。

"Opening Inventory"
(IF(NOT @ISMBR (Jan))
   "Opening Inventory" = @PRIOR("Ending Inventory");
ENDIF;)
"Ending Inventory" = "Opening Inventory" - Sales + Additions;

計算スクリプト式および高機能計算ステータス

Essbase高機能計算でブロックがクリーンとしてマークされている場合でも、関係関数または財務関数を含む疎ディメンション・メンバーの式は、常に再計算されます。

疎ディメンション・メンバーに対する1つの式があり、その式に次のいずれかのタイプの関数が含まれていると仮定します。

  • 関係(@PRIOR、@NEXTなど)

  • 財務(@NPV、@INTERESTなど)

Essbaseでは、高機能計算を目的としてクリーンとしてマークされている場合でも、式を含むデータ・ブロックが常に再計算されます。

データ・ブロックの高機能計算およびブロック・ストレージ・キューブの高機能計算を参照してください。

スクリプトでの式とディメンションのグループ化

計算スクリプトでEssbaseメンバーの式とディメンションを慎重にグループ化することで、計算パフォーマンスが大幅に向上する場合があります。

一連のメンバー式を計算します

式を計算するときは、必ず丸カッコを正しく使用してください。

次の例では、丸カッコが正しく使用されていないと、Essbaseはキューブ全体を通して2回、つまり1回目はメンバーQtr1とQtr2に対する式を計算して、2回目はQtr3に対する式を計算します。

(Qtr1;
Qtr2;)
Qtr3;

対照的に、次の構成ではEssbaseはキューブを一巡のみしてメンバーQtr1、Qtr2およびQtr3に対する式を計算します。

Qtr1;
Qtr2;
Qtr3;

または

(Qtr1;
Qtr2;
Qtr3;)

同様に、次の式により、Essbaseはキューブを一巡して1つのパスで両方の式を計算します。

Profit = (Sales - COGS) * 1.5;
Market = East + West;

一連のディメンションを計算します

一連のディメンションを計算するときは、可能なかぎりディメンションをグループ化することで、パフォーマンスを最適化できます。

たとえば、次の式では、Essbaseはキューブを一巡のみします:

CALC DIM(Year, Measures);

対照的に、次の構文では、Essbaseでキューブを2回循環します。各CALC DIMコマンドを1回ずつ実行します。

CALC DIM(Year);
CALC DIM(Measures);