Essbase計算の定義
計算は、特定のタイプのデータを導出するために欠かせません。計算から導出されたデータは計算済データと呼ばれ、未計算のソース・データは入力データと呼ばれます。集計、勘定科目タグ、式、関数および動的計算を使用して、Essbaseデータベースに最適な計算ロジックを定義する方法を説明します。
次のトピックでは、TBCアプリケーションのProductディメンションとMeasuresディメンションを使用して、多くのEssbaseデータベースで行われる、一般的ないくつかのタイプの計算を示します。
ディメンションとメンバーの集計
標準ディメンションのメンバーを定義すると、Essbaseによってメンバーに+(加算を表すプラス記号)集計演算子がタグ付けされ、これは、親の値を導出するための集計中にメンバーが加算されることを意味します。メンバーの集計プロパティは適宜変更できます。
集計は、Essbaseで最も頻繁に使用される計算です。このトピックでは、集計について説明するためにProductディメンションを使用します。
TBCアプリケーションには、次に示す複数の集計パスがあります。
-
個別の製品は製品ファミリにロールアップされ、製品ファミリはProductに集計されます。TBCのアウトラインには、複数の集計パスも必要になります。一部の製品は複数のカテゴリに集計する必要があります。
-
州は地域にロールアップされ、地域はMarketに集計されます。
-
月は四半期にロールアップされ、四半期はYearに集計されます。
集計演算子は、Essbaseが分岐の各メンバーのデータを親にロールアップする方法を定義します。たとえば、デフォルトの加算(+)演算子を使用すると、次に示すようにEssbaseにより100‑10、100‑20および100‑30が加算され、親の100に結果が保管されます。
図1-7 TBCのProductディメンション

Productディメンションの大部分では加算(+)演算子が使用され、これは各メンバー・グループが加算されて親にロールアップされることを示します。Dietにはチルダ(~)演算子が使用され、これはEssbaseによってDietのメンバーが親のProductへの集計に含められないことを示します。Dietのメンバーは、共有されるメンバーのみで構成されています。TBCの製品管理グループがレポートでDietのドリンクを分離できるようにすることを求めているため、TBCでは全体の集計には影響しない別のDietメンバーを作成しました。
位置と演算子が集計に及ぼす影響
Essbaseでは、トップダウンの順序で分岐のデータを計算します。たとえば、加算(+)演算子がタグ付けされた2つのメンバーの次に乗算(*)演算子がタグ付けされた3番目のメンバーがある場合、Essbaseでは最初の2つのメンバーが加算されてから、その合計が3番目のメンバーで乗算されます。
Essbaseでは集計が常に最上位メンバーから開始されるため、メンバーの順序とラベルが重要となります。
共有メンバーの集計
共有メンバーも集計パスに影響を与えます。共有メンバーの概念により、同じ名前の2つのメンバーで同じデータを共有することが可能になります。共有メンバーは他のメンバーに含まれているデータへのポインタを保管するため、Essbaseでは、データを1回のみ保管します。共有メンバーは同じディメンションにある必要がありますデータは複数のメンバーで共有できます。
集計のチェックリスト
次のチェックリストを使用すると、集計の定義に役立ちます。
-
アウトラインでの集計を把握していますか。
-
各メンバーに適切な集計演算子のタグを付けていますか。
-
特定のメンバーに対して、共有メンバーのタグを指定していますか。
-
共有メンバーを(共有ではなく)属性ディメンション内に指定すると、より効率的になりますか。
Measuresディメンションの例でのタグおよび演算子
架空のTBCアウトラインでは、時間データと勘定科目データの両方を使用するため、Accountsというタグが付いているMeasuresディメンションは最も複雑なディメンションになります。ここには、Essbaseでのアウトラインの計算に役立つ式と特殊なタグも含まれています。
TBCによって定義されたMeasuresディメンションのタグについて調査します。Measuresディメンションのほとんどのプロパティについては、前のトピックで説明しています(加算(+)、減算(-)および非集計(~)演算子、勘定科目タグとラベルのみタグ)。
-
InventoryおよびRatiosメンバー名は、ユーザーのデータ・ナビゲーションを支援します。これらにはデータが含まれないため、ラベルのみのタグが付けられます。
-
Measuresディメンション自体にラベルのみのタグが付けられています。メジャーの一部のメンバーには動的計算(Dynamic Calc)のタグが付けられています。
-
メジャーの一部のメンバーにはタイム・バランス・タグ(TB FirstまたはTB Last)が付けられています。
図1-8 TBCのMeasuresディメンション

勘定科目ディメンションの計算
勘定科目としてタグ付けされたEssbaseディメンションでは、計算に影響を与える特別なプロパティを使用できます。タイム・バランス・タグまたはプロパティは、期間に依存する勘定科目の計算方法に関してEssbaseへの指示を提供します。差異レポート・プロパティは、Essbaseによる実績データと予算データの差異の計算方法を定義します。
このトピックでは、勘定科目としてタグ付けされているディメンションの、計算の2つのフォームについて説明します。
タイム・バランス・プロパティ
タイム・バランス・タグ/プロパティを使用するには、勘定科目としてタグ付けされたディメンションおよび時間としてタグ付けされたディメンションが必要です。期首、期末、平均および費用タグは、勘定科目ディメンションのメンバーでのみ使用できます。
TBCのMeasuresディメンションでは、Opening Inventoryデータは各月の初めのTBCの在庫を表します。四半期ごとのOpening Inventoryの値は、四半期の期首の値と等しくなります。Opening Inventoryには、タイム・バランス・タグのTB firstが必要です。
Ending Inventoryデータは各月末のTBCの在庫を表します。四半期ごとのEnding Inventoryの値は、四半期の期末の値と等しくなります。Ending Inventoryには、タイム・バランス・タグのTB lastが必要です。次の表に、勘定科目ディメンションのタイム・バランス・タグの説明を示します。
表1-6 勘定科目メンバーのタグ
タグ | 説明 |
---|---|
Time Balance Last |
最後の子メンバーの値が親に渡されます。たとえば、MarchがQtr1に渡されます。 |
Time Balance First |
最初の子メンバーの値が親に渡されます。たとえば、JanがQtr1に渡されます。 |
次の表では、Qtr1 (右から2番目の列)とYear (右端の列)は、勘定科目ディメンションのタイム・バランス・プロパティにより時間ディメンションの集計がどのような影響を受けるかを示しています。データは第1四半期分のみが表示されています。
表1-7 TBCタイム・バランス・プロパティがTBCの集計に及ぼす影響
ディメンション | Jan | Feb | Mar | Qtr1 | Year |
---|---|---|---|---|---|
勘定科目メンバー1 |
11 |
12 |
13 |
36 |
Qtr1 + Qtr2 + Qtr3 + Qtr4 |
勘定科目メンバー2 (TB First) |
20 |
25 |
21 |
20 |
20 |
勘定科目メンバー3 (TB Last) |
25 |
21 |
30 |
30 |
Qtr4の値 |
通常、時間ディメンションの親の計算は、その親の子の集計と式に基づきます。ただし、勘定科目の分岐のメンバーがTB Firstとマークされている場合、時間ディメンションのすべての親はTB Firstとマークされているメンバーと一致します。
例については、「タイム・バランス・プロパティ」を参照してください。
差異レポート
TBCのEssbaseに対する要件の1つは、実績データと予算データの差異レポートを実行できる能力です。差異レポート計算では、会社の費用を表すすべてのアイテムに費用レポート・タグを付ける必要があります。Inventoryメンバー、Total ExpenseメンバーおよびCOGSメンバーには、それぞれ差異レポート用の費用レポート・タグが付けられています。
Essbaseには、費用と費用外(デフォルト)という2つの差異レポート・プロパティが用意されています。メンバーのメンバー式内の@VAR関数または@VARPER関数をEssbaseがどのように使用して、メンバー内の実績データと予算データの差異を計算するかが、差異レポート・プロパティによって定義されます。
メンバーを費用としてタグ付けすると、@VAR関数により予算から実績が減算されます。たとえば、予算額が$100で、実績の金額が$110の場合、その差異は–10です。
費用タグが付けられていない場合、@VAR関数により実績から予算が減算されます。たとえば、予算額が$100で、実績の金額が$110の場合、その差異は10です。
式と関数
式により、Essbaseアウトラインでのメンバー間の関係を計算します。式は、メンバーまたは計算スクリプトに適用できます。関数は、特殊な計算を実行してメンバーまたはデータ値のセットを戻す、事前定義済のルーチンです。式は、演算子、関数、ディメンション名、メンバー名および数値定数で構成されます。
Essbaseでは、次の演算子がサポートされます。
-
算術演算を行う算術演算子
-
論理条件を計算に組み込む条件演算子
-
データベース・メンバーの特定の組合せのデータ値を指すディメンション間演算子
Essbase関数には175種類以上の事前定義済ルーチンが含まれ、Essbaseの計算能力を拡張しています。Essbaseには、次の関数が含まれています。
-
TRUEまたはFALSEの値を戻して条件付きテストを可能にするブール関数
-
特殊な数学計算を実行する数学関数
-
現在のメンバーの位置に基づいて計算時にデータベース内のデータ値を検索する関係関数
-
メンバーの範囲を別の関数またはコマンドに対する引数として宣言する範囲関数
-
特殊な財務計算を実行する財務関数
-
指定されたメンバーに基づき、メンバーのリストを生成するメンバー・セット関数
-
親レベルで入力された値を子メンバー全体に割り当てる割当て関数
-
データの平滑化、データの補間または将来の値の計算を目的としてデータを操作する予測関数
-
高度な統計を計算する統計関数
-
計算式の中で日付や時刻の特性を使用する日付および時刻関数
-
式を計算するためにEssbaseで使用される計算モードを指定する計算モード関数
Measuresディメンションでは次の式が使用されます。
-
Margin = Sales – COGS
-
Total Expenses = Marketing + Payroll + Miscellaneous
-
Profit = Margin – Total Expenses
-
Profit % = Profit % Sales
-
Margin % = Margin % Sales
-
Profit per Ounce = Profit / @ATTRIBUTEVAL(@NAME(Ounces))
Essbaseでは、集計演算子を使用してMargin、Total ExpensesおよびProfitメンバーを計算します。Margin%式では%演算子を使用し、これはMarginをSalesのパーセンテージで表すことを意味します。Profit%式でも同じ%演算子が使用されています。Profit per Ounce式では、除算演算子(/)と関数(@ATTRIBUTEVAL)を使用して、オンス単位の製品の1オンス当たりの収益性を計算します。
ノート:
Profit per Ounce式では、@NAME関数も使用して、@ATTRIBUTEVAL関数の文字列Ouncesを処理しています。
演算子、関数および構文をすべて示したリストは、計算関数のリストを参照してください。「ブロック・ストレージ・キューブの式の開発」も参照してください。
動的計算
データベース計算を設計するときに、メンバーを動的計算メンバーとして定義することが必要になる場合があります。メンバーを動的計算としてタグ付けすると、Essbaseではデータの取得時にメンバーの組合せを計算し、通常のデータベース計算時にメンバーの組合せを事前に計算しません。
動的計算によって、通常のデータベース計算にかかる時間は短くなりますが、動的に計算されるデータ値を取得する時間が長くなる可能性があります。
次のアウトラインでは、TBCのMeasuresディメンションに、動的計算としてタグ付けされたProfit、Margin、Total Expenses、Margin %、Profit %の各メンバーがあります。
図1-9 TBCのMeasuresディメンション、動的計算タグ

データベース全体の計算を実行するときに、動的計算メンバーとその対応する式は計算されません。これらのメンバーは、Smart Viewなどからユーザーがこれらに対して問合せを実行したときに計算されます。Essbaseでは、問い合された値は保管されず、その後の問合せごとに再計算されます。
どのような場合にデータを動的に計算するかを決定するには、次の領域の優先度を検討してください。
-
通常の計算(バッチ計算)の最適化
-
ディスク・スペース使用率の低下
-
データベース再構築時間の短縮
-
ユーザーによるデータ取得の高速化
-
バックアップ時間の短縮
「データ値の動的計算」を参照してください。
2パス計算
2パス・プロパティは、勘定科目としてタグ付けされたEssbaseディメンションのメンバーと、動的計算としてタグ付けされたメンバーに対してのみ動作します。このラベルは、目的の値を算出するために一部のメンバー式で計算を2回実行する必要があることを示しています。
TBCデータベースでは、Margin %とProfit %に2パスのラベルが付いています。
次の例では、Profit % (式Profit % Salesに基づく)に2パス・タグが付けられている理由を説明します。表には5つの列(列ヘッダーは左からディメンション、Jan、Feb、Mar、Qtr1)と3つの行(Profit、Sales、Profit %のラベル)があります。Jan、Feb、MarおよびQtr1は、Yearディメンションのメンバーです。Profit、SalesおよびProfit %は、Measures (勘定科目)ディメンションのメンバーです。
次の例は、Essbaseにロードする初期データを定義しています。Profit -> Jan、Profit -> FebおよびProfit -> Marのデータ値は100です。Sales -> Jan、Sales -> FebおよびSales -> Marのデータ値は1000です。
表1-8 Essbaseにロードするデータ
ディメンション | Jan | Feb | Mar | Qtr1 |
---|---|---|---|---|
Profit |
100 |
100 |
100 |
該当なし |
Sales |
1000 |
1000 |
1000 |
該当なし |
Profit % |
該当なし |
該当なし |
該当なし |
該当なし |
初めに、EssbaseによってMeasuresディメンションが計算されます。次の表では、Profit % -> Jan、Profit % -> FebおよびProfit % -> Marは10%です。
表1-9 EssbaseによってMeasuresディメンションが計算された後のデータ
ディメンション | Jan | Feb | Mar | Qtr1 |
---|---|---|---|---|
Profit |
100 |
100 |
100 |
|
Sales |
1000 |
1000 |
1000 |
|
Profit % |
10% |
10% |
10% |
該当なし |
次に、EssbaseによってYearディメンションが計算されます。データはディメンション全体でロールアップされます。次の表では、Profit -> Qtr1のデータ値(300)およびSales -> Qtr1のデータ値(3000)は正しいです。Profit %は2パス計算としてタグ付けされているため、Profit % -> Qtr1のデータ値(30%)は正しくありません。
表1-10 EssbaseによってYearディメンションが計算された後のデータ
ディメンション | Jan | Feb | Mar | Qtr1 |
---|---|---|---|---|
Profit |
100 |
100 |
100 |
300 |
Sales |
1000 |
1000 |
1000 |
3000 |
Profit % |
10% |
10% |
10% |
30% |
その後、メンバーProfit %が出現するたびに、Essbaseによって利益パーセンテージが再計算されます。次の表のProfit % -> Qtr1のデータ値(10%)は、2回目のパスで正しくなります。
表1-11 Essbaseで利益パーセンテージが再計算された後のデータ
ディメンション | Jan | Feb | Mar | Qtr1 |
---|---|---|---|---|
Profit |
100 |
100 |
100 |
300 |
Sales |
1000 |
1000 |
1000 |
3000 |
Profit % |
10% |
10% |
10% |
10% |