メンバーの計算順序

Essbaseよってアウトライン・メンバーが計算されるデフォルトの順序は一般に、アウトライン内のディメンションの順序および式が適用されるかどうかを考慮して、勘定科目、時間、密、疎です。

データベースでデフォルトの計算(CALC ALL)を実行する場合、Essbaseでは次の順序でディメンションが計算されます。

  • 勘定科目としてタグ付けされたディメンションと時間としてタグ付けされたディメンションの両方が存在し、勘定科目ディメンションのメンバーに式が適用される場合、Essbaseでは次の順序で計算が行われます。

    1. 勘定科目としてタグ付けされたディメンション

    2. 時間としてタグ付けされたディメンション

    3. その他の密ディメンション(データベース・アウトラインに表示される順序)

    4. その他の疎ディメンション(データベース・アウトラインに表示される順序)

  • それ以外の場合、Essbaseによって次の順序で計算されます。

    1. 密ディメンション(データベース・アウトラインに表示される順序)

    2. 疎ディメンション(アウトラインに表示される順序)

ノート:

属性ディメンションはデータベース集計に含まれないため、計算順序には影響しません。「Essbase属性の操作」を参照してください。

Sample Basicデータベースでは、ディメンションは、Measures、Year、Scenario、Product、Marketの順序で計算されます:

計算スクリプトを使用して、デフォルトの順序を上書きできます。「ブロック・ストレージ・キューブの計算スクリプトの開発」を参照してください。

メンバーの関係の計算効果

Essbaseディメンション内の計算の順序は、アウトライン内のメンバー間の関係によって異なります。アウトラインのメンバーのロールアップ(集計)方法は、オドメータと同様です。

ディメンションの各分岐(階層)内では、レベル0の値が最初に計算され、続いてレベル1の親の値が計算されます。次に、次の分岐のレベル0の値が計算され、続いてレベル1の親の値が計算されます。すべてのレベルが計算されるまで、この方法で計算が続行されます。

次のイメージは、Sample BasicデータベースのYearディメンションを示しています。メンバーの計算順序は、各メンバーの左側に示されます。この例では、親メンバーが動的計算としてタグ付けされていないと想定しています。

図19-3 Sample BasicのYearディメンションの計算順序


メンバーの計算順序を示す数字を含む、展開されたYearディメンションのアウトライン。1から17の順序は、Jan、Feb、Mar、Qtr1、Apr、May、Jun、Qtr2、Jul、Aug、Sep、Qtr3、Oct、Nov、Dec、Qtr4、Yearです。

Janは最初の分岐の最初のメンバーです。Janには式がないため、評価されません。分岐内の他の2つのメンバーであるFebとMarも同様です。

Essbaseは、Jan、FebおよびMarを集計してQtr1を計算します。この例では、+集計演算子で示されているように、これらの月が加算され、Qtr1の値が指定されます。

次に、Essbaseは同じ方法でQtr2からQtr4の分岐を計算します。

最後に、EssbaseはQtr1からQtr4の値を集計することによってYearメンバーを計算します。+集計演算子で示されているように、これらの四半期はYearの値を提供するために加算されます。

メンバーの集計方法

Essbaseでブロック・ストレージ・キューブのメンバーを集計する方法を選択するには、データベース・アウトラインのメンバーに計算演算子(+、-、/、*、%、~、^)を適用します。

勘定科目メンバーにタイム・バランス・タグ(First、LastまたはAverage)がある場合、Essbaseはそれに応じて集計します。「期首、期末および平均の値の計算」を参照してください。

親メンバーにラベルのみの演算子がある場合、Essbaseはその子から親を計算しません。

メンバーに~演算子がある場合、Essbaseはメンバーをその親まで集計しません。

メンバーに^演算子がある場合、Essbaseはメンバーをどのディメンションでも集計しません。

ノート:

動的計算を使用する場合、Essbaseでは異なる計算順序が使用されることがあります。「動的計算の計算順序」を参照してください。

データベース・アウトラインでのディメンションの順序

必要な計算結果を確実にするには、計算演算子を使用してメンバーの除算(/)、乗算(*)またはパーセント(%)の計算を行う場合、または一部のメンバーに式がある場合、Essbaseアウトラインでディメンションの計算順序を考慮します。

計算演算子のみを使用してデータベース・アウトラインのメンバーを加算(+)および除算(–)し、アウトラインで式を使用しない場合、計算順序を考慮する必要はありません。

データベース・アウトラインのメンバーに対する式

Essbaseアウトラインのメンバーに対する式を配置する場合は、ディメンションの計算順序を考慮してください。あるディメンションのメンバーに設定された式が、別のディメンションに対する後続の計算によって上書きされることがあります。

たとえば、Sample Basicデータベースには、勘定科目としてタグ付けされたMeasuresディメンションと、時間としてタグ付けされたYearディメンションがあります。


タイプが時間のYearディメンションで、タイプが勘定科目のMeasuresディメンションが部分的に展開され、メンバーのMarginが強調表示されています。

最初にMeasures、次にYearが計算されます。MeasuresディメンションのMarginに式を設定した場合、EssbaseはMeasuresディメンションを計算するときに式を計算します。その後、EssbaseはYearディメンションを集計するときにこの式を上書きします。「セルの計算順序」を参照してください。

計算演算子*、/および%の使用

計算演算子を使用して、Essbaseアウトラインのメンバーの乗算(*)、除算(/)およびパーセンテージの計算(%)を行う場合は、ディメンションの計算順序を考慮してください。必要な計算済の値が、別のディメンションに対する後続の計算によって上書きされることがあります。

たとえば、Sample Basicデータベースには、勘定科目としてタグ付けされたMeasuresディメンションと、時間としてタグ付けされたYearディメンションがあります。最初にMeasures、次にYearが計算されます。Measuresディメンションのメンバーを乗算した場合、計算された結果は、EssbaseがYearディメンションの値を集計するときに上書きされることがあります。セルの計算順序を参照してください。

乗算(*)、除算(/)またはパーセンテージ(%)演算子を使用してメンバーを集計する場合は、必要な結果を得られるように、分岐内のメンバーを慎重に順序付けてください。

図19-4は、アウトラインに出現する計算演算子を示しています。ユーザーがChild 2とChild 3の合計をChild 1で除算すると想定します。ただし、Child 1が最初のメンバーである場合、EssbaseはChild 1から処理を開始し、値#MISSINGをChild 1で除算します。結果は#MISSINGになります。次に、EssbaseはChild 2とChild 3を加算します。明らかに、これは必要な結果ではありません。

図19-4 データベース・アウトラインの計算演算子


アウトラインの計算演算子。

正しい結果を計算するには、Child 1を分岐の最後のメンバーにします。

データベース・アウトラインのメンバーに式を適用しても、同じ結果を得ることができます。ただし、図19-4に示すように、メンバーに対してこれらの計算演算子を使用する方がはるかに効率的です。

前方計算参照の回避

期待どおりの計算結果を得るには、アウトラインに前方計算参照が含まれていないことを確認します。前方計算参照は、計算メンバーの値が、Essbaseでまだ計算されていないメンバーに依存している場合に発生します。このような場合、Essbaseで必要な計算結果が生成されない可能性があります。

たとえば、次に示すProductディメンションについて考えてみます。このディメンションには、3つの前方計算参照があります。2つの共有メンバー(P100–20およびP300–20)と1つの非共有メンバー(P500–20)です。

図19-5 前方計算参照のあるProductディメンション


このイメージは、3つの前方計算参照があるProductディメンション・アウトラインを示しています。

アウトライン・エディタでアウトラインを確認すると、Essbaseによって前方計算参照がある共有メンバーが識別されます。アウトラインを確認しても、前方計算参照がある非共有メンバーは識別されません。前方計算参照を含むアウトラインは保存して使用できます。

Dietの下位の5つのメンバーについて考えます。メンバーP100-20、P300-20およびP500-20には、前方計算参照があります。

  • P100-20 (+) (共有メンバー): Essbaseは、プロトタイプ・メンバーP100-20を計算する前に、共有メンバーP100-20を計算します。プロトタイプ・メンバーP100-20には子があるため、Essbaseは共有メンバーP100-20を正確に計算するには、子を加算してプロトタイプ・メンバーを先に計算する必要があります。

  • P300-20 (+) (共有メンバー): Essbaseは、プロトタイプ・メンバーP300-20を計算する前に、共有メンバーP300-20を計算します。プロトタイプ・メンバーP300-20には式があるため、Essbaseは共有メンバーP300-20を正確に計算するには、プロトタイプ・メンバーを先に計算する必要があります。

  • P500-20 (+) ("P200-20" + "P300-20"): P500-20に適用された式は、Essbaseでまだ計算されていないメンバーを参照します。そのようなプロトタイプ・メンバーの1つであるP300-20には独自の式があり、EssbaseはP500-20を正確に計算するには、P300-20を先に計算する必要があります。メンバーP200-20およびP400-20は、前方計算参照がないため正しく計算されます。

  • P200-20 (+) (共有メンバー): Essbaseはプロトタイプ・メンバーP200-20を計算する前に共有メンバーP200-20を計算しますが、P200-20は前方計算参照ではありません。プロトタイプ・メンバーP200-20には計算の依存関係がありません(子や式がありません)。このため、Essbaseは共有メンバーの前にプロトタイプ・メンバーを計算する必要はありません。Essbaseは単にプロトタイプ・メンバーの値を取得します。

  • P400-20 (+) ("P200-10" * 2): P400-20に適用された式はEssbaseでまだ計算されていないメンバーを参照しますが、P400-20は前方計算参照ではありません。式のメンバー・プロトタイプ自体には、計算の依存関係はありません。P200-10は式の唯一のメンバーであり、P200-10自体には子や式がありません。EssbaseはP400-20を正確に計算します。

P100-20、P300-20およびP500-20の正しい計算結果を得るには、アウトラインのメンバーの順序を変更します。次に示すように、Diet共有メンバーをRegularメンバーの後に配置することで、Essbaseが必要な順序でメンバーを計算するようにします。

図19-6 前方計算参照のない変更されたProductディメンション


このイメージは、前方計算参照のないProductディメンション・アウトラインを示しています。

Essbaseは次のように計算するようになりました。

  • 共有メンバーP100-20の前に、プロトタイプ・メンバーP100-20を計算します。したがって、P100-20には前方計算参照はありません。

  • 共有メンバーP300-20の前に、プロトタイプ・メンバーP300-20。したがって、P300-20には前方計算参照はありません。

  • メンバーP500-20の前に、式のあるメンバーP300-20。したがって、P500-20には前方計算参照はありません。