データ・ブロックの高機能計算
Essbase高機能計算で、密および疎の計算、同時計算および複数パス計算がどのように処理されるかを学習します。
Essbaseでは、疎ディメンション・メンバーの一意の組合せごとに、データ・ブロックが作成されます。ただし、その組合せに少なくとも1つのデータ値が存在する場合に限ります。各データ・ブロックは、疎ディメンション・メンバーの一意の組合せに対する、すべての密ディメンション・のメンバー値を表します。
たとえば、Sample Basicデータベースでは、MarketディメンションとProductディメンションが疎です。したがって、データ・ブロックNew York -> Colasは、疎の組合せNew York -> Colasに対する、Year、MeasuresおよびScenarioディメンションのすべてのメンバー値を表します。
次の項では、「データ・ブロック内のデータ・ストレージ」で説明されているように、上位レベル、レベル0および入力データ・ブロックの概念を理解していることを前提としています。
密ディメンションの高機能計算
密ディメンションの計算でFIXコマンドを使用しない場合、Essbaseではデータベース内のすべてのデータ・ブロックで少なくとも一部のデータ値が計算されます。高機能計算ステータスでは、ブロックは密計算でクリーンとしてマークされます。
たとえば、次の計算スクリプトは、密のYearディメンションを計算します。
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Year);
Yearは密であるため、キューブ内のすべてのブロックにYearのメンバーが含まれています。したがって、Essbaseはすべてのブロックを計算します。
次に、スクリプトでSET CLEARUPDATESTATUS AFTERコマンドが使用されているため、Essbaseはキューブ内のすべてのデータ・ブロックをクリーンとしてマークします。
疎ディメンションの高機能計算
疎ディメンションを計算するときに、Essbaseでデータベース内のすべてのデータ・ブロックを計算する必要があるわけではない場合があります。高機能計算のクリーン/ダーティ更新ステータスがレベル0および上位レベル・ブロックのステータスにどのように影響するか、および不要な計算を回避する方法について学習します。
たとえば、次の計算スクリプトはSample Basicデータベースに基づいています:
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);
このスクリプトでは、疎ディメンションのProductディメンションが計算されます。製品は疎であるため、Productディメンションのメンバーごとにデータ・ブロックが存在します。たとえば、New York -> Colasには1つのデータ・ブロックが存在し、New York -> 100-10には別のデータ・ブロックが存在します。
レベル0の影響
レベル0のキューブにデータをロードすると、影響を受けるブロックはダーティとしてマークされます。その後、疎ディメンションのみを計算する場合、レベル0のブロックは計算されず、ダーティのままになります。疎ディメンションのみを再計算する場合、Essbaseは上位レベルのデータ・ブロックを再計算します。
ノート:
対応する疎のレベル0メンバーがレベル0のデータ・ブロックに適用される式を持つ場合、Essbaseではそのデータ・ブロックが計算されます。
データ・ブロックNew York -> 100-10はレベル0のブロックです。このデータ・ブロックは、どちらの疎ディメンション(MarketまたはProduct)の親メンバーも表していません。New York -> 100-10のデータ値は入力値です。このデータ値はデータベースにロードされます。したがって、Essbaseでこのデータ・ブロックを計算する必要はありません。また、スクリプトでSET CLEARUPDATESTATUS AFTERコマンドが使用されている場合でも、EssbaseによってNew York -> 100-10のデータ・ブロックはクリーンとしてマークされません。
上位レベルの影響
Essbaseで疎ディメンションを計算するときに、ブロックが1つ以上のダーティな子ブロックに依存している場合はその上位レベルのデータ・ブロックが再計算されます。
Colasは、Productディメンションの親レベルのメンバーです。EssbaseでColasの値を計算する必要があるため、Essbaseでこのデータ・ブロックが計算されます。スクリプトでSET CLEARUPDATESTATUS AFTERコマンドが使用されているため、Essbaseでデータ・ブロックはクリーンとしてマークされます。
不要な計算
少なくとも1つの密ディメンションで計算することによって、不要な計算を避けることができます。FIXコマンドを使用せずに密ディメンションを計算すると、レベル0のブロックを含むすべてのブロックでデータ値が計算されます。これにより、レベル0のブロックはクリーンとしてマークされます。
高機能計算と同時計算
高機能計算が有効になっている場合、同時計算には注意が必要です。複数の計算で同じブロックを計算しようとすると、Essbaseは、すでにクリーンとしてマークされているため、データ・ブロックを再計算しない場合があります。
Sample Basicデータベースに基づく次の例では、実績と予算が密のScenarioディメンションのメンバーです。Scenarioは密であるため、データベースの各ブロックに実績値と予算値が含まれます。ユーザー1が次の計算スクリプトを実行すると、Essbaseでニューヨークを表すすべてのデータ・ブロックの実績値が計算されます。
SET CLEARUPDATESTATUS AFTER;
FIX("New York", Actual)
CALC DIM(Product, Year);
ENDFIX
計算済データ・ブロックはEssbaseによってクリーンとしてマークされますが、各計算済ブロックのすべての値が計算されたわけではありません。たとえば、予算値は計算されていません。
ユーザー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計算スクリプトは、状況によっては高機能計算の使用と互換性がない場合があります。
Essbaseは、データベースの最初の計算パスでデータ・ブロックを計算するとき、そのデータ・ブロックをクリーンとしてマークします。高機能計算を有効にして、次のパスで同じデータ・ブロックを計算しようとすると、そのデータ・ブロックはすでにクリーンとしてマークされているため、Essbaseによって再計算されません。
Essbaseでは、可能なかぎり1つの計算パスでデータベースが計算されます。
計算スクリプトを使用してデータベースを計算するときに、Essbaseで実行する計算パスの数は、計算スクリプトによって決まります。
たとえば、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と同様に、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によってクリーンとしてマークされません。