属性データの計算

Essbaseでは、Essbaseによって作成されたシステム定義ディメンションのメンバーを使用して、取得時に属性データが動的に計算されます。このディメンションを使用して、合計や平均などの様々な計算関数を同じ属性に適用できます。

属性ディメンションのメンバーについて特定の計算を実行することもできます。たとえば、サイズがオンスで示された製品についてオンス当たりの収益性を判断できます。

以降の情報は、属性ディメンションとEssbaseの計算(動的計算など)の概念を理解していることを前提としています。次の項を参照してください。

属性計算ディメンション

キューブに属性を実装すると、属性計算にラベルのみの動的計算ディメンションが自動的に追加されます。Essbaseでは、これを使用して、取得時に属性データを計算します。

アウトライン内に最初の属性ディメンションを作成すると、Essbaseによって、デフォルト名がSum、Count、Min (最小)、Max (最大)およびAvg (平均)の5つのメンバーで構成される属性計算ディメンションが作成されます。これらのメンバーをスプレッドシートやレポートで使用して、西部の12オンス・ボトル入りコーラの1年間の平均売上などの属性データを動的に計算したり、レポートを作成したりできます。

属性計算ディメンションはアウトラインには表示されません。属性計算ディメンションは、Smart Viewなど、ディメンション・メンバーを選択した任意の場所で表示できます。

属性計算ディメンションには次のプロパティがあります。

  • システム定義

    アプリケーションで最初の属性ディメンションを作成すると、Essbaseによって、属性計算ディメンションとそのメンバー(Sum、Count、Min、MaxおよびAvg)が作成されます。各メンバーは、属性で実行される計算のタイプを表します。

    「属性計算ディメンションのデフォルト・メンバー」を参照してください。

  • ラベルのみ

    すべてのラベルのみディメンションと同様に、属性計算ディメンションはその最初の子であるSumの値を共有します。

    メンバーのストレージ・プロパティを参照してください。

  • 動的計算

    属性計算ディメンション内のデータは、ユーザーが要求したときに計算され、その後は破棄されます。計算された属性データは、データベースに保管できません。

    「データ値の動的計算」を参照してください。

  • アウトライン・エディタでは非表示

    属性計算ディメンションはアウトライン・エディタでは表示されません。このディメンションのメンバーは、スプレッドシートとレポートで表示できます。

属性ディメンションに沿った集計はありません。属性データを計算するために、属性ディメンションのメンバーに集計記号(+や-)またはメンバー式をタグ付けすることはできません。属性計算は、動的計算メンバーとして、バッチ計算の時間や計算順序に影響を与えることはありません。

取得時に属性データを計算するため、Essbaseでは次のタスクが実行されます。

  1. 現在の問合せに存在する属性ディメンション・メンバーに関連付けられた基本ディメンション・メンバーを探します

  2. 現在の問合せの属性とメンバーの組合せに対して、合計、カウント、最小、最大または平均を動的に計算します

  3. スプレッドシートまたはレポートに結果を表示します

  4. 計算された値を破棄します。つまり、値はデータベースに保管されません。

    ノート:

    Essbaseでは、属性データを計算するときに#MISSING値が除外されます。

たとえば、図6-2に示すように、スプレッドシートのユーザーは、属性ディメンションの2つのメンバー(Ounces_16とBottle)と属性計算メンバー(Avg)をスプレッドシートのレポートに指定します。取得時に、Essbaseでは、現在のメンバーの組合せ(Actual -> Sales -> East -> Qtr1)に対してこれらの属性に関連付けられたすべての製品の平均売上高が動的に計算されます。

図6-2 属性計算メンバーの取得


このイメージは、イメージの前のテキストで説明されている、属性計算ディメンションの問合せ済メンバーを示しています。

Smart Viewでの属性計算メンバーへのアクセスを参照してください。

属性計算ディメンションのデフォルト・メンバー

Essbaseの属性計算ディメンションには、属性データの計算やレポート作成に使用する5つのメンバー(Sum、Count、Min、MaxおよびAvg)があります。

Sum-属性または属性の組合せを持つメンバーの値の合計を計算します。

Count-指定された属性または属性の組合せを持ち、それに対するデータ値が存在するメンバーの数を計算します。Countには、存在するデータ・ブロックを持つメンバーのみが含まれます。データ値を持つかどうかにかかわらず、ある属性を持つすべてのメンバーの数を計算するには、@COUNT関数を@ATTRIBUTE関数と組み合せて使用します。

Avg-指定された属性または属性の組合せに対して、欠落していない値の数学的平均を計算します(SumをCountで除算)。

Min-指定された属性または属性の組合せに対して最小データ値を計算します。

Max-指定された属性または属性の組合せに対して最大データ値を計算します。

ノート:

これらの各計算では、#MISSING値は除外されます。

これらのデフォルトのメンバー名は、標準のメンバーと同じ命名規則に従って変更できます。「属性計算ディメンションのメンバー名の変更」を参照してください。

属性計算の例

Essbaseによる属性データの計算方法の例として、属性計算を使用して、ボトルや缶にパッケージ化された製品の合計、件数、平均、最小および最大売上高を計算します。

Eastの次の年間売上データを考慮します:

表6-3 サンプル属性データ

基本ディメンション・メンバー 関連属性 属性とメンバーの組合せによる売上高

Cola

Ounces_12、Can

23205

Diet Cola

Ounces_12、Can

3068

Diet Cream

Ounces_12、Can

1074

Grape

Ounces_32、Bottle

6398

Orange

Ounces_32、Bottle

3183

Strawberry

Ounces_32、Bottle

5664

図6-3は、計算された属性データがスプレッドシートのレポートにどのように表示されるかを示しています。属性に対して複数の属性計算メンバーを取得できます。たとえば、ボトルと缶についてSum、Count、Avg、MinおよびMaxを計算できます。

図6-3 属性データが表示されたサンプル・スプレッドシート


このイメージは、イメージの上にある表に示された、サンプル属性データに基づくサンプル・スプレッドシートを示しています。

Smart Viewでの属性計算メンバーへのアクセス

Smart ViewEssbase属性計算ディメンションのメンバーにアクセスできます。

スプレッドシートでは、ユーザーは次の方法のいずれかを使用して、属性計算ディメンション・メンバーを表示できます。

  • シートにメンバーを直接入力する

  • クエリー・デザイナからメンバーを選択する

  • EssCellパラメータとしてメンバーを入力する

属性計算と取得のパフォーマンス

Essbaseで属性問合せを最適化するには、属性ディメンションが唯一の疎の動的計算ディメンションであることを確認し、密ディメンションの後に疎ディメンションを配置し、取得前に基本ディメンションの最下位レベルにドリルダウンし、属性に従って基本ディメンションのメンバーをグループ化します。

属性計算と取得のパフォーマンスを最適化するには、次の点を考慮してください。

  • 属性計算の計算順序は、動的計算の場合と同じです。「動的計算の計算順序」を参照してください。

  • Essbaseでは、取得時に属性データが動的に計算されるため、属性計算は全体的な(バッチ)データベース計算のパフォーマンスには影響しません。

  • 基本ディメンション・メンバーに動的計算タグを付けると、取得時間が増加する場合があります。

  • Sumメンバーと、関連する基本メンバーに2パス・タグが付けられた属性ディメンション・メンバーが問合せに含まれている場合、取得時間が遅くなることがあります。

  • 属性の取得パフォーマンスを最大化するには、次のいずれかの方法を使用します。

    • 「属性によるアウトライン・パフォーマンスの最適化」のヒントを使用してアウトラインを構成します。

    • データの取得前に、基本ディメンションの最下位レベルまでドリルダウンします。たとえば、Smart Viewでは、データなし操作機能を有効にして、レポートに含まれている基本ディメンションの最下位レベルまでドリルダウンし、その後データを取得します。

    • 基本ディメンションのメンバーがいくつかの属性ディメンションに関連付けられている場合は、それらの属性に従って基本ディメンション・メンバーをグループ化することを検討します。たとえば、Sample Basicデータベースでは、すべての8オンスの製品をグループ化できます。

計算式の属性

属性計算ディメンションを使用して属性データを計算することに加えて、標準ディメンションまたは基本ディメンションのメンバーに対する式を使用して、Essbase属性ディメンションのメンバーに対する計算を実行できます。

たとえば、勘定科目ディメンションのメンバーに式を適用して、サイズがオンスで示された製品についてオンス当たりの収益性を判断できます。

式を属性ディメンションのメンバーに関連付けることはできません。

ノート:

2パス・メンバーに関連付けられた式で属性を使用する場合は、いくつかの制限が適用されます。「属性ディメンションでの2パス計算」で、2パス計算に関する行を参照してください。

次の関数を使用し、属性に対して計算を実行できます:

表6-4 属性に対して計算する関数

関数 計算のタイプ

@ATTRIBUTE (ブロック・ストレージの場合)またはMDX Attribute() (集約ストレージの場合)

特定の属性を持つすべての基本メンバーのリストを生成します。たとえば、Bottle属性を持つメンバーのリストを生成してから、これらのメンバーの価格を上げます。

@ATTRIBUTEVAL

@ATTRIBUTEBVAL

@ATTRIBUTESVAL

計算される基本メンバーに関連付けられているレベル0属性メンバーの値を戻します。

  • 数値または日付属性ディメンションから(@ATTRIBUTEVALを使用)

  • ブール属性ディメンションから(@ATTRIBUTEBVALを使用)

  • テキスト属性ディメンションから(@ATTRIBUTESVALを使用)

たとえば、計算対象の基本メンバー(たとえば、Cola)に対して、サイズ属性の数値(たとえば、Ouncesの下のメンバー12の場合は12)を戻します。

式での@ATTRIBUTEVALのその他の使用例は、「属性の式の計算」を参照してください。

@TODATE (ブロック・ストレージの場合)またはMDX Todate() (集約ストレージの場合)

日付文字列を計算のために数値に変換します。たとえば、@TODATEを@ATTRIBUTEVAL関数と組み合せて使用して、ある日付以降に開店した店舗の間接費を増額します。

@WITHATTR (ブロック・ストレージの場合)またはMDX WithAttr() (集約ストレージの場合)

指定した条件を満たす属性に関連付けられている基本ディメンション・メンバーのリストを生成します。たとえば、20オンス以上の製品のリストを生成してから、それらの製品の価格を上げます。

属性計算と共有メンバー

属性計算での予期しない結果を回避するために、Essbaseアウトラインの階層に共有メンバーと保管済メンバーを混在させないでください。

属性計算は、レベル0から開始され、最初の保管済メンバーで停止します。したがって、アウトラインでアウトライン階層内の2つの共有メンバーの間に保管済メンバーが配置されていると、より上位の共有メンバーは計算結果に含まれないことがあります。

次の例では、属性計算が実行されると、計算はレベル0のメンバー2から開始され、最初の保管済メンバーであるメンバーAが検出された時点で停止します。したがって、メンバー1は計算には含まれません。

Member 1 (stored)
   Member A (stored)
     Member 2 (shared)
Member B (stored)
   Member 1 (shared member whose prototype member is Member 1 above)

メンバー2が共有されていない場合、またはメンバー1にアウトライン内の他の場所に対応する共有メンバーがない場合、計算結果は予期したとおりになりません。

属性メンバーと非属性メンバーの計算の違い

属性ディメンション・メンバーの集約を標準ディメンション・メンバーの集約と一致させるには、属性階層から重複する共有メンバーを削除するか、Essbaseアウトラインを改訂して複数の集約パスを排除することを検討してください。

属性ディメンション・メンバーの計算は、標準ディメンションでの保管済メンバーまたは動的計算メンバーの計算とは異なる働きをします。

Essbase標準ディメンションのメンバーを集約する場合、親メンバーの値は、子メンバーがレベル0メンバーか上位レベル・メンバーかにかかわらず、親メンバーの子メンバーの値の集約に基づきます。すべての子メンバーの値は、親メンバーの値に影響します。

Essbase属性ディメンションのメンバーが集約されると、属性集約が要求されている各親メンバーについて、親値を計算するために集約が必要な依存するレベル0のデータ・ブロックが含まれるように、子孫のリストが展開されます。

このような違いを考慮すると、共有メンバーが含まれていて複数の集約パスがある場合、属性ディメンション・メンバーの集約結果は、標準ディメンション・メンバーの集約結果と異なるものになる可能性があります。

この問題を回避するには、集約する属性階層にある重複した共有メンバーを削除するか、複数の集約パスが存在しないようにアウトラインを再モデル化します。