この章の情報は、ブロック・ストレージ・データベースのみに適用され、集約ストレージ・データベースとは関係がありません。
関連項目:
この章のすべての例は、Sample.Basicデータベースに基づいています。
この章で参照される計算コマンドの詳細は、『Oracle Essbaseテクニカル・リファレンス』を参照してください。
計算スクリプトには一連の計算コマンド、等式および式が記述されています。計算スクリプトを使用してデータベース・アウトラインで定義されていない計算を定義できます。
計算スクリプトでは、デフォルトの計算(CALC ALL)またはユーザーが選択した計算(データベースの一部の計算、メンバー間でのデータ値のコピーなど)を実行できます。
次のタスクを実行するには、計算スクリプトを記述する必要があります:
データベースのサブセットの計算を参照してください。
特定の順序で複雑な計算を実行する場合や、データ間で複数の繰返しを必要とする計算を実行する場合(たとえば、一部の2パス計算には計算スクリプトが必要です)
勘定科目タグが設定されていない次元で2パス計算を実行する場合
2パス計算の使用を参照してください。
通貨換算アプリケーションの設計および作成。を参照してください。
データベース・アウトラインの式とは異なるメンバー式を計算する場合(計算スクリプトの式は、データベース・アウトラインの式を上書きします)
計算でフロー制御ロジックを使用する場合(たとえば、IF...ELSE....ENDIFまたはLOOP...ENDLOOPコマンドを使用する場合)
データのコピーを参照してください。
データ変数の宣言を参照してください。
データベースを計算するときにEssbaseで高機能計算を使用する方法を制御する場合
高機能計算についての理解。を参照してください。
次の計算スクリプトは、年、メジャー、市場および製品次元から実績値を計算します:
管理サービス・コンソールで計算スクリプト・エディタを使用すると、次の操作で計算スクリプトを作成できます:
Oracle Essbase Administration Services Online Helpの「計算スクリプト・エディタについて」を参照してください。
Administration Servicesを使用して作成した計算スクリプトには、デフォルトで.csc拡張子が付きます。計算スクリプトをAdministration ServicesまたはSmart Viewで実行する場合は、ファイルに.csc拡張子が必要です。ただし、計算スクリプトはテキスト・ファイルなので、MaxLまたはESSCMDを使用してテキスト・ファイルを計算スクリプトとして実行できます。
計算スクリプトをメモリー内に文字列として定義すると、EssbaseクライアントまたはEssbaseサーバー上のAPIからアクセスできます。このように、ダイアログ・ボックスで、ユーザーの選択に基づいて計算スクリプトを動的に作成できます。
計算スクリプトを作成するか、既存の計算スクリプトを開きます。
Oracle Essbase Administration Services Online Helpの「スクリプトの作成」または「スクリプトを開く」を参照してください。
次の詳細は、Oracle Essbase Administration Services Online Helpの「計算スクリプト・エディタについて」を参照してください:
構文の検査を参照してください。
計算スクリプトの保存を参照してください。
計算スクリプトの実行を参照してください。
計算スクリプトの結果を確認します。
計算結果の確認を参照してください。
Oracle Essbase Administration Services Online Helpで、次のトピックを参照してください:
Essbaseには、データベースの計算方法の制御に使用できる柔軟なコマンドのセットが用意されています。コマンドと式から計算スクリプトを作成できます。
計算スクリプトを作成するときは、次のルールを適用する必要があります:
各式または計算スクリプト・コマンドはセミコロン(;)で終わります。例:
例1
CALC DIM(Product, Measures);
例2
DATACOPY Plan TO Revised_Plan;
例3
"Market Share" = Sales % Sales -> Market;
例4
IF (Sales <> #MISSING) Commission = Sales * .9; ELSE Commission = #MISSING; ENDIF;
IF ENDIF ELSE ELSIF FIX ENDFIX EXCLUDE ENDEXCLUDE LOOP ENDLOOP
注: | 必須ではありませんが、式中の各ENDIFステートメントの後にセミコロンを付けることをお薦めします。 |
メンバー名が次のいずれかの条件に該当する場合は、そのメンバー名を二重引用符(" ")で囲みます:
たとえば、次の式では、Opening InventoryおよびEnding Inventoryが二重引用符で囲まれています:
"Opening Inventory" = "Ending Inventory" - Sales + Additions;
例: "100"または"10Prod"
アンパサンド(&)で始まっている場合。先頭のアンパサンド(&)は代替変数用に予約されています。メンバー名が&で始まる場合、メンバー名を引用符で囲みます。
注: | 計算スクリプトで代替変数を引用符で囲まないでください。 |
例: 1999.Janまたは.100
IFステートメントまたは相互依存の式を使用している場合は、式を丸カッコで囲み、その式を指定したメンバーに関連付けます。
たとえば、次の式は、データベース・アウトラインのCommissionメンバーに関連付けられています:
Commission (IF(Sales < 100) Commission = 0; ENDIF;)
式中の各IFステートメントは、ENDIFステートメントで終わります。
たとえば、前の式では簡単なIF...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ステートメントで終了する必要はありません。
例:
Marketing (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;)
各FIXステートメントは、ENDFIXステートメントで終わります。
例:
FIX(Budget,@DESCENDANTS(East)) CALC DIM(Year, Measures, Product); ENDFIX
各EXCLUDEステートメントは、ENDEXCLUDEステートメントで終わります。
計算スクリプトを記述するときは、計算スクリプト・エディタ構文チェッカを使用して、構文を検査します。構文の検査を参照してください。
Essbaseには、計算スクリプトの構文エラー(関数名の入力ミスなど)にフラグを付ける構文チェッカが用意されています。その結果は、管理サービス・コンソールのメッセージ・パネルに表示されます。
構文エラーが見つからなかった場合は、Essbaseにより構文の検査が正常に終了したことが示されます。
構文エラーが見つかった場合は、Essbaseにより構文の検査に失敗したことが示され、エラーが1つずつ表示されます。通常、エラー・メッセージにはエラーが発生した行の番号と簡単な説明が記載されます。たとえば、計算スクリプト・コマンドの最後にセミコロン行末文字がない場合は、Essbaseで次のようなメッセージが表示されます:
Error: line 1: invalid statement; expected semicolon
最後のエラーまでくると、Essbaseで次のメッセージが表示されます:
No more errors
計算スクリプト・エディタで計算スクリプトの構文を検査する方法は、『Oracle Essbase Administration Servicesオンライン・ヘルプ』の「スクリプト構文の検査」を参照してください。
注: | 構文チェッカでは、計算スクリプトが予想どおりに動作しないときに発生するセマンティク・エラーを特定できません。セマンティク・エラーを見つけるには、計算を実行して、結果が予想どおりかどうかを確認します。計算結果の確認を参照してください。 |
このセクションのトピックでは、機能別にグループ化された計算コマンドについて説明します。参照:
表81に、データベース・アウトラインの構造と式に基づくデータベース計算を実行する計算コマンドをリストします。
表82に、計算のフローを操作するコマンドをリストします:
表83に、一時変数を宣言し、必要に応じてその初期値を設定するコマンドをリストします。一時変数には、計算の中間結果が保管されます。
計算スクリプトで代替変数も使用できます。計算スクリプトでの代替変数の使用を参照してください。
一時変数に保管される値は、計算スクリプトの実行中にのみ存在します。一時変数の値についてはレポートできません。
変数および配列の名前は、次のいずれかの文字を含む文字列になります:
通常、配列は、メンバー式の一部として変数を保管するときに使用します。配列変数のサイズは、対応する次元のメンバー数によって決まります。たとえば、シナリオ次元に4つのメンバーがある場合、次のコマンドによって、4つのエントリを持つDiscountという配列が作成されます:
ARRAY Discount[Scenario];
一度に複数の配列を使用できます。
表84に、計算動作を定義するコマンドをリストします:
表 84. 計算動作を定義するためのコマンドのリスト
並列計算を使用可能にします。並列計算の使用を参照してください。 | |
並列計算のタスクの特定に使用する次元の数を増やします。並列計算の使用を参照してください。 | |
高機能計算のデータ・ブロックをEssbaseがマークする方法で制御します。SET CLEARUPDATESTATUSコマンドの使用を参照してください。 | |
疎次元のメンバーに非定数値を割り当てる際のブロックの作成を制御する「等式によるブロックの作成」設定をオンおよびオフにします。疎次元のメンバーに割り当てられた非定数値を参照してください。 | |
大規模なデータベース・アウトラインの中の疎次元の式の計算を最適化します。大規模なデータベース・アウトライン内の疎次元に基づく式の最適化を参照してください。 | |
計算スクリプトで使用されるランタイム代替変数を宣言します。計算スクリプトでのランタイム代替変数の使用を参照してください。 | |
高機能計算をオンおよびオフにします。高機能計算のオンとオフを参照してください。 | |
通貨換算の場合に、定義済の同じ通貨を使用する親に集計を限定します。データベースの計算を参照してください。 |
計算スクリプト内のSETコマンドは、同じSETコマンドが次に検出されるまで有効です。
次の計算スクリプトでは、Essbaseで年次元を計算するときに詳細レベルのメッセージ(SET MSG DETAIL;)が表示され、メジャー次元を計算するときに要約レベルのメッセージ(SET MSG SUMMARY;)が表示されます:
SET MSG DETAIL; CALC DIM(Year);
SET MSG SUMMARY;
CALC DIM(Measures);
SET計算コマンドの中には、データベースへの追加パスをトリガーするものがあります。
次の計算スクリプトでは、EssbaseでQtr1とSET AGGMISSGオンのメンバーの組合せを計算し、次にデータベースに対し2回目の計算パスを行い、EastとSET AGGMISSGオフのメンバーの組合せを計算します:
SET AGGMISSG ON; Qtr1; SET AGGMISSG OFF;
East;
2パス計算の使用も参照してください。
計算スクリプトにはメンバー式を入れることができます。メンバー式を入れた場合、その式はデータベース・アウトラインでメンバーに適用されている競合する式より優先されます。
データベース・アウトラインのメンバーに適用されている式を計算するには、後にセミコロン(;)を付けたメンバー名を使用します。たとえば、次のコマンドでは、データベース・アウトラインのVarianceメンバーに適用されている式を計算します:
Variance;
アウトラインを計算して得られた値を上書きするには、計算スクリプトで定義した式を手動で適用します。たとえば、次の式では、データベース内を循環して、メンバーPayroll、MarketingおよびMiscの値を加算し、その結果をExpensesメンバーに置きます。この式は、データベース・アウトラインでExpensesメンバーに置かれている式を上書きします:
Expenses = Payroll + Marketing + Misc;
参照:
ブロック・ストレージ・データベース用の式の作成。を参照してください。
計算スクリプトで等式を使用して、値をメンバーに割り当てることができます。等式の構文は次のとおりです:
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;
計算スクリプトでメンバー式の一部としてIFステートメントを使用する場合は、次のことを実行する必要があります:
次の例では、IF...ENDIFステートメント全体を丸カッコで囲み、Profitメンバーと関連付けています(Profit(IF(...)...)):
Profit (IF (Sales > 100) Profit = (Sales - COGS) * 2; ELSE Profit = (Sales - COGS) * 1.5; ENDIF;)
疎次元メンバーに式があり、その式に次のいずれかのタイプの関数が含まれているとします:
Essbaseでは、データ・ブロックが高機能計算用に消去としてマークされている場合でも、式を含んでいるデータ・ブロックを必ず再計算します。
データ・ブロックの計算および高機能計算についての理解。を参照してください。
計算スクリプトで式と次元を慎重にグループ化すれば、計算パフォーマンスを大幅に改善できます。参照:
次の例では、丸カッコが正しく使用されていないため、Essbaseでデータベース内を2回循環し、1回目にメンバーQtr1とQtr2の式が計算され、2回目にQtr3の式が計算されます:
(Qtr1; Qtr2;) Qtr3;
対照的に、次の構成では、Essbaseでデータベース内を1回のみ循環し、メンバーQtr1、Qtr2およびQtr3の式が計算されます:
Qtr1; Qtr2; Qtr3;
(Qtr1; Qtr2; Qtr3;)
同様に、次の式では、Essbaseでデータベース内を1回循環し、1つのパスで両方の式が計算されます:
Profit = (Sales - COGS) * 1.5; Market = East + West;
代替変数は頻繁に変化する情報を参照する場合に使用されます。環境変数はユーザー固有のシステム設定のプレースホルダとして使用されます。
代替変数の一般的な説明は、代替変数の使用を参照してください。
計算スクリプトに代替変数を入れると、その代替変数は、Essbaseによってユーザーがその代替変数用に指定した値に置き換えられます。代替変数は、頻繁に変更されるメンバーの情報やリストを参照する場合などに役に立ちます。
Administration Servicesで代替変数の値を作成し、指定します。
代替変数は、サーバー、アプリケーションおよびデータベース・レベルで作成できます。代替変数を計算スクリプトで使用するには、代替変数が計算スクリプトで使用可能である必要があります。たとえば、データベースレベルの代替変数は、データベース内の計算スクリプトでのみ使用でき、サーバーレベルの代替変数は、サーバー上のすべての計算スクリプトで使用できます。
計算スクリプトでは、代替変数の前にアンパサンド(&)を挿入します。Essbaseでは、アンパサンドで始まる文字列は代替変数として扱われ、計算スクリプトを解析する前に、その変数は割り当てられている値に置き換えられます。
たとえば、Sample.BasicでQtr1を当四半期として計算するには、次のようにします:
計算スクリプトでのランタイム代替変数の使用も参照してください。
代替変数と同様に、代替変数が許可される場合には常に、ランタイム代替変数を計算スクリプトに含めることができます。計算スクリプトでは、ランタイム代替変数の名前の前にアンパサンド(&)を付ける必要があります。
ランタイム代替変数は、計算スクリプトで使用されるすべてのランタイム代替変数をSET RUNTIMESUBVARS計算コマンドで宣言する必要がある点が代替変数と異なります。SET RUNTIMESUBVARSには、ランタイム代替変数の名前を指定する必要があります。ランタイム代替変数のデフォルト値の指定はオプションです。<RTSV_HINT>rtsv_description</RTSV_HINT>タグの文字列として指定する、ランタイム代替変数のデータ型およびデータ入力制限の説明もオプションです。
SET RUNTIMESUBVARSの次の例では、myMarket、salesNumおよびPointDの3つのランタイム代替変数が宣言されています。myMarketとpointDにはデフォルト値が設定されています(たとえば、myMarketのデフォルト値は"New York"です)。salesNumの宣言にはデフォルト値は含まれていませんが、<RTSV_HINT>タグに説明が含まれています。
SET RUNTIMESUBVARS { myMarket = “New York”; salesNum <RTSV_HINT>salesNum: Input the value as an integer, such as 100</RTSV_HINT>; pointD = "Actual"->"Final"; };
デフォルト値が設定されていないランタイム代替変数に対しては、次のいずれかの方法を使用してランタイムに値を指定して、SET RUNTIMESUBVARSコマンドに指定されているデフォルト値を上書きできます:
キー/値のペアの文字列としてランタイム代替変数が指定されたwith runtimesubvars構文を使用したMaxL execute calculationステートメント。
キー/値のペアの文字列としてランタイム代替変数が指定されたEssCalcWithRuntimeSubVars API。
クライアント・コンピュータ上のテキスト・ファイルまたはキー/値のペアの文字列としてランタイム代替変数を指定できるEssCalcFileWithRuntimeSubVars API。
キー/値のペアの文字列としてランタイム代替変数を指定する場合は、文字列を一重引用符で囲んで、キー/値のペアをセミコロンで区切る必要があります。このランタイム代替変数文字列の例では、4つのランタイム代替変数の名前と値が指定されています(たとえば、"a"という名前のランタイム代替変数の値は100です):
'a=100;b=@CHILDREN("100");c="Actual"->"Final";d="New York"'
ランタイム代替変数をテキスト・ファイルに指定する場合は、.rsvという拡張子のテキスト・ファイルをクライアント・コンピュータ上に作成します。(Essbaseでは、Essbaseサーバー・コンピュータにあるランタイム代替変数ファイルはサポートされません。)ファイルの各行には、キー/値のペアとして1つのランタイム代替変数を指定し、最後にセミコロンを付ける必要があります。この.rsvファイルの例では、4つのランタイム代替変数の名前と値が指定されています(たとえば、"a"という名前のランタイム代替変数の値は100です):
a=100; b=200; c=@CHILDREN("100"); d=@TODATE("DD/MM/YY","10/11/12");
計算が実行されると、ランタイム代替変数値が次の順序で決定されます:
with runtimesubvars構文を使用したMaxL execute calculationステートメント、EssCalcWithRuntimeSubVarsまたはEssCalcFileWithRuntimeSubVars APIで指定された値。
SET RUNTIMESUBVARS計算コマンドに指定されたデフォルト値。
ランタイム代替変数を使用する際には、次のガイドラインを考慮してください:
SET RUNTIMESUBVARSにランタイム代替変数を宣言したが、計算スクリプトでランタイム代替変数を使用しない場合、Essbaseは未使用のランタイム代替変数の宣言を無視します(警告や例外は生成されません)。
ランタイム代替変数は代替変数よりも優先されます。そのため、代替変数とランタイム代替変数の名前が同じ(たとえば、myProduct)の場合、ランタイム代替変数の値で、代替変数の値が上書きされます。
複数のランタイム代替変数の名前が同じで値が異なる場合は、ランタイム代替変数の最初のインスタンスの値のみが使用されて、後続の他のすべての値は無視されます。
ランタイム代替変数の名前と値の設定ルールは、代替変数の場合と同じです。代替変数の名前と値の設定ルールを参照してください。
計算スクリプトに使用されているランタイム代替変数をログに書き込むには、essbase.cfgのENABLERTSVLOGGING構成設定をTRUEに設定します。ロギングは、Essbaseサーバー、アプリケーション、またはデータベース・レベルで実装できます。
ランタイム代替変数のログ・エントリはアプリケーション・ログ・ファイルに書き込まれます。Essbaseでは、キー/値のペアの文字列(または、EssCalcFileWithRuntimeSubVars APIを使用する場合は.rsvファイルに指定されているキー/値のペアのリスト)ごとにアプリケーション・ログに1つのエントリが書き込まれます。
次の例では、2つのランタイム代替変数(EntityとCurrency)およびそれらの値が1つのエントリとしてログに書き込まれます:
Executing calc script 'calcprofit.csc' with runtime substitution variables {Entity = “MyCompany”; Currency = “USD”;}
SET RUNTIMESUBVARS計算コマンドでは、ランタイム代替変数の宣言に<RTSV_HINT>rtsv_description</RTSV_HINT>タグを含めることができます。rtsv_descriptionは、ランタイム代替変数のデータ型およびデータ入力制限(たとえば、100以下の整数)を記述する文字列です。</RTSV_HINT>文字列は、計算では使用されません。
EssGetRuntimeSubVars APIでは、SET RUNTIMESUBVARSのランタイム代替変数宣言に指定されているすべての情報(名前、値および説明)が取得されます。その後、<RTSV_HINT>文字列を使用して、ランタイムに値を入力するようにユーザーにプロンプトを表示したり、計算スクリプトに値を渡す前に入力データを検証できます。
SET RUNTIMESUBVARSの次の例では、ランタイム代替変数の名前と説明のみが各定義に指定されており、デフォルト値は指定されていません:
SET RUNTIMESUBVARS { myMarket <RTSV_HINT>myMarket: Input the value as a string, such as "New York"</RTSV_HINT>; salesNum <RTSV_HINT>salesNum: Input the value as an integer, such as 100</RTSV_HINT>; pointD <RTSV_HINT>pointD: Input the value as a member combination, such as "Actual"->"Final"</RTSVVAR_HINT>; };
計算スクリプトでは、ユーザー固有のシステム設定のプレースホルダとしてシステム環境変数を使用できます。環境変数は、オペレーティング・システム・レベルで定義されているので、Essbaseサーバー上のすべての計算スクリプトで使用できます。
注: | 環境変数はMDXクエリーでは使用できません。 |
システム環境変数を宣言する方法は、オペレーティング・システムのドキュメンテーションを参照してください。
計算スクリプトで環境変数を使用するには、環境変数名の前にドル記号($)を挿入します。Essbaseでは、ドル記号で始まる文字列は環境変数として扱われ、計算スクリプトを解析する前に、その変数は割り当てられている値に置き換えられます。メンバー名が$で始まる場合は、その名前を引用符で囲みます。
計算スクリプトで環境変数を使用するときには、次のガイドラインに従います:
環境変数の名前:
英数字またはアンダースコア(_)で構成する必要があります
ハイフン(-)、アスタリスク(*)、スラッシュ(/)などの英数字以外の文字を入れることはできません
Unicodeモードのアプリケーションでは320バイト以下、非Unicodeモードのアプリケーションでは320文字以下にする必要があります
環境変数の値:
先頭のドル記号($)以外は、どの文字でも使用できます
数値かどうかに関係なく、引用符(" ")で囲む必要があります。例:
MY_PROD="100" ENV_FILE="E:\temp\export1.txt"
環境変数を定義するときに値を引用符で囲まなかった場合、数値以外の値であれば、その環境変数が渡されるときにEssbaseによって値が自動的に引用符で囲まれます。
数値の場合は、変数が渡されるときにEssbaseによってその値が自動的に引用符で囲まれることはありません。これは、数値を渡すのか、それともメンバー名を渡すのかをEssbaseで判断できないためです。たとえば、'Sales = $MY_SALES' where MY_SALES=700のような計算スクリプト・ステートメントを使用する場合、目的は数値 700を渡すことです。しかし、EssbaseによってMY_SALESが引用符で囲まれると、MY_SALESはメンバー名として扱われます。その結果、数値ではなくメンバー名が渡されるので、エラーが発生します。変数の数値を文字列として扱う場合は、環境変数を定義するときにその値を引用符で囲む必要があります。
Unicodeモードのアプリケーションでは256バイト以下、非Unicodeモードのアプリケーションでは256文字以下にする必要があります
たとえば、環境変数を使用して、データ・ブロックをフラット・ファイルにエクスポートするときのエクスポート・ファイルのパスとファイル名を定義できます。次の計算スクリプトでは、パスとファイル名(E:\temp\export1.txt)が明示的に定義されています:
SET DATAEXPORTOPTIONS { DATAEXPORTLEVEL "ALL"; DATAEXPORTOVERWRITEFILE ON; }; FIX ("New York", "100-10"); DATAEXPORT "File" "," "E:\temp\export1.txt"; ENDFIX;
パスとファイル名(ENV_FILE="E:\temp\export1.txt")を参照するために環境変数(ENV_FILE)を宣言し、計算スクリプトで次の構文を使用できます:
DATAEXPORT "File" "," $ENV_FILE;
Essbaseによって環境変数がユーザーの環境から取得した値に置き換えられます。
次の例では、Sales値(CurrMbr="Sales")のみをエクスポートするために別の環境変数(CurrMbr)が定義されています:
SET DATAEXPORTOPTIONS { DATAEXPORTLEVEL "ALL"; DATAEXPORTOVERWRITEFILE ON; }; FIX ("New York", "100-10", $CurrMbr); DATAEXPORT "File" "," $ENV_FILE; ENDFIX;
環境変数を使用して、RUNJAVAに渡された引数も解析できます。RUNJAVAは、Essbaseのユーティリティで、計算スクリプトから直接カスタム定義関数を呼び出すことができます。たとえば、環境変数を使用してユーザーの電子メール・アドレスを取得できます。
次の例では、RUNJAVAステートメントが電子メール通知を明示的に定義されたユーザー(to@somedomain.comおよびcc@mydomain.com)に送信します:
RUNJAVA com.hyperion.essbase.calculator.EssbaseAlert "localhost" “to@somedomain.com” "cc@mydomain.com" "" "" "Mail Subject" "Mail Body" "";
ユーザー(ENV_TOMAIL="to@somedomain.com"とENV_CCMAIL="to@mydomain.com")に対して環境変数を宣言し、計算スクリプトで次の構文を使用できます:
RUNJAVA com.hyperion.essbase.calculator.EssbaseAlert "localhost" $ENV_TOMAIL $ENV_CCMAIL "" "" "Mail Subject" "Mail Body" "";
データベースからデータのサブセットを消去したり、あるメンバーのセットから別のメンバーのセットにデータ値をコピーすることができます。参照:
表85に、データを消去するコマンドをリストします:
表 85. データを消去するためのコマンドのリスト
指定するセルの値を#MISSINGに変更します。データ・ブロックは削除されません。 FIXコマンドをCLEARDATAコマンドと使用して、データベースのサブセットを消去します。 | |
すべての密次元メンバーを含む、ブロックのコンテンツ全体を削除します。 Essbaseでは、CLEARBLOCKがブロック内のメンバーに対するFIXコマンドの内部にないかぎり、ブロック全体を削除します。 | |
派生値を含んでいるブロックを削除します。計算操作によってすべて作成されたブロックには適用されますが、値がロードされたブロックには適用されません。 | |
データ値の動的計算。を参照してください。 | |
CLEARBLOCK EMPTY |
次の計算スクリプト・コマンドは、シナリオ次元が密か疎かによって、異なる結果を導き出します:
FIX(Actual) CLEARBLOCK NONINPUT; ENDFIX
疎: コマンドは、シナリオ次元のメンバーがActualであるブロックのみを削除します。
次の式では、ColasのすべてのActualデータ値を消去します:
CLEARDATA Actual -> Colas;
データベース全体を消去する方法は、Oracle Essbase Administration Services Online Helpの「データの消去」を参照してください。
DATACOPY計算コマンドは、データベース内のあるメンバー範囲から別のメンバー範囲にデータ・セルをコピーします。2つの範囲は同じサイズである必要があります。たとえば、次の式はActual値をBudget値にコピーします:
DATACOPY Actual TO Budget;
FIXコマンドを使用すると、値のサブセットをコピーできます。たとえば、次の式は1月のみのActual値をBudget値にコピーします:
FIX (Jan) DATACOPY Actual TO Budget; ENDFIX
FIXコマンドの使用を参照してください。
データベースのサブセットを計算するには、次のいずれかの方法を使用します:
メンバーのリストを計算するメンバー・セット関数を使用して式を作成します。
メンバーのリストの計算を参照してください。
FIX...ENDFIXコマンドを使用して、包含によって値の範囲を計算します。
FIXコマンドの使用を参照してください。
EXCLUDE...ENDEXCLUDEコマンドを使用して、除外によって値の範囲を計算します。
除外コマンドの使用を参照してください。
高機能計算がオンの場合、新しく計算されたデータ・ブロックは、データベースの部分計算後に消去としてマークされません。データベースのサブセットを計算するときには、SET CLEARUPDATESTATUS AFTERコマンドを使用して、新しく計算されたブロックが必ず消去としてマークされるようにすることができます。このコマンドを使用すると、Essbaseでは高機能計算を使用してできるだけ効率的にデータベースが再計算されます。高機能計算についての理解。を参照してください。 |
メンバー・セット関数は、指定したメンバーに基づいたメンバーのリストを生成します。たとえば、@IDESCENDANTS関数を使用すると、指定したメンバーのすべての子孫のリストが生成されます。式でメンバー・セット関数を使用すると、式を計算する前にEssbaseによってメンバーのリストが生成されます。
次の例では、メンバーTotal Expensesで@IDESCENDANTSコマンドを使用すると、Total Expensesそれ自体と、その子孫のMarketing、PayrollおよびMiscのリストが生成されます:
@IDESCENDANTS("Total Expenses");
FIXコマンドを使用して、計算に含めるメンバーを定義します。
次の例では、Eastの子孫(New York、Massachusetts、Florida、ConnecticutおよびNew Hampshire)のみのBudget値のみが計算されます:
FIX(Budget,@DESCENDANTS(East)) CALC DIM(Year, Measures, Product); ENDFIX
次の例では、New MktというUDAが設定されたEastの子に対するメンバーの組合せが確定されます:
FIX(@CHILDREN(East) AND @UDA(Market,"New Mkt")) Marketing = Marketing * 1.1; ENDFIX
次の例では、ワイルドカード一致(???)を使用して、文字-10で終わるメンバー名、つまりメンバー100-10、200-10、300-10および400-10を確定します:
FIX(@MATCH(Product, "???-10")) Price = Price * 1.1; ENDFIX
密次元でFIXコマンドのみを使用すると、Essbaseによって、必要な値または指定したメンバーの値を含んだブロック全体が取得されます。I/Oは影響を受けないので、計算パフォーマンス時間が向上します。
疎次元でFIXコマンドを使用すると、Essbaseによって、指定した疎次元メンバーのブロックが取得されます。I/Oは大幅に低下する可能性があります。
Essbaseで、密次元メンバーで使用するFIXコマンドごとにデータベース内を1回循環します。可能な場合は、FIXブロックを組み合せると計算パフォーマンスを向上させることができます。
たとえば、1つのFIXコマンドを使用した場合、次の計算スクリプトでは、Essbaseでデータベース内を1回のみ循環し、ActualとBudgetの両方の値が計算されます:
FIX(Actual,Budget) CALC DIM(Year, Measures); ENDFIX
2つのFIXコマンドを使用した場合、次の計算スクリプトでは、Essbaseでデータベース内を2回循環し、1回目はActualデータ値が計算され、2回目はBudgetデータ値が計算されます:
FIX(Actual) CALC DIM(Year, Measures); ENDFIX FIX(Budget) CALC DIM(Year, Measures); ENDFIX
計算する次元のサブセットをFIXコマンド内で確定することはできません。たとえば、次の計算スクリプトでは、CALC DIMより前のFIXで、市場次元の特定のメンバーが確定されますが、CALC DIMの演算で市場次元全体が計算されるため、エラー・メッセージが戻されます:
FIX(@CHILDREN(East) AND @UDA(Market,"New Mkt")) CALC DIM(Year, Measures, Product, Market); ENDFIX
FIXコマンドは、他のFIXコマンド・ブロック内でネストできます。ただし、ネストされたFIXコマンドが誤って使用されると、不正確な結果が生じる場合があります。たとえば、次の計算スクリプトの目的は、Eastのすべての子に1を割り当ててからNew Yorkに2を割り当てることです:
FIX (@CHILDREN(EAST)) ''100-10''=1; FIX (''New York'') ''100-10''=2; ENDFIX ENDFIX
しかし、ネストされたFIXコマンドは、そのコマンドより上のFIXコマンドで指定された次元のサブセットを確定します(これは許可されていません)。したがって、スクリプトはEastのすべての子に2を割り当てます。これは、次のように記述されたようにスクリプトが実行されるからです:
FIX (@CHILDREN(EAST),''New York'') ''100-10''=1; ''100-10''=2; ENDFIX
ネストされたFIXコマンドを使用するよりも、2つの個別のFIXコマンド・ブロックを使用してください。例:
FIX (@CHILDREN(EAST)) ''100-10''=1; ENDFIX FIX (''New York'') ''100-10''=2; ENDFIX
FIXコマンドには制限があります。『Oracle Essbaseテクニカル・リファレンス』を参照してください。
計算スクリプトでDATAEXPORTコマンドを使用すると、データをバイナリまたはテキストで、またはリレーショナル・データベースに直接エクスポートできます。データエクスポートの一連の計算コマンドでは、エクスポートするデータの種類が限定されており、出力とフォーマットの様々なオプションが用意されています。
注: | バイナリ・ファイルへのDATAEXPORTは、Essbaseのリリース間または32ビット・オペレーティング・システムと64ビット・オペレーティング・システムの間ではサポートされていません。 |
次のコマンド・シーケンスは、データをエクスポートするための一般的な計算スクリプトの構造を示しています:
SET DATAEXPORTOPTIONS { DATAEXPORTLEVEL parameters ; DATAEXPORTDYNAMICCALC ON | OFF; DATAEXPORTNONEXISTINGBLOCKS ON | OFF; DATAEXPORTDECIMAL n ; DATAEXPORTPRECISION n ; DATAEXPORTCOLFORMAT ON | OFF; DATAEXPORTCOLHEADER dimensionName ; DATAEXPORTDIMHEADER ON | OFF; DATAEXPORTRELATIONALFILE ON | OFF; DATAEXPORTOVERWRITEFILE ON | OFF; DATAEXPORTDRYRUN ON | OFF; }; DATAEXPORTCOND parameters ; FIX ( fixMembers) DATAEXPORT parameters ; ENDFIX;
次の表は、すべてオプションのSET DATAEXPORTOPTIONSコマンドの一覧を示しています:
表 86. SET DATAEXPORTOPTIONSコマンド: コンテンツ・オプション
コマンド |
計算 |
---|---|
DATAEXPORTLEVEL |
次のいずれかのデータ値を指定します: ALL、LEVEL0またはINPUT DataExportLevelオプションにデータ値を指定する際には、次のガイドラインを使用します:
|
DATAEXPORTDYNAMICCALC |
動的に計算された値のエクスポートを制御します |
DATAEXPORTNONEXISTINGBLOCKS |
すべての潜在的なデータ・ブロックからデータをエクスポートするのか、それとも既存のデータ・ブロックからのみデータをエクスポートするのかを指定します |
DATAEXPORTDECIMAL |
エクスポートした値の小数点以下の桁数を指定します |
DATAEXPORTPRECISION |
エクスポートした値の合計桁数を指定します |
表 87. SET DATAEXPORTOPTIONSコマンド: 出力フォーマット・オプション
コマンド |
計算 |
---|---|
DATAEXPORTCOLFORMAT |
縦欄フォーマットにするのか、縦欄でないフォーマットにするのかを指定します |
DATAEXPORTCOLHEADER |
列ヘッダーの密次元を指定します |
DATAEXPORTDIMHEADER |
すべての次元名を表示するヘッダー・レコードをファイルのデータと同じ順序で追加します |
DATAEXPORTRELATIONALFILE |
データをリレーショナル・データベースにインポートするためにテキスト・エクスポート・ファイルをフォーマットします |
表 88. SET DATAEXPORTOPTIONSコマンド: 処理オプション
コマンド |
計算 |
---|---|
DATAEXPORTOVERWRITEFILE |
名前と場所が同一の既存のファイルを置き換えるかどうかを指定します |
DATAEXPORTDRYRUN |
エクスポート・プロセス全体を実行しなくても、計算コマンドのセットを検証し、エクスポートの統計(時間の予測を含む)を表示できるようにします |
データのサブセットをエクスポートする計算スクリプトを作成するには、次のようにします:
SET DATAEXPORTOPTIONSコマンドを指定して、エクスポートのコンテンツ(表86を参照)、フォーマット(表87を参照)およびプロセス(表88を参照)のオプションを定義します。
FIX...ENDFIXまたはEXCLUDE...ENDEXCLUDE計算コマンドを使用して、エクスポートするデータベースのスライスを選択します。
FIX...ENDFIXまたはEXCLUDE...ENDEXCLUDEグループの内部にDATAEXPORTコマンドを入れます。
DATAEXPORTコマンドを使用して、エクスポートされたデータをリレーショナル・データベースに直接挿入する場合は、リレーショナル・データベースへのデータのエクスポートを参照してください。
DATAIMPORTBIN計算コマンドを使用して、以前エクスポートしたバイナリ・エクスポート・ファイルをインポートします。
注: | DATAIMPORTBINは、Essbaseのリリース間または32ビット・オペレーティング・システムと64ビット・オペレーティング・システムの間ではサポートされません。 |
SET DATAIMPORTIGNORETIMESTAMP計算コマンドを使用すると、一致するアウトライン・タイムスタンプのインポート要件を管理できます。
その他のエクスポート方法として、ESSCMD、MaxLおよび管理サービス・コンソールを使用してデータベースをバックアップする方法があります。レポート・ライターを使用して、出力テキスト・ファイルを作成し、データベースのサブセットを選択およびフォーマットできます(レポート・スクリプトを使用したテキスト・データのエクスポートを参照)。
DATAEXPORTコマンドを使用して、データをリレーショナル・データベースに直接挿入する場合は、次の点に注意してください:
データが書き込まれるテーブルは、データがエクスポートされる前に存在している必要があります
テーブルおよび列の名前にスペースを含めることはできません
デフォルトでは、エクスポートしたデータを挿入するときに、Essbaseでは行挿入メソッドを使用します。このメソッドでは、行が1つずつ挿入されます。パフォーマンスを向上させるために、バッチ挿入メソッドを使用できます(使用中のリレーショナル・データベースとODBCドライバがこの機能をサポートしている場合)。
注: | 64ビットのEssbaseでは、DATAEXPORTバッチ挿入メソッドを使用した、SQLデータ・ソースへのデータの直接エクスポートをサポートしていません。 |
バッチ挿入を使用可能にするには、essbase.cfgのDATAEXPORTENABLEBATCHINSERT構成設定をTRUEに設定します。Essbase側でバッチ・サイズを判断するのではなく、一度に挿入する行数を制御する場合は、DEXPSQLROWSIZE構成設定を使用して、バッチの行数(2から1000)を指定します。Essbaseによってリレーショナル・データベースおよびODBCドライバがバッチ挿入をサポートするかどうかが決定できない場合は、行挿入メソッドが使用され、DEXPSQLROWSIZE(設定されている場合)は無視されます。
注: | DATAEXPORTENABLEBATCHINSERTがTRUEに設定され、DEXPSQLROWSIZEが1に設定されている場合、バッチ挿入は使用できません(DEXPSQLROWSIZEを1に設定すると、行が1つずつ挿入されます)。 |
他の方法を使用してデータをエクスポートする場合と比べると、計算スクリプトを使用した場合には次の長所と短所があります:
長所
データのサブセットをエクスポートできます
複数のエクスポート先(フラット・ファイル、リレーショナル・データベースおよびバイナリ・ファイル)をサポートしています
タイプ、フォーマットまたはデータのオプションが用意されています
計算スクリプトの一部として、バッチ・プロセスに配置できます
DATAEXPORTはメモリーのカーネル・ストレージ・ブロックに直接アクセスするので、動的計算エクスポート・オプション(DATAEXPORTDYNAMICCALC)を使用しない場合は、エクスポートを非常に速く実行できます
バイナリのエクスポートで使用される圧縮フォーマットでは、エクスポート・ファイルに必要なストレージが他よりも少ないので、バイナリのエクスポートとインポートによって、より高速にデータをバックアップおよび復元できます
データの変更を追跡する他の計算コマンドの前および後にDATAEXPORTコマンドを使用することによって、デバッグ・ツールとして使用してバッチ計算結果を追跡できます
短所
レポート・ライターのフォーマットと比べると、データ・フォーマットのオプションに制限があります
保管済メンバーと動的計算メンバーしか処理せず、属性メンバーと別名に対するサポートがありません
集約ストレージ・データベースをサポートしていません
データをクライアントに直接エクスポートできません
DATAEXPORTNONEXISTINGBLOCKSをONに設定している場合を除いて、動的計算データのエクスポート(DATAEXPORTDYNAMICCALC)が使用されるとパフォーマンスに重大な影響を与える可能性があります。
密次元に設定された式を密メンバーで使用した場合、計算結果が密次元からの値で、オペランドが疎次元からの値であると、Essbaseでは、必要なブロックが自動的には作成されません。
次の例では、既存の実績データから売上高予算と支出データを作成するとします。SalesとExpensesはメジャー密次元のメンバーで、BudgetとActualはシナリオ疎次元のメンバーです。
FIX(Budget) (Sales = Sales -> Actual * 1.1; Expenses = Expenses -> Actual * .95;) ENDFIX
等式の結果であるSalesとExpensesは密次元のメンバーで、オペランドであるActualは疎次元のメンバーです。Essbaseでは、密メンバー式は既存のデータ・ブロックに対してしか実行されないので、計算スクリプトによって必要なデータ・ブロックが作成されず、存在しないブロックに対してBudgetデータ値が計算されません。
DATACOPYコマンドを使用して既存の各ブロックにブロックを作成し、新しいブロックで計算を実行します。例:
DATACOPY Sales -> Actual TO Sales -> Budget; DATACOPY Expenses -> Actual TO Expenses -> Budget; FIX(Budget) (Sales = Sales -> Actual * 1.1; Expenses = Expenses -> Actual * .95;) ENDFIX
Essbaseによって、既存の対応するActualブロックごとに、Budget値を含むブロックが作成されます。DATACOPYコマンドが終了すると、スクリプトの残りの部分によって値が変更されます。
不適切な値が心配な場合は、DATACOPYのかわりに、SET CREATENONMISSINGBLK ON計算コマンドを使用できます。このコマンドでは、すべての潜在的なブロックがメモリーで計算され、データ値を含む計算されたブロックのみが保管されます。SET CREATENONMISSINGBLK計算コマンドは、密次元または疎次元で値を計算するときに便利です。
次の例では、既存の実績データから売上高予算と支出データを作成します。SalesとExpensesはメジャー密次元のメンバーで、BudgetとActualはシナリオ疎次元のメンバーです。
FIX(Budget) SET CREATENONMISSINGBLK ON (Sales = Sales -> Actual * 1.1; Expenses = Expenses -> Actual * .95;) ENDFIX
SET CREATEBLOCKONEQ ONが疎次元に対して設定されている場合、SET CREATENONMISSINGBLK OFFコマンドが検出されるか、計算スクリプトが完了するまで、SET CREATENONMISSINGBLK ONによって一時的にSET CREATEBLOCKONEQ ONが上書きされます。疎次元のメンバーに割り当てられた非定数値を参照してください。 |
SET CREATENONMISSINGBLKコマンドを使用する場合の長所は、密メンバーに適用したときに、メンバー式の影響を受けるデータ・セルのみが保存される点です。短所は、メモリーに生成される潜在的なブロックが多すぎて、計算パフォーマンスに影響する可能性がある点です。このコマンドを使用するときには、FIXを使用して計算するブロックのスコープを制限するなど、潜在的なブロックの数を制限します。
参照:
パーティション・アプリケーションは、複数のサーバー、プロセッサまたはコンピュータにスパンできます。
アプリケーションをパーティション化して、各パーティションで個別に計算を実行すれば、計算パフォーマンスを大幅に改善できます。パーティションを使用するときには、次の点に注意します:
データベース計算全体に対するパフォーマンスの影響を評価します。パフォーマンスを向上させるために次のことを実行できます:
パーティション内のデータの動的計算を参照してください。
たとえば、東部地域の四半期ごとのデータを複製する場合は、第1四半期、第2四半期、第3四半期および第4四半期の値のみを複製し、親の年値をローカルで計算します。
Essbaseで参照される値を取得するときにその値が最新の値であることを確認してください。前に説明したオプション(再設計、動的計算または複製)のいずれかを選択するか、式を計算する前に参照されるデータベースを計算します。
パーティション・アプリケーションの設計とパーティションの作成および管理。を参照してください。
Essbaseで必要な結果を計算できるようにするには、データベースを特定の順序で計算する必要があります。
図134は、「West」、「Central」および「East」データベースの情報を「Corporate Database」から透過的に表示しているパーティションを例示しています。
「West」、「Central」および「East」には実績値のみが含まれています。「Corporate」には実績値と予算値が含まれています。「West」、「Central」および「East」のデータを「Corporate Database」で表示できますが、データが存在するのは「West」、「Central」および「East」データベースのみです。つまり、データは「Corporate Database」には複製されていません。
このため、Essbaseで「Corporate」を計算するときには、「West」、「Central」および「East」から最新の値を取得する必要があります。必要な結果を得るには、「Corporate」を計算する前に「West」、「Central」および「East」を計算する必要があります。
参照:
Essbaseを使用したアーティファクトの管理を参照してください。
Administration Servicesで計算スクリプトを実行するには、計算スクリプトをEssbaseサーバー上でアーティファクトとして保存する必要があります。計算スクリプトの保存を参照してください。
Administration Servicesを使用して計算スクリプトを実行するときには、計算をバックグラウンドで実行できるので、計算の処理中でも作業を続けることができます。バックグラウンド・プロセスのステータスをチェックして、いつ計算が完了したかを確認できます。Oracle Essbase Administration Services Online Helpの「計算スクリプトの実行」を参照してください。
計算スクリプトの実行後に、Smart Viewで計算の結果を確認できます。
Essbaseは、実行した計算スクリプトに関して次の情報を提供します:
詳細を表示するには、計算スクリプトでSET MSG SUMMARY、SET MSG DETAILおよびSET NOTICEコマンドを使用します。データベース計算用のグローバル設定の指定を参照してください。
これらのメッセージを使用することによって、計算方法を理解することができ、次回の計算で調整を行うことができます。
この情報が表示される場所は、計算スクリプトの実行に使用したツールによって異なります。
Administration ServicesおよびSmart View - アプリケーション・ログ
Essbaseサーバー・ログおよびアプリケーション・ログの表示を参照してください。
MaxL - 標準出力(コマンドライン・ウィンドウ)
情報の量は、MaxLシェルに設定されているメッセージ・レベルによって異なります。
ESSCMD - ESSCMDウィンドウまたは標準出力(コマンドライン・ウィンドウ)
情報の量は、ESSCMDに設定されているメッセージ・レベルによって異なります。
ESTIMATEFULLDBSIZE構成設定を使用して、単一のCALC ALLですべてのデータまたはデータの一部をロードするために必要なディスク・サイズを見積ることができます。
計算によるデータベース・サイズへの影響の見積りを参照してください。