計算スクリプトでの式
計算スクリプトでEssbase式を定義した場合、それらは、キューブ・アウトラインでメンバーに適用された式より優先されます。この方法で式を使用すると、キューブ・アウトラインにコード化された関係を超えて、バッチ計算の柔軟性が向上します。
基本的な等式、条件式および相互依存の式を使用して、計算する式を記述できます。
Essbase計算スクリプトでは、次の両方の操作を実行できます。
-
キューブ・アウトラインにある既存のメンバー式を計算する
-
計算スクリプトの実行の間に存続する、新しい式を定義する
アウトラインでメンバーに適用されている既存の式を計算するには、セミコロン(;)を末尾に付けたメンバー名を使用します。たとえば、計算スクリプト内の次のコマンドでは、アウトラインでVarianceメンバーに適用されている式が計算されます。
Variance;
アウトライン計算から得られる値を上書きするには、その計算スクリプト内の式を手動で適用します。たとえば、計算スクリプト内の次の式では、キューブを一巡してメンバーPayroll、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はデータベースを一巡して次の計算を実行します。
-
IF文によって、現在のメンバーの組合せに対するSalesの値が100より大きいかどうかがチェックされます。
-
Salesが100より大きい場合、EssbaseではSalesの値からCOGSの値が減算され、その差に2が乗算されて、結果がProfitに置かれます。
-
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回になり、1回ごとに各CALC DIMコマンドが計算されます:
CALC DIM(Year);
CALC DIM(Measures);