動的に計算する値

一部のデータ値を動的に計算すると、バッチ計算時間とディスク使用量が減少しますが、取得時間が長くなる可能性があります。どのEssbaseメンバーを動的に計算するかを決定する場合は、次のトピックで説明するガイドラインを使用します。

式を持たないレベル0のメンバー、ラベルのみのメンバーおよび共有メンバーを除き、任意のメンバーを動的計算としてタグ付けできます。

どのメンバーを動的に計算するかの選択は、データベース構造、および(1)計算時間の短縮やディスク使用量の削減の必要性と、(2)ユーザー向けの高速なデータ取得の必要性とのバランスによって変わります。

Sample Basicデータベースでは、Yearディメンションは動的計算です。

図21-1 動的計算メンバーを示しているSample Basicアウトライン


動的計算メンバーがあるYearディメンション

Smart Viewでは、ビジュアル・キューを表示して、動的に計算される値を区別できます。

動的に計算された値を含む問合せを開発する場合は、Smart Viewの「データを取得せずにナビゲート」オプションを使用して、テスト問合せの作成中にEssbaseが値を動的に計算および保管しないようにします。

密メンバーと動的計算

密ディメンションのEssbase動的計算メンバーの適切な候補には、上位レベルのメンバーと、単純な式を持つレベル0のメンバーが含まれます。

密ディメンションのメンバーに、次の変更を加えることを検討してください。

  • 密ディメンションの上位レベル・メンバーを動的計算としてタグ付けします。

  • 単純な式を持つ密ディメンションのレベル0のメンバーを動的計算としてタグ付けして、取得時間の増加を評価します。

    単純な式の場合、Essbaseでコストのかかる計算を実行する必要がありません。財務関数またはディメンション間演算子(->)を含んでいる式は複雑な式です。

疎メンバーと動的計算

疎ディメンションのEssbase動的計算メンバーの適切な候補には、あまり多くの子を持たない上位レベルのメンバーと、式を持つメンバーが含まれます。

疎ディメンションのメンバーに、次の変更を加えることを検討してください。

  • 6個以下の子を持つ疎ディメンションの一部の上位レベル・メンバーを動的計算としてタグ付けします。

  • 複雑な式を持つ疎ディメンション・メンバーを動的計算としてタグ付けします。

    複雑な式の場合、Essbaseでコストのかかる計算を実行する必要があります。たとえば、財務関数を含んでいる式は複雑な式です。「複雑なEssbaseメンバー式」を参照してください

  • 頻繁に再構築するディメンションの上位レベル・メンバーを動的計算としてタグ付けします。

  • 20個以上の子孫を持つ疎ディメンションの上位レベル・メンバーは、動的計算としてタグ付けしないでください。

親子関係と動的計算

1人の子を持つ親

親メンバーに1つの子メンバーがあり、その子を動的計算としてタグ付けする場合は、親も動的計算としてタグ付けする必要があります。

ただし、親メンバーに1つの子メンバーがあり、親が動的計算メンバーの場合は、子を動的計算としてタグ付けする必要はありません。

バッチ計算における動的計算の依存性

メンバーの計算が動的計算の子メンバーの計算に依存する場合、Essbaseでは、親を計算するために、データベースのバッチ計算時に子メンバーを最初に計算する必要があります。このため、通常の計算時間は短縮されません。この要件は、疎ディメンションおよび密ディメンションのメンバーに適用されます。

たとえば、次の図では、Qtr1は動的計算メンバーです。その子であるJan、FebおよびMarは動的ではありません。その親であるYearは動的ではありません。Essbaseでは、バッチ計算時にYearを計算するときに、その子(Qtr1を含む)の値を集計する必要があります。そのため、Qtr1は動的計算ですが、Qtr1を計算するための追加の時間が必要になります。

図21-2 Qtr1を動的計算メンバーとするYearディメンション


このイメージは、Qtr1がJan、FebおよびMarchに展開され、Qtr1のみが動的であるYearディメンションを示しています。

計算スクリプトと動的計算

動的計算メンバーの計算スクリプトの計算は実行できません。計算スクリプトを使用してメンバーを明示的に計算する場合は、そのメンバーを動的計算としてタグ付けしないでください。

Essbaseでは、計算スクリプトのCALC ALL文またはCALC DIM文を計算するときに、動的計算メンバーの計算を省略します。

同様に、メンバー・セット関数(@CHILDRENや@SIBLINGSなど)を使用して、計算するメンバーのリストを指定した場合、Essbaseでは、作成されたリストのすべての動的計算メンバーの計算が省略されます。

計算スクリプトで明示的に動的計算メンバーを指定した場合、その計算スクリプトは失敗します。

たとえば、次の計算スクリプトは、Qtr1が動的計算メンバーでない場合にのみ有効です。

FIX (East, Colas)
   Qtr1;
ENDFIX

式と動的に計算されるメンバー

Essbaseアウトライン式では動的計算メンバーを使用できますが、計算スクリプトでは式ターゲットとして使用できません。

式をアウトラインに適用するときに、動的に計算されるメンバーをその式に含めることができます。たとえば、Qtr1が動的計算メンバーの場合、データベース・アウトラインでQtr1に対する次の式を配置できます。

Qtr1 = Jan + Feb;

動的に計算されるメンバーを計算スクリプト内の式計算のターゲットにすることはできません。Essbaseは、動的に計算された値に対してメモリーを予約せず、値を割り当てることもできません。たとえば、Qtr1が動的計算メンバーの場合、計算スクリプトに次の式を含めると、Essbaseで構文エラーが表示されます。

Qtr1 = Jan + Feb;

Qtr1が動的計算メンバーで、Yearはそうでない場合、計算スクリプトで次の式を使用できます。

Year = Qtr1 + Qtr2;

Essbaseでは、動的に計算されるメンバーに値を割り当てないため、この式は有効です。

ノート:

アウトライン式または計算スクリプトのどちらでも、動的に計算されるメンバーを参照すると、Essbaseは、パフォーマンスに影響を与える動的計算を実行するために通常の計算を中断します。

スクリプトと動的に計算されるメンバー

実行時依存の動的計算メンバー式がある場合に過剰な計算を回避するために、SET FRMLRTDYNAMIC OFFをEssbase計算スクリプトに追加できます。

計算スクリプトの前処理フェーズでは、アウトラインに密の動的計算メンバーが含まれているかどうかを判断できません。スクリプトに実行時依存の式がある場合、Essbaseでは、スクリプトの実行時に密の動的計算メンバーをすべて計算する必要があります。SET FRMLRTDYNAMIC OFF計算コマンドを使用すると、これらの動的計算メンバーの計算が停止されるため、パフォーマンスが向上します。