高機能計算についての理解

この項の内容:

高機能計算の概要

高機能計算の使用

SET CLEARUPDATESTATUSコマンドの使用

データ・ブロックの計算

高機能計算による影響の理解

高機能計算の概要

デフォルトでは、Essbaseでは、データベースのフル計算を実行するときに、計算するデータ・ブロックを追跡します。後続の計算でデータのサブセットをロードした場合、Essbaseでは、計算されていないデータ・ブロック、および新しいデータが原因で再計算が必要な計算済ブロックのみを計算します。このプロセスを高機能計算と呼びます。

デフォルトでは、高機能計算はオンです。このデフォルト設定はessbase.cfgで変更できます。『Oracle Essbaseテクニカル・リファレンス』を参照してください。

計算スクリプトで高機能計算をオンまたはオフにすることもできます。高機能計算のオンとオフを参照してください。

その他の計算の最適化方法は、次を参照してください:

高機能計算の利点

高機能計算は、次のタイプの計算において計算パフォーマンスを大きく向上させるよう設計されています:

  • データベースのフル計算(CALC ALL)、ただし、例外があります。

    高機能計算の制限を参照してください。

  • 1つのCALC DIMステートメントですべてのメンバーを計算する計算スクリプト。

  • フル計算に高機能計算を使用できないデータベースの計算においても、計算の一部に高機能計算を使用できることがあります。

    たとえば、デフォルトの集計を実行してからデータを割り当てることによってデータベースを計算する場合の計算パフォーマンスを大きく向上させるには、デフォルトの集計では高機能計算を使用可能にし、割当てでは高機能計算を使用不可にします。

    高機能計算がオンになっている(デフォルト)場合、計算スクリプトを作成し、次の手順で部分的な高機能計算を行います:

    • 高機能計算を使用可能にします(使用不可になっている場合)

    • CALC ALLを使用してデータベースを計算します

    • SET UPDATECALCコマンドを使用して高機能計算を使用不可にします

    • データを割り当てます

    • 必要に応じて、高機能計算を再度使用可能にします

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

高機能計算を実行するために、Essbaseではデータベースのデータ・ブロックのステータスを確認します。データ・ブロックには、クリーンとダーティという算出ステータスがあります。Essbaseでは、計算後はデータ・ブロックがクリーンとしてマークされます。

高機能計算が使用可能な場合、Essbaseではダーティ・ブロックとそれに依存する親のみが計算されます。高機能計算が使用不可の場合、データ・ブロックがクリーンとダーティのどちらとしてマークされているかに関係なく、Essbaseではすべてのデータ・ブロックが計算されます。

ブロックをクリーンとしてマーク

Essbaseでは、次のタイプの計算時にデータ・ブロックがクリーンとしてマークされます:

  • データベースのフル計算(CALC ALL、デフォルトの計算)。

  • 1つのCALC DIMステートメントですべての次元を計算する計算スクリプト。

    たとえば、次の計算スクリプトでは、Sample.Basicデータベースのすべてのメンバーが計算されます:

                CALC DIM(Measures, Product, Market, Year, Scenario);
             

    これを、2つのCALC DIMステートメントですべてのメンバーを計算する計算スクリプトと比較してみます:

                CALC DIM(Measures, Product);
    CALC DIM(Market, Year, Scenario);
             

2つのCALC DIMステートメントを使用すると、Essbaseでは、データベースで少なくとも2つの計算パスが実行されます。この計算で、デフォルトではデータ・ブロックはEssbaseによってクリーンとしてマークされません。高機能計算は正確なクリーン・ステータスとダーティ・ステータスに依存するので、これらのマーカーを慎重に管理する必要があります。クリーン・ステータスとダーティ・ステータスの管理を参照してください。

Essbaseでは、前述の状況でのみ、計算済のデータ・ブロックがクリーンとしてマークされます。ただし、計算スクリプトでSET CLEARUPDATESTATUSコマンドを使用している場合を除きます。SET CLEARUPDATESTATUSコマンドの使用を参照してください。

ブロックをダーティとしてマーク

Essbaseでは、次の場合にデータ・ブロックがダーティとしてマークされます:

  • データベースの一部のデータ・ブロックを計算した場合。ただし、SET CLEARUPDATESTATUS AFTERが、その計算スクリプト内の部分的計算ステートメントに含まれていない場合のみ

  • データをデータ・ブロックにロードした場合

  • 密次元へのメンバーの追加などにより、データベースを再構築した場合

  • DATACOPYなどを使用して、データをデータ・ブロックにコピーした場合

クリーン・ステータスとダーティ・ステータスの管理

データベースのサブセットを計算するとき、またはデータベースで複数の計算パスを実行するときに高機能計算を使用する場合は、Essbaseでどのようにデータ・ブロックがクリーンとしてマークされるかを十分に考慮する必要があります。高機能計算を使用するときには、データ・ブロックのクリーン・ステータスとダーティ・ステータスを正確に維持して、Essbaseによってデータベースをできるだけ効率的に再計算できるようにする必要があります。

たとえば、データベースのサブセットを計算した場合、新しく計算されたデータ・ブロックは、デフォルトではクリーンとしてマークされません。計算スクリプトでSET CLEARUPDATESTATUS AFTERコマンドを使用すると、この新しく計算されたブロックが確実にクリーンとしてマークされるようにできます。計算スクリプトを作成する前に、SET CLEARUPDATESTATUSコマンドの使用および『Oracle Essbaseテクニカル・リファレンス』を参照してください。

高機能計算の制限

高機能計算を使用するときは、次の制限と状況を考慮してください:

  • 高機能計算は、データ・ブロック・レベルで機能し、セル・レベルでは機能しません。たとえば、データ値をデータ・ブロックの1つのセルにロードした場合、データ・ブロック全体がダーティとしてマークされます。

  • データベースで2パスが必要なCALC ALLは、正しく計算されない可能性があります。最初のパスでクリーンとしてマークされたブロックが次のパスでスキップされるためです。この問題を回避するには、高機能計算をオフにするか、データベースに対してCALC ALLを実行するのではなく、各次元に対してCALC DIMを実行します。CALC ALLでは、次の状況で、データベースでの2パスが必要になります:

    • 会計次元が疎の場合

    • 会計次元が密、時間次元が疎、およびアウトラインに少なくとももう1つの密次元がある場合

  • データベース・アウトラインの式またはデータベース・アウトラインの勘定科目プロパティを変更しても、Essbaseではデータベースが再構築されません。このため、Essbaseでは、影響を受けたブロックがダーティとしてマークされません。該当するデータ・ブロックを再計算する必要があります。式または勘定科目プロパティの変更を参照してください。

  • Essbaseでは可能なかぎり、勘定科目タグが付けられた次元にある2パス・タグが付けられた式が、データベースの主計算の一部として計算されます。ただし、場合によっては、一部の式は計算スクリプトを使用して2回計算する必要があります。計算スクリプトを使用するときには、高機能計算を使用不可にしてから式を再計算します。

  • 計算スクリプトでSET CREATENONMISSINGBLKがオンに設定されている場合、高機能計算はオフになり、影響を受けるブロックは、クリーンまたはダーティのいずれにマークされているかにかかわらず計算されます。

高機能計算の使用

この項では、高機能計算のオンとオフについて、および様々なタイプの計算での高機能計算の使用について説明します。

高機能計算のオンとオフ

デフォルトでは、高機能計算はオンです。デフォルトを変更するには、essbase.cfgファイルのUPDATECALC設定を使用します。

計算スクリプトの実行中に高機能計算をオンまたはオフにするには、計算スクリプトでSET UPDATECALCコマンドを使用します。

『Oracle Essbaseテクニカル・リファレンス』を参照してください。

デフォルトのフル計算に対する高機能計算の使用

データベースのフル計算(CALC ALL)を実行するときに高機能計算を使用すると、パフォーマンスで大きなメリットが得られます。フル計算を実行する場合は、高機能計算をオン(デフォルト)のままにして、パフォーマンス上のメリットを生かしてください。

  現在の計算の設定を確認するには、『Oracle Essbase Administration Servicesオンライン・ヘルプ』の「デフォルト計算の設定」を参照してください。

注意

高機能計算を使用するときには、高機能計算の制限に記載されている情報を確認してください。

初回の計算

データベースのフル計算を初めて実行するときには、Essbaseですべてのブロックが計算されます。パフォーマンスは、高機能計算をオンにした場合もオフにした場合も変わりません。

再計算

高機能計算をオンにして、データベースの完全再計算を実行すると、Essbaseでは、各ブロックがクリーンとダーティのどちらにマークされているかが確認されます。高機能計算とデータ・ブロックのステータスを参照してください。

データ・ブロックの確認には、5%から10%のパフォーマンス・オーバーヘッドがかかります。これは、高機能計算を使用可能にしたときに得られるパフォーマンスに比べるとわずかな影響です。

ただし、全体の約80%を超える値が変更されたデータベースを再計算する場合は、高機能計算のオーバーヘッドが、改善されるパフォーマンスを上回るおそれがあります。このような場合は、高機能計算を使用不可にします。

部分的な計算を行う計算スクリプトでの高機能計算の使用

Essbaseでは、フル計算(CALC ALL)でデータ・ブロックが計算されたとき、または1つのCALC DIMコマンドですべての次元が計算されたときに、データ・ブロックがクリーンとしてマークされます。ブロックをクリーンとしてマークを参照してください。

その他の計算では、Essbaseでは、計算済のデータ・ブロックはクリーンとしてマークされません。ただし、計算スクリプトでSET CLEARUPDATESTATUSコマンドを使用する場合を除きます。たとえば、データベースのサブセットを計算する場合、または2つの計算パスでデータベースを計算する場合、Essbaseでは、SET CLEARUPDATESTATUSコマンドを使用しないかぎり、計算済のブロックはクリーンとしてマークされません。

次の計算スクリプトを使用しても、Essbaseでは計算済のデータ・ブロックはクリーンとしてマークされません:

         FIX(“New York”)
   CALC DIM(Product, Measures);
ENDFIX
      

         CALC DIM(Measures, Product);
CALC DIM(Market, Year, Scenario);
      

不要な再計算を避けるために、SET CLEARUPDATESTATUSを使用してください。

SET CLEARUPDATESTATUSコマンドの使用

データベースのサブセットを計算する場合や、2つの計算パスでデータベースを計算する場合などに、Essbaseで、計算済のブロックがクリーンとしてマークされないことがあります。高機能計算で使用するためにデータ・ブロックを手動でクリーンとしてマークするには、計算スクリプトでSET CLEARUPDATESTATUSコマンドを使用します。この項および高機能計算とデータ・ブロックのステータスを参照してください。

SET CLEARUPDATESTATUSの理解

SET CLEARUPDATESTATUSコマンドには、AFTER、ONLYおよびOFFの3つのパラメータがあります。

  • SET CLEARUPDATESTATUS AFTER;

    Essbaseによって、データベースのサブセットを計算した場合でも、計算済のデータ・ブロックはクリーンとしてマークされます。

  • SET CLEARUPDATESTATUS ONLY;

    Essbaseによって、指定したデータ・ブロックはクリーンとしてマークされますが、そのデータ・ブロックは計算されません。このパラメータでは、AFTERと同じ結果が得られますが、計算は実行されません。

  • SET CLEARUPDATESTATUS OFF;

    Essbaseによって、データ・ブロックは計算されますが、計算済のデータ・ブロックはクリーンとしてマークされません。データベースのフル計算(CALC ALL)を実行した場合でも、クリーンとしてマークされません。計算済データ・ブロックの既存のクリーン・ステータスまたはダーティ・ステータスは変化しません。

SET CLEARUPDATESTATUS設定の選択

SET CLEARUPDATESTATUSコマンドを使用して計算済のデータ・ブロックをクリーンとマークする際には、パラメータ(AFTER、ONLY、OFF)を選択する前に次の推奨事項を考慮してください:

  • クリーンとしてマークされるのは、計算済のデータ・ブロックのみです。

  • 同時計算でSET CLEARUPDATESTATUS AFTERコマンドを使用しないでください。ただし、同時計算で同じデータ・ブロックを計算する必要がないことが確実な場合を除きます。高機能計算が使用可能な場合に、同時計算で同じデータ・ブロックを計算しようとすると、Essbaseでは、データ・ブロックが他の同時計算によってすでにクリーンとしてマークされている場合に、そのデータ・ブロックを再計算しません。同時計算の処理を参照してください。

  • Essbaseでは、データベースの最初の計算パスでデータ・ブロックを計算したとき、そのデータ・ブロックがクリーンとしてマークされます。高機能計算を使用可能にして、次のパスで同じデータ・ブロックを計算しようとすると、そのデータ・ブロックはすでにクリーンとしてマークされているので、Essbaseでは再計算されません。

SET CLEARUPDATESTATUSの使用例の確認

Sample.Basicデータベースを使用した、次のようなシナリオを考えてみます:

  • 疎次元は市場と製品です。

  • New Yorkは、市場疎次元のメンバーです。

  • 高機能計算はオンになっています(デフォルト)。

次の例は、SET CLEARUPDATESTATUSの異なる使用方法を示しています:

例1: CLEARUPDATESTATUS AFTER

      SET CLEARUPDATESTATUS AFTER;
FIX(“New York”)
   CALC DIM(Product);
ENDFIX
   

この例では、Essbaseで、New Yorkのダーティな親データ・ブロック(たとえば、New York -> Colas。Colasは製品次元の親メンバー)が検索されます。このダーティ・ブロックが計算され、クリーンとしてマークされます。Essbaseでは、レベル0のデータ・ブロックは計算されないので、このデータ・ブロックはクリーンとしてマークされません。レベル0のブロックの詳細は、計算順序の定義。を参照してください。

例2: CLEARUPDATESTATUS ONLY

      SET CLEARUPDATESTATUS ONLY;
FIX(“New York”)
   CALC DIM(Product);
ENDFIX
   

Essbaseで、New Yorkのダーティな親データ・ブロック(たとえば、New York -> Colas。Colasは製品次元の親メンバー)が検索されます。ダーティな親データ・ブロックはEssbaseでクリーンとしてマークされますが、計算されません。Essbaseでは、レベル0のデータ・ブロックは計算されないので、そのデータ・ブロックはクリーンとしてマークされません。たとえば、New York -> 100-10 (レベル0のブロック)がダーティの場合、このブロックはダーティのままです。

例3: CLEARUPDATESTATUS OFF

      SET CLEARUPDATESTATUS OFF;
CALC ALL;
CALC TWOPASS;
SET CLEARUPDATESTATUS ONLY;
CALC ALL;
   

この例では、Essbaseで最初にデータベースのすべてのダーティ・データ・ブロックが計算されます。計算済のデータ・ブロックはダーティのままです。Essbaseでこのデータ・ブロックがクリーンとしてマークされることはありません。

Essbaseでは次に、勘定科目タグが付けられた次元内で、2パス・タグが付けられたメンバーが計算されます。データ・ブロックはダーティとしてマークされたままなので、Essbaseでそのデータ・ブロックが再計算されます。ここでも計算済データ・ブロックはクリーンとしてマークされません。

次に、Essbaseで、データベースのすべてのダーティ・ブロックが検索され、それらのデータ・ブロックがクリーンとしてマークされます。CALC ALLコマンドが使用されていますが、ブロックは計算されません。

データ・ブロックの計算

Essbaseでは、疎次元メンバーの一意の組合せごとに、データ・ブロックが作成されます。ただし、その組合せに少なくとも1つのデータ値が存在する場合に限ります。各データ・ブロックは、疎次元メンバーの一意の組合せに対する、すべての密次元のメンバー値を表します。

たとえば、Sample.Basicデータベースでは、市場次元と製品次元が疎です。したがって、データ・ブロックNew York -> Colasは、疎の組合せNew York -> Colasに対する、年、メジャーおよびシナリオ次元のすべてのメンバー値を表します。

以降の項では、上位レベル、レベル0および入力のデータ・ブロックという概念を読者が理解していることを前提としています。データ・ブロック内のデータ・ストレージを参照してください。

密次元の計算

密次元の計算でFIXコマンドを使用していない場合、Essbaseでは、データベース内のすべてのデータ・ブロックで少なくとも一部のデータ値が計算されます。

たとえば、次の計算スクリプトはSample.Basicデータベースに基づいています:

      SET CLEARUPDATESTATUS AFTER;
CALC DIM(Year);
   

このスクリプトでは、密次元である年次元を計算します。年は密なので、データベースのすべてのデータ・ブロックに年次元のメンバーが含まれています。このため、Essbaseでは、すべてのデータ・ブロックのデータ値が計算されます。スクリプトでSET CLEARUPDATESTATUS AFTERコマンドが使用されているので、Essbaseではすべてのデータ・ブロックがクリーンとしてマークされます。

疎次元の計算

疎次元を計算するときに、Essbaseで、データベース内のすべてのデータ・ブロックを計算する必要があるとは限らない場合があります。

たとえば、次の計算スクリプトはSample.Basicデータベースに基づいています:

      SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);
   

このスクリプトでは、疎次元である製品次元を計算します。製品は疎なので、製品次元のメンバーごとにデータ・ブロックが存在します。たとえば、New York -> Colasのデータ・ブロックや、New York -> 100-10のデータ・ブロックが存在します。

レベル0の影響

データ・ブロックNew York -> 100-10はレベル0のブロックです。このデータ・ブロックは、どちらの疎次元(市場または製品)の親メンバーも表していません。New York -> 100-10のデータ値は入力値です。このデータ値はデータベースにロードされます。したがって、Essbaseではこのデータ・ブロックを計算する必要がありません。また、スクリプトでSET CLEARUPDATESTATUS AFTERコマンドが使用されている場合でも、New York -> 100-10のデータ・ブロックはEssbaseによってクリーンとしてマークされません。

注:

Essbaseでは、レベル0のデータ・ブロックは、そのデータ・ブロックに適用される式が対応する疎のレベル0メンバーにある場合に計算されます。

データをデータベースにロードする場合、データをロードするレベル0のデータ・ブロックはダーティとしてマークされます。その後、疎次元のみを計算すると、Essbaseではレベル0のブロックが計算されないので、そのブロックはダーティのままです。したがって、疎次元のみを再計算すると、Essbaseではすべての上位レベルのデータ・ブロックが計算されます。これは、上位レベルのブロックがもともとクリーンの場合でも、その子ブロックがダーティになると上位レベルのブロックはダーティとしてマークされるためです。

上位レベルの影響

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

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

不要な計算

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

同時計算の処理

高機能計算がオンの場合に同時計算で同じデータ・ブロックを計算しようとすると、データ・ブロックはすでにクリーンとしてマークされているので、Essbaseでそのデータ・ブロックが再計算されないことがあります。

Sample.Basicデータベースを使用した次の例では、ActualとBudgetがシナリオ密次元のメンバーです。シナリオは密なので、データベースの各データ・ブロックにActual値とBudget値が含まれます。ユーザー1が次の計算スクリプトを実行した場合、Essbaseで、New Yorkを表すすべてのデータ・ブロックのActual値が計算されます。計算済のデータ・ブロックはEssbaseでクリーンとしてマークされます。ただし、各計算済ブロックのすべてのデータ値が計算されたわけではありません。たとえば、Budget値は計算されていません。

      SET CLEARUPDATESTATUS AFTER;
FIX(“New York”, Actual)
   CALC DIM(Product, Year);
ENDFIX
   

ユーザー2がNew YorkのBudget値を計算するために次の計算スクリプトを実行した場合、指定したデータ・ブロックはすでにクリーンとしてマークされているので、Essbaseではそのデータ・ブロックは再計算されません。このため、正しいBudgetの計算結果が得られません。

      SET CLEARUPDATESTATUS AFTER;
FIX(“New York”, Budget)
   CALC DIM(Product, Year);
ENDFIX
   

この問題を解決する方法の1つは、シナリオ次元を疎にすることです。そうすることで、Actual値とBudget値は、New York -> Colas -> ActualとNew York -> Colas -> Budgetのように異なるデータ・ブロックに配置されます。この場合、2番目の計算スクリプトによって、Budgetデータ・ブロックは正しく計算されます。

同時計算の実行には、データ・キャッシュの増加が必要になる場合があります。データ・キャッシュ・サイズの設定を参照してください。

複数パス計算の理解

Essbaseでは、可能なかぎり1つの計算パスでデータベースが計算されます。計算パスを参照してください。

計算スクリプトを使用してデータベースを計算するときに、Essbaseで実行する計算パスの数は、計算スクリプトによって決まります。高機能計算とデータ・ブロックのステータスおよび式と計算のグループ化を参照してください。

たとえば、Essbaseで、データベースの最初の計算パスでデータ・ブロックが計算され、クリーンとしてマークされるとします。高機能計算を使用可能にして、次のパスで同じデータ・ブロックを計算しようとすると、そのデータ・ブロックはすでにクリーンとしてマークされているので、Essbaseでは再計算されません。

複数パス計算の例と解決策の確認

以降の例では、正しくない計算結果が生成される状況、および正しい結果を得るための解決策について説明します。これらの例では、Sample.Basicデータベースを使用しており、高機能計算がオンであると想定しています。

例1: 高機能計算と2パス

この計算スクリプトでは、デフォルト計算が実行された後、2パス計算が実行されます:

      CALC ALL;
CALC TWOPASS;
   

エラー

Essbaseで、データベースのダーティ・データ・ブロックが計算され、すべてのデータ・ブロックがクリーンとしてマークされます。Essbaseでは次に、勘定科目タグが付けられた次元に属する、2パス・タグが付けられたメンバーを再計算する必要があります。ただし、Essbaseでは、指定したデータ・ブロックはすでにクリーンとしてマークされているので、そのデータ・ブロックが再計算されません。このため、正しい計算結果が得られません。

解決策

正しい結果を得るには、2パス計算に対する高機能計算を使用不可にします。

例2: SET CLEARUPDATESTATUSとFIX

この計算スクリプトでは、New Yorkのデータ値を計算します。計算は、製品次元に基づいて行われます:

      SET CLEARUPDATESTATUS AFTER;
FIX(“New York”)
   CALC DIM(Product);
ENDFIX
CALC TWOPASS;
   

エラー

  Essbaseでは、次のプロセスを実行します:

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

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

  3. Essbaseで、勘定科目タグが付けられた次元に属する、2パス・タグが付けられたメンバーを再計算する必要があります。ただし、一部のデータ・ブロックは手順2の計算ですでにクリーンとしてマークされています。Essbaseでは、クリーンとしてマークされているデータ・ブロックは再計算されません。このため、正しい計算結果が得られません。

解決策

正しい結果を得るには、2パス計算に対する高機能計算を使用不可にします。

例3: SET CLEARUPDATESTATUSと2つのCALC DIMコマンド

この計算スクリプトでは、製品次元と年次元に基づいてデータベースを計算します。2つのCALC DIMコマンドが使用されているので、Essbaseでは、データベースで2つの計算パスを実行します:

      SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);
CALC DIM(Year);
   

エラー

  Essbaseでは、次のプロセスを実行します:

  1. Essbaseで、データベースを循環して、ダーティ・データ・ブロックを計算します。この計算は、例2: SET CLEARUPDATESTATUSとFIXと同様、製品次元に基づいて行われます。

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

  3. Essbaseでは、データ・ブロックを再計算する必要があります。再計算は、年次元に基づいて行われます。ただし、手順2の計算の結果、一部のデータ・ブロックはすでにクリーンとしてマークされているので、Essbaseでそのデータ・ブロックは再計算されません。このため、正しい計算結果が得られません。

解決策

正しい計算結果を得るには、1つのCALC DIMコマンドを使用して、製品次元と年次元を計算します。Essbaseでは、データベースで1つの計算パスを実行して両方の次元を計算します。次の計算スクリプトでは、正しい結果が得られます:

      SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product, Year);
   

注:

複数の次元を1つのCALC DIMコマンドで計算する場合、Essbaseでは、コマンドに指定した順序ではなく、デフォルトの計算順序で次元が計算されます。メンバーの計算順序を参照してください。

例4: 2つの計算スクリプト

この例では、New Yorkのデータ値を計算しますが、2つの計算スクリプトを使用し、2つの次元に基づいて計算します。最初の計算スクリプトでは、次のように製品次元を計算します:

      SET CLEARUPDATESTATUS AFTER;
FIX(“New York”)
   CALC DIM(Product);
ENDFIX
   

Essbaseで、New Yorkを含んでいるデータ・ブロックを計算します。計算は製品次元に基づくので、Essbaseでは、製品次元に親メンバーを含んでいるダーティ・ブロックのみ(New York -> Colas、New York -> Root Beer、New York -> Fruit Sodaなど)が計算され、製品次元の集約と式のみが計算されます。

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

2番目の計算スクリプトでは、次のように年次元を計算します:

      SET CLEARUPDATESTATUS AFTER;
FIX(“New York”)
   CALC DIM(Year);
ENDFIX
   

Essbaseで、New Yorkを表すデータ・ブロックを計算します。計算は密次元である年次元に基づくので、EssbaseではNew Yorkを含んでいるすべてのデータ・ブロックを計算する必要があります。ただし、各ブロック内では、年次元の集約と式のみがEssbaseで計算されます。

エラー

最初の計算の結果、New Yorkの一部のデータ・ブロックはクリーンとしてマークされます。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でクリーンとしてマークされません。

高機能計算による影響の理解

高機能計算を使用すると、データベースの管理方法に影響を与えることがあります。この項では、アクションごとの影響について説明します。

式または勘定科目プロパティの変更

データベース・アウトラインの式を変更しても、データベース・アウトラインの勘定科目プロパティを変更しても、Essbaseによってデータベースは再構築されないので、この変更の影響を受けるデータ・ブロックはダーティとしてマークされません。たとえば、勘定科目タグが付けられた次元でタイム・バランス・タグを変更した場合、Essbaseによってデータベースは再構築されず、影響を受けるブロックはダーティとしてマークされません。

その後、高機能計算をオンにした状態でデフォルトの計算を実行しても、変更は計算されません。適切なデータ・ブロックを再計算するには、計算スクリプトを使用して次のいずれかのタスクを実行します:

  • 高機能計算を使用不可にして、変更されたメンバー式を計算します。

  • 高機能計算を使用不可にし、FIXコマンドを使用してデータベースの該当するサブセットを計算します。

  • 高機能計算を使用不可にして、データベースに対してデフォルトのCALC ALLを実行します。

関係関数と財務関数の使用

疎次元または密次元の式で関係関数(@PRIOR、@NEXTなど)または財務関数(@ACCUM、@NPV、@INTERESTなど)を使用する場合、Essbaseでは、その式を含んでいるデータ・ブロックが常に再計算されます。

『Oracle Essbaseテクニカル・リファレンス』を参照してください。

データベースの再構築

メンバーを密次元に追加する場合など、データベースを再構築するときは、すべてのデータ・ブロックの再計算が必要になる可能性があります。このため、Essbaseでは、すべてのデータ・ブロックがダーティとしてマークされます。再構築されたデータベースを計算すると、すべてのブロックが計算されます。

注:

データベース・アウトラインの式またはデータベース・アウトラインの勘定科目プロパティを変更しても、Essbaseによってデータベースは再構築されません。該当するデータ・ブロックを再計算する必要があります。式または勘定科目プロパティの変更を参照してください。

データのコピーと消去

DATACOPYコマンドを使用して値をデータ・ブロックにコピーすると、コピー先のデータ・ブロックはダーティとしてマークされます。Essbaseでは、データベースの再計算時にこのブロックが計算されます。

CLEARDATAコマンドとCLEARBLOCKコマンドを使用してデータ値を消去すると、Essbaseでは、ブロックがどのようにマークされていたかに関係なく、すべてのブロックが消去されます。

通貨換算

CCONVコマンドを使用して通貨を換算すると、換算後のデータ・ブロックはダーティとしてマークされます。Essbaseでは、データベースの再計算時に、すべての換算済のブロックが計算されます。