データ・ブロックの計算

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ですべての上位レベルのデータ・ブロックが計算されます。これは、上位レベルのブロックがもともとクリーンの場合でも、その子ブロックがダーティになると上位レベルのブロックはダーティとしてマークされるためです。

上位レベルの影響

Colasは、Productディメンションの親レベルのメンバーです。EssbaseでColasの値を計算する必要があるため、Essbaseでこのデータ・ブロックが計算されます。スクリプトでSET CLEARUPDATESTATUS AFTERコマンドが使用されているため、Essbaseでデータ・ブロックはクリーンとしてマークされます。

Essbaseで疎ディメンションを計算するときに、ブロックが1つ以上のダーティな子ブロックに依存している場合はその上位レベルのデータ・ブロックが再計算されます。

不要な計算

少なくとも1つの密ディメンションで計算することによって、不要な計算を避けることができます。FIXコマンドを使用せずに密ディメンションを計算すると、レベル0のブロックを含むすべてのデータ・ブロックでデータ値が計算されます。これにより、レベル0のブロックはクリーンとしてマークされます。

同時計算の処理

高機能計算がオンの場合に同時計算で同じデータ・ブロックを計算しようとすると、データ・ブロックがすでにクリーンとしてマークされているために、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で次のプロセスが実行されます。

  1. Essbaseはデータベースを一巡してニューヨークを表すダーティ・データ・ブロックを計算します。計算は、Productディメンションに基づいて実行されます。したがって、EssbaseではProductディメンションで親メンバーを表すブロックのみ(New York -> Colas、New York -> Root Beer、New York -> Fruit Sodaなど)が計算され、次にProductディメンションの集約と式のみが計算されます。

  2. SET CLEARUPDATESTATUS AFTERコマンドが使用されるため、計算済データ・ブロックはEssbaseによってクリーンとしてマークされますが、各計算済ブロックのすべてのデータ値が計算されているわけではありません。

  3. 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で次のプロセスが実行されます。

  1. Essbaseはデータベースを一巡してダーティ・データ・ブロックを計算します。この計算は、例2: SET CLEARUPDATESTATUSとFIXと同様に、Productディメンションに基づいて実行されます。

  2. SET CLEARUPDATESTATUS AFTERコマンドが使用されるため、計算済データ・ブロックはEssbaseによってクリーンとしてマークされますが、各計算済ブロックのすべてのデータ値が計算されているわけではありません。

  3. 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によってクリーンとしてマークされません。