Essbase式の最適化
Essbaseブロック・ストレージ式の処理を計算および問合せ用に最適化するには、計算のかわりに集計を使用して式を回避したり、可能な場合はより単純な式を使用したり、複雑な式のパフォーマンスを調整するステップを実行したり、ハイブリッド・モードに切り替えることができます。
キューブ・アウトラインで式を慎重に使用することで、計算パフォーマンスが大幅に向上する場合があります。たとえば、式を計算スクリプトに配置するかわりに、データベース・アウトラインのメンバーに対する式を配置することで、計算パフォーマンスが向上する場合があります。「ブロック・ストレージ・キューブの式の開発」を参照してください。
次の項では、ハイブリッド・モード以外のブロック・ストレージ・キューブでの計算パフォーマンスに影響する式の問題を処理する方法について説明します。
ハイブリッド・モードの最適化については、かわりに「高速分析処理のハイブリッド・モード」を参照してください。
Essbaseメンバー集計
キューブ・アウトラインを使用してEssbaseデータ値をロールアップする方が、式を使用して計算するよりも効率的です。
たとえば、次に示すように、メンバー100-10、100-20および100-30をメンバー100に集計する方が、次の式をメンバー100に適用するよりも効率的です。
100-10 + 100-20 + 100-30
図34-1 集計の例

「メンバー集計の例」を参照してください。
単純なEssbaseメンバー式
Essbase式が単純な場合、複雑な式よりもブロック・ストレージの計算パフォーマンスに影響します。ブロック・サイズもパフォーマンスの要因です。より単純な式は、ディメンション間参照、範囲関数、財務関数または関係関数を使用しない式です。
単純な式を使用し、かつブロック・サイズが通常の大きさである場合は、計算パフォーマンスに大きく影響を及ぼすことなく、疎ディメンションまたは密ディメンションのいずれかのメンバーに対する式を配置できます。ブロック・サイズが大きくなるにつれて、単純な式の計算パフォーマンスへの影響は大きくなります。
簡単な式とは、比率やパーセンテージなどのことで、次の要件を満たすものです。
-
異なるディメンション(疎または密)の値を参照しない。たとえば、単純な式ではProduct -> Janは参照できません。
-
範囲関数を使用しない。たとえば、単純な式では、@AVGRANGE、@MAXRANGE、@MINRANGEまたは@SUMRANGEは使用できません。
-
関係関数または財務関数を使用しない。たとえば、単純な式では、@ANCESTVAL、@NEXT、@PARENTVAL、@SHIFT、@ACCUMおよび@GROWTHは使用できません。
参照
ブロック・サイズと計算パフォーマンスの間の関係の詳細は、「ブロック・サイズとブロック密度」を参照してください。
式が計算パフォーマンスに及ぼす影響の詳細は、「ボトムアップ計算とトップダウン計算」を参照してください。
範囲と財務関数複雑なEssbaseメンバー式
Essbase式が複雑な場合、より単純な式よりもブロック・ストレージの計算パフォーマンスに影響します。複雑な式を最適化するには、密ディメンションで適用し、密度を増やし、FIXを使用してスコープを絞り込みます。
複雑な式を使用する場合、次のガイドラインを適用すればパフォーマンスを改善できます。
-
可能であれば、式を密ディメンションのメンバーに適用します。可能でない場合は、トップダウンの計算をボトムアップに変更できるかどうかを判断します(「大きなアウトライン内の疎ディメンションの式」を参照)。
-
計算スクリプトでFIXコマンドを使用して、必要なデータ・ブロックのみを計算します。
-
データベースの密度(可能なデータ・ブロックに対する既存のデータ・ブロックの比率)を高くします。
複雑な式とは、次のいずれかの要件を満たす式のことです。
-
(疎または密)の異なるディメンション(Product -> Janなど)のメンバーを参照します。
-
1つ以上の範囲関数(@AVGRANGE、@MAXRANGE、@MINRANGE、@SUMRANGEなど)を使用します。
-
関係関数または財務関数(@ANCESTVAL、@NEXT、@PARENTVAL、@SHIFT、@ACCUM、@GROWTHなど)を使用します。
複雑な式は、疎ディメンションのメンバーに適用すると計算オーバーヘッドがより多く発生し、パフォーマンスが低下します。複雑な式が存在することにより、複雑な式を含むメンバーに関連するすべての既存のデータ・ブロックとともに、可能性があるすべてのデータ・ブロックに対してもEssbaseで計算を実行することが必要になるため、この問題が発生します。疎ディメンションのメンバーに関係関数または財務関数が存在すると、Essbaseでは既存のデータ・ブロックに加え、可能性があるすべてのデータ・ブロックで計算を実行する必要が生じ、オーバーヘッドはさらに高くなります。
したがって、関係関数または財務関数を含む複雑な式では、関係関数または財務関数を含まない複雑な式に比べてオーバーヘッドが大幅に増加します。
複雑な式によるオーバーヘッドの例を2つ示します。
-
キューブに既存のデータ・ブロックが90と、潜在的なデータ・ブロックが100ある場合は、複雑な式によるオーバーヘッドは大きくはならず、多くとも10の余分なブロックのみで、値の読取りと、場合によっては値の書込みが行われます。
-
キューブに既存のデータ・ブロックが10と、潜在的なデータ・ブロックが100ある場合は、複雑な式がない場合に比べて、オーバーヘッドは最高10倍になり(アウトラインの構造やその他の要因によって異なります)、最大で90の余分なブロックで読取りと、場合によっては書込みが行われます。
どのような場合でも、可能性があるデータ・ブロック数に対する既存のデータ・ブロック数の比率が低いほど計算パフォーマンスのオーバーヘッドが高くなり、パフォーマンスが低下します。
参照
ブロック・サイズと計算パフォーマンスの間の関係の詳細は、「ブロック・サイズとブロック密度」を参照してください。
式が計算パフォーマンスに及ぼす影響の詳細は、「ボトムアップ計算とトップダウン計算」を参照してください。
範囲と財務関数大きなアウトライン内の疎ディメンションの式
大規模なEssbaseブロック・ストレージ・キューブのアウトラインで疎ディメンションの複雑な式の計算を最適化するには、式のボトムアップ計算を強制できます。
SET FRMLBOTTOMUP計算コマンドを使用して、大規模なデータベース・アウトライン内の疎ディメンションでの式の計算を最適化できます。このコマンドを使用すると、通常はトップダウンで計算される疎メンバー式を、強制的にボトムアップで計算できます。「ボトムアップ計算とトップダウン計算」を参照してください。
トップダウン式を強制的にボトムアップで計算すると、CALC ALLおよびCALC DIMコマンドをより効率的に使用できます。SET FRMLBOTTOMUP計算コマンドおよびCALCOPTFRMLBOTTOMUP構成設定の説明を確認してください。
疎ディメンションのメンバーに割り当てられる定数値
疎ディメンションのメンバーに定数を割り当てると、そのメンバーが含まれている疎ディメンション・メンバーのすべての組合せに対して、Essbaseによってデータ・ブロックが自動的に作成されます。ブロックの作成を制限するには、FIXを使用します。
たとえば、メンバーまたは計算スクリプトの式に次の式が含まれているとします。
California = 120;
この式では、Californiaは疎ディメンションのメンバーで、120は定数値です。Californiaのすべての存在可能なデータ・ブロックがEssbaseで自動的に作成され、すべてのデータ・セルに値120が割り当てられます。何千ものデータ・ブロックが作成される場合があります。パフォーマンスを改善するには、不要な値を生成しない式を作成します。
疎ディメンションの定数を、値が必要な交差にのみ割り当てるには、次の例のようにFIXを使用します。
FIX(Colas,Misc,Actual)
California = 120;
ENDFIX
この例では、Colasは疎ディメンションであるProductのメンバー、Actualは密ディメンションであるScenarioのメンバー、Miscは密ディメンションであるMeasuresのメンバーです。California (Marketディメンション)、Actual (Scenarioディメンション)、Misc (Measuresディメンション)、Colas (Productディメンション)およびYearディメンションのすべてのメンバーのすべての交差には、値120が割り当てられます。これは、スクリプトでYearの特定のメンバーが指定されていないためです。
Sample Basicには2つの疎ディメンションのみが含まれるため、この例の影響を受けるのは1つのブロックのみです。それ以上の疎ディメンションが存在する場合、CaliforniaとColasのすべての疎ディメンションの組合せに対して、Essbaseによりデータ・ブロックが確約され、必要に応じてブロックが作成されます。新しいブロックでは、Essbaseによって、MeasuresとScenarioの値(値120が割り当てられるものを除く)が#MISSINGに設定されます。
疎ディメンションのメンバーに割り当てられる非定数値
疎ディメンションのメンバーに非定数値を割り当てるときに不要なブロックが一時的に作成されないようにするには、Essbase計算スクリプトでSET CREATEBLOCKONEQ OFFコマンドを使用します。
疎ディメンションのメンバーに非定数値を割り当てると、「等式にブロックを作成」の設定に基づいてブロックが作成されます。「等式にブロックを作成」の設定は、データベース・レベルで、データベース・プロパティとして定義されます。「非定数値」を参照してください。
計算スクリプト内で、「等式にブロックを作成」設定を一時的に上書きできます。Westに値がなく、「等式にブロックを作成」を有効にしている場合の、次の計算による影響を検討します。
West = California + 120;
Westのすべての子の対応するブロック値が#MISSINGの場合でも、Westとのすべての疎メンバーの交差に対して不要なブロックが作成されることがあります。大規模なデータベースでは特に、不要なブロックの作成と処理に追加の処理時間が必要になります。
疎ディメンションのメンバーに非定数値を割り当てたときのブロックの作成を制御するには、次のスクリプトに示すように、SET CREATEBLOCKONEQ ON | OFF計算コマンドを使用します。
FIX (Colas);
SET CREATEBLOCKONEQ OFF
West = California + 120;
SET CREATEBLOCKONEQ ON
East = “New York” + 100;
ENDFIX
「等式にブロックを作成」設定はスクリプト開始時には無効になっているため、WestブロックはWestの子の値が存在する場合のみ作成されます。その後、「等式にブロックを作成」設定が有効になるため、Eastのすべてのブロックが作成されます。
ノート:
SET CREATEBLOCKONEQを使用することで影響を受けるのは、このコマンドが含まれている計算スクリプトが実行されている間の、ブロックの作成のみです。このコマンドで、データベース全体の「等式にブロックを作成」設定が変更されることはありません。
メンバー式でのディメンション間演算子
Essbaseブロック・ストレージ・メンバー式を設計する場合、等式の左辺または密ディメンションの等式のディメンション間演算子( -> )を使用するときは注意してください。
等式の左辺
計算スクリプトのパフォーマンスを高速化するために、等式の左辺にディメンション間演算子が含まれた式を使用するかわりに、計算スクリプト内でFIXを使用して式の使用を制限します。
たとえば、Sample.BasicでJan -> Salesの値を5%増やす必要があるとします。関連するメンバーの組合せのみを計算することによってパフォーマンスを高めるには、FIXコマンドを使用します。
FIX(Jan)
Sales = Sales * .05;
ENDFIX
FIXコマンドを使用すると、Essbaseでは指定されたメンバーの組合せ(この例ではJanが含まれる組合せ)に対してのみ式が計算されます。
この手法を、低速なディメンション間演算子を使用するアプローチと比較します。前述の例では、データベース・アウトライン内のSalesメンバーに対する次の式を配置します。
Sales(Sales -> Jan = Sales -> Jan * .05;)
1月の組合せのみ計算が必要であっても、Essbaseは、データベースを一巡して、時間としてタグ付けされたディメンションのメンバー(1月、2月、3月など)が含まれるすべてのメンバーの組合せについて、式を計算します。
「FIXコマンドの使用」を参照してください。
密ディメンションにおける等式
密ディメンションの等式でディメンション間演算子を使用した場合、次の両方の条件が該当する場合はEssbaseで必要なブロックが自動的には作成されません。
-
結果が密ディメンションからの値である。
-
オペランドが疎ディメンションからのものである。
次の方法を使用してブロックを作成して、パフォーマンスの問題を回避できます。
-
結果のメンバーが、密ディメンションではなく疎ディメンションのものになるようにします。この例では、結果のメンバーBudgetは、疎ディメンションのメンバーです。
FIX(Sales) Budget = Actual * 1.1; ENDFIX FIX(Expenses) Budget = Actual * .95; ENDFIX
-
DATACOPY計算コマンドを使用して、必要なブロックを作成してから計算します。「DATACOPYを使用した既存ブロックのコピー」を参照してください。
-
密のメンバーの等式が含まれているメンバー式を使用します。
FIX(Sales, Expenses) Budget (Sales = Sales -> Actual * 1.1; Expenses = Expenses -> Actual * .95;) ENDFIX
式の実行レベルの管理
CALCLIMITFORMULARECURSIONを構成することで、再帰的なEssbase式の過剰なループを防止できます。
ブロック・ストレージ・アウトラインの式には、それによって1つ以上のブロック内の式の実行がネストされるといった、別の式に対する依存関係がある可能性があります。このような式は、再帰式と呼ばれます。再帰式によってループが大きくなったり終わらなくなることで、サーバーの異常終了が発生する場合があります。
異常終了を回避するには、CALCLIMITFORMULARECURSION構成設定を使用して、実行レベルがデフォルトの数を超えた式実行を停止できます。