データ・ブロックの計算
組合せに対して少なくとも1つのデータ値が存在する場合、Essbaseでは疎ディメンション・メンバーの一意の組合せごとにデータ・ブロックが作成されます。 各データ・ブロックは、疎ディメンション・メンバーの一意の組合せに対するすべての密ディメンション・メンバー値を表します。
たとえば、Sample.Basicデータベースでは、MarketディメンションとProductディメンションは疎です。 したがって、データ・ブロックNew York -> Colasは、疎の組合せNew York -> ColasのYear、MeasuresおよびScenarioディメンションのすべてのメンバー値を表します。
これらの項では、上位レベル、レベル0および入力データ・ブロックの概念をよく理解していることを前提としています。 「データ・ブロック内のデータ・ストレージ」を参照してください。
密ディメンションの計算
密ディメンションを計算し、FIXコマンドを使用しない場合、Essbaseでは、データベース内のすべてのデータ・ブロックのデータ値の少なくとも一部が計算されます。
たとえば、次の計算スクリプトはSample.Basicデータベースに基づいています:
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Year);
このスクリプトは、密ディメンションであるYearディメンションを計算します。 Yearは密であるため、データベース内のすべてのデータ・ブロックにはYearディメンションのメンバーが含まれます。 したがって、Essbaseではすべてのデータ・ブロックのデータ値が計算されます。 このスクリプトはSET CLEARUPDATESTATUS AFTERコマンドを使用するため、Essbaseはすべてのデータ・ブロックをクリーンとしてマークします。
疎ディメンションの計算
疎ディメンションを計算する場合、Essbaseではデータベース内のすべてのデータ・ブロックを計算する必要がない場合があります。
たとえば、次の計算スクリプトはSample.Basicデータベースに基づいています:
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);
このスクリプトは、疎ディメンションであるProductディメンションを計算します。 Productは疎であるため、Productディメンションのメンバーごとにデータ・ブロックが存在します。 たとえば、New York -> Colasにはあるデータ・ブロックが、New York -> 100-10には別のデータ・ブロックが存在します。
レベル0の効果
データ・ブロックNew York -> 100-10はレベル0のブロックで、疎ディメンション(MarketまたはProduct)の親メンバーを表していません。 New York -> 100-10のデータ値は入力値で、データベースにロードされます。 したがって、Essbaseでこのデータ・ブロックを計算する必要はありません。 また、スクリプトでSET CLEARUPDATESTATUS AFTERコマンドが使用されていても、EssbaseはNew York -> 100-10のデータ・ブロックをクリーンとしてマークしません。
ノート:
Essbaseでは、対応する疎のレベル0メンバーに式が適用されている場合、レベル0のデータ・ブロックが計算されます。
データをデータベースにロードする場合、データをロードするレベル0のデータ・ブロックはダーティとしてマークされます。 その後、疎ディメンションのみを計算する場合、Essbaseでは計算されないため、レベル0のブロックは使用済のままになります。 したがって、疎ディメンションのみを再計算する場合、上位レベルのブロックは最初はクリーンでしたが、上位レベルのブロックが使用済の場合、上位レベルのブロックはすべて使用済としてマークされるため、Essbaseではすべての上位レベルのデータ・ブロックが再計算されます。
同時計算の処理
同時計算で同じデータ・ブロックを計算しようとしたときに、インテリジェント計算がオンになっていると、Essbaseでは、データ・ブロックがすでにクリーンとしてマークされているため再計算されない場合があります。
次の例では、Sample.Basicデータベースに基づいて、ActualおよびBudgetが密Scenarioディメンションのメンバーになります。 シナリオが密であるため、データベース内の各データ・ブロックには実績値と予算値が含まれます。 ユーザー1が次の計算スクリプトを実行すると、EssbaseはNew Yorkを表すすべてのデータ・ブロックの実際の値を計算します。 Essbaseでは、各計算済ブロックのすべてのデータ値が計算されているわけではありませんが、計算済データ・ブロックにクリーンのマークが付けられます。 たとえば、Budget値は計算されていません。
SET CLEARUPDATESTATUS AFTER;
FIX(“New York”, Actual)
CALC DIM(Product, Year);
ENDFIX
ユーザー2が次の計算スクリプトを実行してNew Yorkの予算値を計算する場合、指定されたデータ・ブロックはすでにクリーンとマークされているため、Essbaseでは再計算されません。 予算の計算結果が正しくありません。
SET CLEARUPDATESTATUS AFTER;
FIX(“New York”, Budget)
CALC DIM(Product, Year);
ENDFIX
この問題を解決するには、Scenarioディメンションを疎にします。 この場合、Actual値とBudget値は異なるデータ・ブロックにあります。たとえば、New York -> Colas -> Actual and New York -> Colas -> Budgetです。 この場合、2番目の計算スクリプトはBudgetデータ・ブロックを正しく計算します。
同時計算の実行には、データ・キャッシュの増加が必要になる場合があります。
複数パス計算の理解
可能な場合は常に、Essbaseによって、データベースを通過する計算パスでデータベースが計算されます。 「計算パス」を参照してください。
計算スクリプトを使用してデータベースを計算する場合、Essbaseが実行する計算パスの数は計算スクリプトによって異なります。 「インテリジェント計算およびデータ・ブロック・ステータス」および「算式と計算のグループ化」を参照してください。
たとえば、Essbaseが最初の計算パス・スルーでデータ・ブロックを計算し、それらをクリーンとしてマークするとします。 後続のパスで同じデータ・ブロックを計算しようとして、インテリジェント計算が有効になっている場合、データ・ブロックはすでにクリーンとしてマークされているため、Essbaseでは再計算されません。
複数パス計算の例と解決策の確認
これらの例では、不適切な計算結果を生成し、正しい結果を得るためのソリューションを提供する状況について説明します。 これらはSample.Basicデータベースに基づいており、インテリジェント計算がオンになっていることを前提としています。
例1: インテリジェントな計算と2パス
この計算スクリプトでは、デフォルトの計算が実行され、次に2パス計算が実行されます:
CALC ALL;
CALC TWOPASS;
エラー
Essbaseは、データベース内の使用済データ・ブロックを計算し、すべてのデータ・ブロックをクリーンとしてマークします。 Essbaseでは、勘定科目としてタグ付けされたディメンションで、2パスとしてタグ付けされたメンバーを再計算する必要があります。 ただし、指定したデータ・ブロックはすでにクリーンとしてマークされているため、Essbaseでは再計算されません。 計算結果が正しくありません。
解決策
2パス計算のインテリジェント計算を無効にすると、正しい結果を計算できます。
例2: SET CLEARUPDATESTATUSおよびFIX
この計算スクリプトは、New Yorkのデータ値を計算します。 計算は、Productディメンションに基づきます:
SET CLEARUPDATESTATUS AFTER;
FIX(“New York”)
CALC DIM(Product);
ENDFIX
CALC TWOPASS;
エラー
Essbaseは、次のプロセスを実行します:
-
Essbaseは、New Yorkを表すダーティ・データ・ブロックを計算するためにデータベースを循環します。 計算はProductディメンションに基づきます。 したがって、Essbaseでは、Productディメンションの親メンバーを表すブロック(New York -> Colas、New York -> Root Beer、New York -> Fruit Sodaなど)のみが計算され、Productディメンションの集計と式のみが計算されます。
-
SET CLEARUPDATESTATUS AFTERコマンドが使用されているため、各計算済ブロック内のすべてのデータ値が計算されているわけではありませんが、Essbaseは計算済データ・ブロックをクリーンとしてマークします。
-
Essbaseでは、勘定科目としてタグ付けされたディメンションで2パスとしてタグ付けされたメンバーを再計算する必要があります。ただし、これらのデータ・ブロックの一部は、前のステップで計算からすでにクリーンとしてマークされています。 Essbaseでは、クリーンとマークされたデータ・ブロックは再計算されません。 計算結果が正しくありません。
解決策
2パス計算のインテリジェント計算を無効にすると、正しい結果を計算できます。
例3: SET CLEARUPDATESTATUSおよび2つのCALC DIMコマンド
この計算スクリプトは、ProductディメンションとYearディメンションに基づいてデータベースを計算します。 CALC DIMコマンドが2つ使用されているため、Essbaseはデータベースを介して次の2つの計算パスを実行します:
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);
CALC DIM(Year);
エラー
Essbaseは、次のプロセスを実行します:
-
Essbaseは、使用済データ・ブロックを計算するためにデータベースを循環します。 計算は、「例2: SET CLEARUPDATESTATUSおよびFIX」と同様に、Productディメンションに基づいて行われます。
-
SET CLEARUPDATESTATUS AFTERコマンドが使用されているため、各計算済ブロック内のすべてのデータ値が計算されているわけではありませんが、Essbaseは計算済データ・ブロックをクリーンとしてマークします。
-
Essbaseでデータ・ブロックを再計算する必要があります。 再計算はYearディメンションに基づきます。 ただし、前のステップの計算の結果、一部のデータ・ブロックはすでにクリーンとマークされており、Essbaseでは再計算されません。 計算結果が正しくありません。
解決策
CALC DIMコマンドを使用してProductディメンションとYearディメンションを計算することで、正しい結果を計算できます。 Essbaseは、一方の計算パスの両方のディメンションをデータベースで計算します。
次の計算スクリプトは、正しい結果を計算します:
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product, Year);
ノート:
CALC DIMコマンドで複数のディメンションを計算する場合、Essbaseでは、コマンドで指定した順序ではなく、デフォルトの計算順序でディメンションが計算されます。 「メンバー計算順序」を参照してください。
例4: 2つの計算スクリプト
この例では、New Yorkのデータ値を計算しますが、2つの計算スクリプトを使用して2つのディメンションに基づいて計算します。 最初の計算スクリプトでは、Productディメンションが計算されます:
SET CLEARUPDATESTATUS AFTER;
FIX(“New York”)
CALC DIM(Product);
ENDFIX
Essbaseでは、New Yorkを含むデータ・ブロックが計算されます。 計算はProductディメンションに基づいているため、EssbaseはProductディメンションの親メンバーを含むダーティ・ブロックのみを計算し(たとえば、New York -> Colas、New York -> Root BeerおよびNew York -> Fruit Soda)、Productディメンションの集計および式のみを計算します。
CLEARUPDATESTATUS AFTERコマンドのため、各計算済ブロック内のすべてのデータ値が計算されているわけではありませんが、Essbaseは計算済データ・ブロックをクリーンとしてマークします。
2番目の計算スクリプトは、Yearディメンションを計算します:
SET CLEARUPDATESTATUS AFTER;
FIX(“New York”)
CALC DIM(Year);
ENDFIX
Essbaseでは、New Yorkを表すデータ・ブロックが計算されます。 計算は密ディメンションであるYearディメンションに基づいているため、EssbaseはNew Yorkを含むすべてのデータ・ブロックを計算する必要がありますが、各ブロック内では、EssbaseはYearディメンションの集計と式のみを計算します。
エラー
最初の計算の結果、New Yorkの一部のデータ・ブロックはすでにクリーンとしてマークされています。 データ・ブロックはクリーンとマークされているため、Essbaseでは、これらのデータ・ブロックは別の計算スクリプトで再計算されません。 計算結果が正しくありません。
解決策
計算済データ・ブロックをクリーンとしてマークしないようにEssbaseに指示することで、正しい結果を計算できます。 次の計算スクリプトは、正しい結果を計算します:
SET CLEARUPDATESTATUS OFF;
FIX(“New York”)
CALC DIM(Product);
ENDFIX
SET CLEARUPDATESTATUS AFTER;
FIX(“New York”)
CALC DIM(Year);
ENDFIX
SET CLEARUPDATESTATUS OFFコマンドを使用すると、Essbaseはダーティ・データ・ブロックを計算しますが、SET CLEARUPDATESTATUS AFTERコマンドとは異なり、クリーンとしてマークしません。
この解決策では、データ・ブロックがデータベースの以前の部分計算からクリーンとしてマークされていないことを前提としています。
インテリジェント計算を無効にすることで、ステータスに関係なくすべてのデータ・ブロックが計算されるようにできます。 次の計算スクリプトは、クリーンまたはダーティ・ステータスに関係なく、指定されたすべてのデータ・ブロックを計算します:
SET UPDATECALC OFF;
FIX(“New York”)
CALC DIM(Year, Product);
ENDFIX
SET CLEARUPDATESTATUS AFTERコマンドを使用していないため、Essbaseは計算済データ・ブロックをクリーンとしてマークしません。