式構文の概要に関する項
メンバー式を作成する場合は、次のルールに従います:
-
式の各文はセミコロン(;)で終了します。 例:
Margin % Sales;
-
保存されたアウトライン・メンバー名のみを使用します。 メンバー名に代替変数が使用されている場合、代替変数値は保存済アウトライン・メンバー名である必要があります。
-
メンバー名が次のいずれかの条件を満たす場合は、メンバー名を二重引用符(
“”
)で囲みます:-
スペースが含まれます。 例:
"Opening Inventory" = "Ending Inventory" - Sales + Additions;
-
演算子、関数名またはキーワードと同じです。
-
英数字以外の文字が含まれます。 たとえば、ハイフン(-)、アスタリスク(*)およびスラッシュ(/)です。
-
すべて数値であるか、1つ以上の数字で始まります。 例:
"100"
または"10Prod"
引用符で囲む必要があるメンバー名の完全なリストは、「計算スクリプト、レポート・スクリプト、式、フィルタ、代替変数値および環境変数値の命名規則」を参照してください。
-
-
各IF文をENDIF文で終了します。
たとえば、次の式には単純なIF...ENDIF文が含まれています。 この式は、データベース・アウトラインのCommissionメンバーに適用できます:
IF(Sales < 100) Commission = 0; ENDIF;
別のIF文内にネストされたIF文を使用している場合は、各IFをENDIFで終了します。 例:
"Opening Inventory" (IF (@ISMBR(Budget)) IF (@ISMBR(Jan)) "Opening Inventory" = Jan; ELSE "Opening Inventory" = @PRIOR("Ending Inventory"); ENDIF; ENDIF;)
-
ELSEまたはELSEIF文をENDIFで終了する必要はありません。 例:
IF (@ISMBR(@DESCENDANTS(West)) OR @ISMBR(@DESCENDANTS(East) Marketing = Marketing * 1.5; ELSEIF(@ISMBR(@DESCENDANTS(South))) Marketing = Marketing * .9; ELSE Marketing = Marketing * 1.1; ENDIF;
ノート:
FormulaでELSEIF (1語)ではなくELSE IF (空白あり)を使用する場合は、IF文にENDIFを指定する必要があります。
-
ENDIF文をセミコロン(;)で終了する必要はありませんが、終了することをお薦めします。
式を記述する場合、「式エディタ」構文チェッカを使用して構文をチェックできます。 「式の構文のチェック」を参照してください。
参照:
演算子
算式では、次のタイプの演算子を使用できます:
表18-1 演算子タイプのリスト
演算子のタイプ | 説明 |
---|---|
算術 |
一般的な演算を実行します。 たとえば、値を加算、減算、乗算または除算できます。 「数学的操作」を参照してください。 |
条件 |
条件テストの結果に基づいてformula実行のフローを制御します。 たとえば、IF文を使用して、指定した条件をテストできます。 「条件テスト」を参照してください。 |
Cross-dimensional |
特定のメンバーの組合せのデータ値を指します。 たとえば、特定のリージョンの特定の製品の販売値を指し示すことができます。 「ディメンション間のメンバーの組合せの操作」を参照してください。 |
#MISSING、ゼロおよびその他の値での演算子の使用の詳細は、「#MISSING値およびゼロ(0)値に対する操作結果」を参照してください。
定数値
定数値をメンバーに割り当てることができます。 例:
California = 120;
この式で、Californiaは疎ディメンションのメンバーで、120は定数値です。 Essbaseでは、Californiaに対して使用可能なすべてのデータ・ブロックが自動的に作成され、値120がすべてのデータ・セルに割り当てられます。 多数のデータ・ブロックを作成できます。
疎ディメンションの定数を、値を必要とする交差にのみ割り当てるには、FIX文を使用します。 「疎ディメンションのメンバーに割り当てられた定数値」を参照してください。
定数でない値
疎ディメンションのメンバーに定数以外のものを割り当て、そのメンバーにデータ・ブロックが存在しない場合、Essbaseで等式のブロックの作成が有効になっていないかぎり、新しいブロックは作成されない可能性があります。 デフォルトでは、等式にブロックを作成は無効になっています。
たとえば、計算を実行する前に存在していなかったWestのブロックを作成するには、この式に対して等式のブロックの作成を有効にする必要があります:
West = California + 120;
ノート:
等式のブロックの作成がデータベースに対して無効になっており、等式の左側または右側のメンバーにデータ・ブロックが存在する場合、式によって結果が生成されます。
等式のブロックの作成をデータベース・レベルで有効にするか、SET CREATEBLOCKONEQ ON | OFF計算コマンドを使用して計算スクリプト内でブロック作成を制御できます。
等式のブロックの作成がアプリケーション・レベルまたはデータベース・レベルで有効になっている場合、不要なブロックが作成される可能性があるため、計算のパフォーマンスが影響を受ける可能性があります。 計算スクリプト内のブロック作成を制御するには、SET CREATEBLOCKONEQ ON | OFF計算コマンドを使用します。 「疎ディメンションのメンバーに割り当てられた非定数値」を参照してください。
特定のデータベースのすべての計算スクリプトに対して等式のブロックの作成機能を有効にするには、alter database MaxL文を使用できます。
基本方程式
数学演算を数式に適用して、基本的な数式を作成できます。 方程式は、データベース・アウトラインまたは計算スクリプトに含めることができます。
等式の構文は次のとおりです:
member = mathematical_operation;
memberはデータベース・アウトラインのメンバー名であり、mathematical_operationは任意の有効な算術演算です。
次の例では、Essbaseがデータベースを循環し、販売の値から売上原価の値を減算して、マージンに結果を配置します:
Margin = Sales - COGS;
次の例は、データベース・アウトラインおよび計算スクリプトで方程式を使用する方法を示しています。 アウトラインで、次の式をマークアップ・メンバーに適用します:
(Retail - Cost) % Retail;
次に、計算スクリプトで次の式を使用します:
Markup = (Retail - Cost) % Retail;
Essbaseは、Retailの値からCostの値を差し引いてデータベースを循環し、Retailの値の割合として結果の値を計算して、その結果をMarkupに配置します。
式の構文のチェック
Essbaseには、式の構文エラーについて通知する式の構文チェックが含まれています。 たとえば、関数名を誤って入力した場合は、Essbaseによって通知されます。
構文チェッカでは、式のセマンティック・エラーを認識できません。 セマンティック・エラーは、式が期待どおりに機能しない場合に発生します。 セマンティック・エラーを検出するには、計算を実行し、結果が期待どおりであることを確認します。
Essbaseでは、「式エディタ」の下部に構文チェッカの結果が表示されます。 Essbaseで構文エラーが見つからない場合は、「エラーなし」というメッセージが表示されます。
Essbaseで構文エラーが検出された場合は、エラーを含む行の番号とエラーの簡単な説明が表示されます。 たとえば、式の最後にセミコロンの行末文字を含めない場合、Essbaseでは次のようなメッセージが表示されます:
Error: line 1: invalid statement; expected semicolon
式が「式エディタ」または「アウトライン・エディタ」で検証に合格したが、アウトラインの保存時に「Essbaseサーバー」がセマンティック・エラーを検出した場合は、次のことを確認します:
-
間違った式は、エラーが含まれていてもアウトラインの一部として保存されます。
-
「Essbaseサーバー」によって、エラーの内容を示すメッセージがアプリケーション・ログに書き込まれ、間違った式が表示されます。
-
「Essbaseサーバー」は、間違った式に関連付けられたメンバーのコメント・フィールドにエラー・メッセージを書き込みます。 間違った式がロードされなかったことを示すメッセージが表示されます。 アウトラインを閉じて再度開くと、「アウトライン・エディタ」でこのコメントを表示できます。
-
メンバー式を修正しないと、そのメンバーを含む計算が実行され、計算中に式が無視されます。
式を修正してアウトラインを保存すると、メンバー・コメント内のメッセージが削除されます。 アウトラインを再度開くと、更新されたコメントを表示できます。