データ・ブロックの高機能計算

密計算と疎計算、同時計算および複数のパス計算が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で次のプロセスが実行されます。

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