セルの計算順序

Essbaseによって各データ・ブロック内のセルが計算される順序は、データベースの構成方法によって異なります。

各データ・ブロックには、疎ディメンション・メンバーの一意の組合せに対するすべての密ディメンション・メンバーの値が含まれます。各データ値は、データ・ブロックのセルに含まれます。

データベースの構成方法によって、各ブロック内の密ディメンション・メンバーの計算順序と、疎ディメンション・メンバーを表すブロックの計算順序も定義されます。

次の例を参照してください。

セルの計算順序: 例1

この例では、保管された密ディメンションのデータ・スライスを考えてみます。ディメンションの順序によって計算順序が定義されます。#MISSING値が集計され、式はありません。Essbaseでは、スライスを1回のパスで計算できます。

最も単純なケースのこの例では、次の条件が満たされています。

  • 時間タグまたは勘定科目タグが付けられたディメンションはありません。

  • #MISSING値を集計する設定がオンになっています。

  • MarketとYearは密ディメンションです。

    Essbaseでは、データベース・アウトラインに定義された順序で密ディメンションが計算されます。データベース・アウトラインで、YearディメンションがMarketディメンションの前に配置されており、最初に計算されるとします。

次のグリッドは、スライス(データ・ブロック内のセルのサブセット)を示しています。グリッドでは、スライスのセルの計算順序は1から6の数字で表されます。

表19-3 計算順序の例1: 入力セルと計算済セル

Year-Market New York Massachusetts East
Jan 112345 68754 3
Feb 135788 75643 4
Mar 112234 93456 5
Qtr1 1 2 6

データ値は次の入力セルにロードされています。

  • Jan -> New York

  • Feb -> New York

  • Mar -> New York

  • Jan -> Massachusetts

  • Feb -> Massachusetts

  • Mar -> Massachusetts

Essbaseでは、次の順序でセルが計算されます。

  1. Qtr1 -> New York

  2. Qtr1 -> Massachusetts

  3. Jan -> East

  4. Feb -> East

  5. Mar -> East

  6. Qtr1 -> East

Qtr1 -> Eastは、複数の集計パスを持ち、MarketまたはYearで集計できます。Marketで集計される場合、Qtr1 -> New YorkとQtr1 -> Massachusettsの集計になります。Yearで集計される場合、Jan -> East、Feb -> EastおよびMar -> Eastの集計になります。

Essbaseでは、Qtr1 -> Eastに複数の集計パスがあることが認識されます。このため、次に示すように、Qtr1 -> EastはQtr1の値を集計することで1回のみ計算され、最後に計算されたディメンション(この例では、Marketディメンション)の集計パスが使用されます。

表19-4 計算順序の例1: 結果

Year-Market New York Massachusetts East
Jan 112345 68754 181099
Feb 135788 75643 211431
Mar 112234 93456 205690
Qtr1 360367 237853 598220

計算順序に基づき、Qtr1に対するメンバー式を配置した場合、その式は、Qtr1 -> Eastの計算時にEssbaseで無視されます。Eastにメンバー式を配置した場合、その式は、Marketに沿ってEssbaseがQtr1 -> Eastを集計したときに計算されます。

必要に応じて、計算スクリプトを使用して、選択した順序でディメンションを計算できます。

セルの計算順序: 例2

この例では、保管された密ディメンションのデータ・スライスを考えてみます。データベースの構成により、ディメンションの順序によって計算順序が定義されます。1つのブロックを2回計算する必要があります。

この例では、次の条件が満たされています。

  • 時間タグまたは勘定科目タグが付けられたディメンションはありません。

  • #MISSING値を集計する設定がオフになっています(デフォルト)。

  • MarketとYearは密ディメンションです。

    Essbaseでは、データベース・アウトラインに定義された順序で密ディメンションが計算されます。データベース・アウトラインで、YearディメンションがMarketディメンションの前に配置されており、最初に計算されるとします。

次のグリッドは、スライス(データ・ブロック内のセルのサブセット)を示しています。グリッドでは、スライスのセルの計算順序は1から7の数字で表されます。

表19-5 計算順序の例2: 入力セルと計算済セル

Year-Market New York Massachusetts East
Jan 112345 68754 4
Feb 135788 75643 5
Mar 112234 93456 6
Qtr1 1 2 3/7

データ値は次の入力セルにロードされています。

  • Jan -> New York

  • Feb -> New York

  • Mar -> New York

  • Jan -> Massachusetts

  • Feb -> Massachusetts

  • Mar -> Massachusetts

Essbaseによって、New York、MassachusettsおよびEastのQtr1のセルと、Jan、FebおよびMarchのEastのセルが計算されます。

  1. Qtr1 -> New York

  2. Qtr1 -> Massachusetts

  3. Qtr1 -> East

  4. Jan -> East

  5. Feb -> East

  6. Mar -> East

  7. Qtr1 -> East

Qtr1 -> Eastは、YearとMarketの両方の集計パスに基づいて計算されます。最初に、Qtr1 -> New YorkとQtr1 -> Massachusettsの集計としてQtr1 -> Eastが計算されます。次に、Jan -> East、Feb -> EastおよびMar -> Eastの集計としてQtr1 -> Eastが計算されます。

結果は、例1の結果と同じです。ただし、Qtr1 -> Eastは2回計算されています。このことは、データを親レベルでロードする必要があるときに重要です。

計算順序に基づき、Qtr1に対するメンバー式を配置した場合、その結果は、EssbaseによってMarketに沿ってQtr1 -> Eastが集計されるときに上書きされます。Eastにメンバー式を配置した場合、Marketが最後に計算されるため、その結果が維持されます。

表19-6 計算順序の例2: 結果

Year-Market New York Massachusetts East
Jan 112345 68754 181099
Feb 135788 75643 211431
Mar 112234 93456 205690
Qtr1 360367 237853 598220

セルの計算順序: 例3

この例では、保管された密ディメンションのデータ・スライスを考えてみます。データベースの構成により、ディメンションの順序によって計算順序が定義されます。ブロックを計算するための2つの集計パスがあります。

レベル0以外の入力データは、Marketディメンションの地域のメンバーに沿って計算する必要があります。子市場のデータが欠落しています。#MISSING値は集計されず、式もありませんが、Essbaseは2つのパスを作成します。

この例では、次の条件が満たされています。

  • 時間タグまたは勘定科目タグが付けられたディメンションはありません。

  • #MISSING値を集計する設定がオフになっています(デフォルト)。

  • データ値は親レベルでロードされています。

  • MarketとYearは密ディメンションです。

    Essbaseでは、データベース・アウトラインに定義された順序で密ディメンションが計算されます。データベース・アウトラインで、YearディメンションがMarketディメンションの前に配置されており、最初に計算されるとします。

次のグリッドは、計算が必要なスライス(データ・ブロック内のセルのサブセット)を示しています。

表19-7 計算順序の例3: 入力セルと#MISSING値

Year-Market New York Massachusetts East
Jan #MISSING #MISSING 181099
Feb #MISSING #MISSING 211431
Mar #MISSING #MISSING 205690
Qtr1 #MISSING #MISSING  

セルは、セルの計算順序: 例2と同じ順序で計算されます。Qtr1 -> Eastは、YearとMarketの両方の集計パスに基づいて計算されます。

#MISSING値を集計する設定がオフになっているため、Essbaseでは、#MISSING値は集計されません。したがって、親レベルでロードされているデータは、それより下の#MISSING値によって上書きされません。

ただし、子のデータ値のいずれかが#MISSINGでない場合、その値は集計されるため、その値によって親の値が上書きされます。たとえば、Jan -> New Yorkに50000.00が含まれる場合、親レベルでロードされる値はこの値によって上書きされます。

Essbaseでは、Qtr1 -> Eastセルの値を確実に計算するために、セルを2回計算する必要があります。Qtr1 -> Eastが最後の集計パスのみに基づいて計算された場合、その結果は#MISSINGとなり、必要な結果になりません。

結果で、Essbaseでは最初にJan -> East、Feb -> EastおよびMar -> Eastを集計することによって、Qtr1 -> Eastセルを正しく計算してから、Marketの集計パスに基づいて計算することが示されています。ただし、Qtr1 -> New YorkおよびQtr1 -> Massachusettsの#MISSING値は集計されないため、Qtr1 -> Eastの値は上書きされません。

表19-8 計算順序の例3: 結果

Year-Market New York Massachusetts East
Jan #MISSING #MISSING 181099
Feb #MISSING #MISSING 211431
Mar #MISSING #MISSING 205690
Qtr1 #MISSING #MISSING 598220

セルの計算順序: 例4

この例では、保管されたディメンションのデータ・スライスを考えてみます。データベースの構成によって、ブロックが計算される順序が決まります。

レベル0以外の入力データの中には、時間ディメンションの四半期メンバーに沿って計算する必要があるものがあります。子月のデータがありません。このキューブの構成方法では、Accountsディメンションが最初に計算され、#MISSING値は集計されません。このスライスの勘定科目階層には式がありません。

この例では、次の条件が満たされています。

  • Yearディメンションが時間としてタグ付けされています。

  • Measuresディメンションが勘定科目としてタグ付けされています。

    Essbaseでは、最初に勘定科目としてタグ付けされたディメンションを計算し、次に時間としてタグ付けされたディメンションを計算します。したがって、この例では、MeasuresがYearより先に計算されます。

  • #MISSING値を集計する設定がオフになっています(デフォルト)。

  • Marketing、PayrollおよびMisc Expensesの値は、四半期(レベル1)でロードされています。

次のイメージは、Sample BasicデータベースのMeasuresディメンションのProfit分岐を示しています。この例では、Total Expensesが保管されている(動的計算メンバーではない)ことを前提としています。

図19-9 MeasuresディメンションのProfit分岐


MeasuresディメンションのProfit分岐。

式がなく、#MISSINGが集計されないため、上位レベルの値は上書きされません。2つの集計パス(レベル0以外のメジャー)を含むデータ値は2回計算されます。

次のグリッドは、スライス(データ・ブロック内のセルのサブセット)を示しています。グリッドでは、スライスのセルの計算順序は1から17の数字で表されます。

表19-9 計算順序の例4: 入力セル、#MISSING値および計算済セル

Measures/Year Jan Feb Mar Qtr1
Sales 31538 32069 32213 13
COGS 14160 14307 14410 14
Margin 1 4 7 10/15
Marketing #MISSING #MISSING #MISSING 15839
Payroll #MISSING #MISSING #MISSING 12168
Misc #MISSING #MISSING #MISSING 233
Total Expenses 2 5 8 11/16
Profit 3 6 9 12/17

次のセルには、複数の集計パスがあります。

  • Margin -> Qtr1

  • Total Expenses -> Qtr1

  • Profit -> Qtr1

#MISSING値を集計する設定がオフになっているため、Essbaseでは、#MISSING値は集計されません。親レベルでロードされたデータは#MISSING値によって上書きされず、Essbaseによって、複数の集計パスがあるセルが2回計算されます。

計算順序に基づいて、Marginに式を配置した場合、その結果はQtr1の集計によって上書きされます。

結果を次に示します。

表19-10 計算順序の例4: 結果

Measures/Year Jan Feb Mar Qtr1
Sales 31538 32069 32213 95820
COGS 14160 14307 14410 42877
Margin 17378 17762 17803 52943
Marketing #MISSING #MISSING #MISSING 15839
Payroll #MISSING #MISSING #MISSING 12168
Misc #MISSING #MISSING #MISSING 233
Total Expenses       28240
Profit 17378 17762 17803 12/17

密ディメンションに対する式についてのセルの計算順序

密ディメンションのメンバーに対する式を配置するときは、セルの計算順序を慎重に検討してください。前の例に示すように、複数の集計パスがあるセルでは、最後に計算されたディメンションによって、以前のセルの計算が上書きされます。

データ・ブロック内のセルの計算順序は、メンバーに対する式の影響を受けません。Essbaseでは、データ・ブロック内で式が検出されると、他の必要なデータ・ブロックがロックされ、その式が計算されて、データ・ブロックの計算が続行されます。

必要に応じて、計算スクリプトを使用して、ディメンションの計算順序を変更できます。「ブロック・ストレージ・キューブの計算スクリプトの開発」および「ブロック・ストレージ・キューブの式の開発」を参照してください。