データ・ブロックの計算
Essbaseでは、疎ディメンション・メンバーの一意の組合せごとに、データ・ブロックが作成されます。ただし、その組合せに少なくとも1つのデータ値が存在する場合に限ります。各データ・ブロックは、疎ディメンション・メンバーの一意の組合せに対する、すべての密ディメンション・のメンバー値を表します。
たとえば、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ディメンションのメンバーごとにデータ・ブロックが存在します。たとえば、New York -> Colasには1つのデータ・ブロックが存在し、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のデータ・ブロックはクリーンとしてマークされません。
ノート:
対応する疎のレベル0メンバーがレベル0のデータ・ブロックに適用される式を持つ場合、Essbaseではそのデータ・ブロックが計算されます。
データをデータベースにロードする場合、データをロードするレベル0のデータ・ブロックはダーティとしてマークされます。その後、疎ディメンションのみを計算すると、Essbaseではレベル0のブロックが計算されないため、そのブロックはダーティのままになります。疎ディメンションのみを再計算すると、Essbaseですべての上位レベルのデータ・ブロックが計算されます。これは、上位レベルのブロックがもともとクリーンの場合でも、その子ブロックがダーティになると上位レベルのブロックはダーティとしてマークされるためです。
同時計算の処理
高機能計算がオンの場合に同時計算で同じデータ・ブロックを計算しようとすると、データ・ブロックがすでにクリーンとしてマークされているために、Essbaseによってそのデータ・ブロックが再計算されないことがあります。
Sample.Basicデータベースに基づいた次の例では、実績と予算が密のScenarioディメンションのメンバーです。Scenarioは密であるため、データベースの各データ・ブロックに実績値と予算値が含まれます。ユーザー1が次の計算スクリプトを実行すると、Essbaseでニューヨークを表すすべてのデータ・ブロックの実績値が計算されます。計算済データ・ブロックはEssbaseによってクリーンとしてマークされますが、各計算済ブロックのすべてのデータ値が計算されたわけではありません。たとえば、予算値は計算されていません。
SET CLEARUPDATESTATUS AFTER;
FIX(“New York”, Actual)
CALC DIM(Product, Year);
ENDFIX
ユーザー2が次の計算スクリプトを実行してニューヨークの予算値を計算した場合、指定したデータ・ブロックはすでにクリーンとしてマークされているため、そのデータ・ブロックはEssbaseによって再計算されません。このため、予算の正しい計算結果が得られません。
SET CLEARUPDATESTATUS AFTER;
FIX(“New York”, Budget)
CALC DIM(Product, Year);
ENDFIX
この問題を解決する方法の1つは、Scenarioディメンションを疎にすることです。そうすることで、実績値と予算値は、New York -> Colas -> ActualとNew York -> Colas -> Budgetのように異なるデータ・ブロックに配置されます。この場合、2番目の計算スクリプトによって、予算データ・ブロックは正しく計算されます。
同時計算を実行するには、データ・キャッシュの増加が必要になる場合があります。
複数パス計算の理解
Essbaseでは、可能なかぎり1つの計算パスでデータベースが計算されます。計算パスを参照してください。
計算スクリプトを使用してデータベースを計算するときに、Essbaseで実行する計算パスの数は、計算スクリプトによって決まります。「高機能計算とデータ・ブロックのステータス」および「スクリプト内の式とディメンションのグループ化」を参照してください。
たとえば、Essbaseによって、データベースの最初の計算パスでデータ・ブロックが計算され、クリーンとしてマークされるとします。高機能計算を有効にして、次のパスで同じデータ・ブロックを計算しようとすると、そのデータ・ブロックはすでにクリーンとしてマークされているため、Essbaseによって再計算されません。
複数パス計算の例と解決策の確認
以降の例では、正しくない計算結果が生成される状況と、正しい結果を得るための解決策について説明します。これらの例では、Sample.Basicデータベースを使用しており、高機能計算がオンになっているものとします。
例1: 高機能計算と2パス
この計算スクリプトでは、デフォルト計算が実行された後に2パス計算が実行されます。
CALC ALL;
CALC TWOPASS;
エラー
Essbaseで、データベースのダーティ・データ・ブロックが計算され、すべてのデータ・ブロックがクリーンとしてマークされます。Essbaseは次に、勘定科目タグが付けられたディメンションに属する、2パス・タグが付けられたメンバーを再計算する必要があります。ただし、Essbaseでは、指定したデータ・ブロックはすでにクリーンとしてマークされているため、そのデータ・ブロックは再計算されません。このため、正しい計算結果が得られません。
解決策
正しい結果を得るには、2パス計算に対する高機能計算を無効にします。
例2: SET CLEARUPDATESTATUSとFIX
この計算スクリプトでは、ニューヨークのデータ値を計算します。計算は、Productディメンションに基づいて実行されます。
SET CLEARUPDATESTATUS AFTER;
FIX(“New York”)
CALC DIM(Product);
ENDFIX
CALC TWOPASS;
エラー
Essbaseで次のプロセスが実行されます。
-
Essbaseはデータベースを一巡してニューヨークを表すダーティ・データ・ブロックを計算します。計算は、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ディメンションのデータベース計算に基づいています。2つのCALC DIMコマンドが使用されているため、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でそのデータ・ブロックは再計算されません。このため、正しい計算結果が得られません。
解決策
正しい計算結果を得るには、1つのCALC DIMコマンドを使用して、ProductディメンションとYearディメンションを計算します。Essbaseでは、データベースの1つの計算パスで両方のディメンションが計算されます。
次の計算スクリプトでは、正しい結果が得られます。
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product, Year);
ノート:
複数のディメンションを1つのCALC DIMコマンドで計算する場合、Essbaseでは、コマンドにリストした順序ではなく、デフォルトの計算順序でディメンションが計算されます。メンバーの計算順序を参照してください。
例4: 2つの計算スクリプト
この例ではニューヨークのデータ値を計算しますが、2つの計算スクリプトを使用し、2つのディメンションに基づいて計算します。最初の計算スクリプトでは、Productディメンションが計算されます。
SET CLEARUPDATESTATUS AFTER;
FIX(“New York”)
CALC DIM(Product);
ENDFIX
Essbaseで、ニューヨークを含むデータ・ブロックが計算されます。計算は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で、ニューヨークを表すデータ・ブロックが計算されます。計算は密ディメンションであるYearディメンションに基づいているため、Essbaseではニューヨークを含むすべてのデータ・ブロックが計算される必要があります。ただし、各ブロック内では、Yearディメンションの集約と式のみがEssbaseによって計算されます。
エラー
最初の計算の結果、ニューヨークの一部のデータ・ブロックはクリーンとしてマークされます。Essbaseで、これらのデータ・ブロックはクリーンとしてマークされているため、2番目の計算スクリプトでは再計算されません。このため、正しい計算結果が得られません。
解決策
正しい結果を得るには、計算済データ・ブロックがEssbaseによってクリーンとしてマークされないようにします。次の計算スクリプトでは、正しい結果が得られます。
SET CLEARUPDATESTATUS OFF;
FIX(“New York”)
CALC DIM(Product);
ENDFIX
SET CLEARUPDATESTATUS AFTER;
FIX(“New York”)
CALC DIM(Year);
ENDFIX
SET CLEARUPDATESTATUS OFFコマンドを使用すると、SET CLEARUPDATESTATUS AFTERコマンドの場合とは異なり、Essbaseでダーティ・データ・ブロックが計算されますが、そのデータ・ブロックはクリーンとしてマークされません。
この解決策では、前回のデータベースの部分的な計算で、データ・ブロックがクリーンとしてマークされていないことを前提としています。
高機能計算を無効にすると、データ・ブロックのステータスに関係なく、すべてのデータ・ブロックを確実に計算できます。次の計算スクリプトでは、ステータスがクリーンかダーティかにかかわらず、指定したすべてのデータ・ブロックが計算されます。
SET UPDATECALC OFF;
FIX(“New York”)
CALC DIM(Year, Product);
ENDFIX
SET CLEARUPDATESTATUS AFTERコマンドを使用していないため、計算済のデータ・ブロックはEssbaseによってクリーンとしてマークされません。