集約ストレージ・キューブでのカスタム計算

カスタム計算は、Essbaseの分析機能を拡張するものであり、それにより、集約ストレージ(ASO)・キューブでの繰返し計算を実行できます。特定のキューブ領域を対象にして計算し、会計の借方、貸方およびオフセット情報を提供できます。

ターゲットのレベル0セルを更新する、集約ストレージ・キューブのカスタム計算を記述できます。カスタム計算スクリプトはMDXで表現されます。

カスタム計算を使用して、総勘定元帳の勘定科目残高の基本的な計算を行い、その結果をターゲットであるEssbase集約ストレージ・キューブのレベル0メンバーに書き込むことができます。勘定科目残高と固定金額のどちらに対して計算を実行することもでき、会計期間ごとに繰り返すようにスケジューリングできます。

カスタム計算は、キューブが総勘定元帳レポート(複式簿記対応)用に使用されている場合に役立つ可能性があります。借方アイテム(資産、費用など)の金額と貸方アイテム(資本、収益など)の金額は一致する必要があります。

カスタム計算を作成して実行するには、次のワークフローを使用します。

  • MDXで表現される計算スクリプトを作成します。

  • キューブのどの領域でその計算を実行するかを選択します。この領域は、実行時に、ターゲットおよびPOV (視点)のパラメータを使用して指定します。

  • 借方と貸方の処理を使用する場合は、正の値と負の値を書き込む借方および貸方のメンバーをアウトラインで選択します。これらのパラメータを実行時に指定します。

  • オフセット・エントリを使用する場合は、どの領域でオフセット・エントリを行うかを選択します。このパラメータは、実行時に、MDXタプルを使用して指定します。オフセットが指定されていないか空である場合は、オフセット計算は実行されません。

    ノート:

    一般会計の簿記では、オフセット・エントリは元帳の反対側での相殺の手段です。たとえば、Januaryの貸方$100に対して元帳の借方側に$100のオフセットを追加することで、予定されているその金額の支出に備えて元帳を貸借一致させることができます。

  • カスタム計算スクリプトを実行します。

カスタム計算基準のリスト

Essbase集約ストレージ(ASO)キューブのカスタム計算を設計するときに、考慮する基準としては、POV (コンテキスト・リージョン)、MDX計算スクリプト、ターゲット(結果の書込み先)、ソース・リージョン(式で参照される)、オプションのオフセット値、およびオプションの貸方メンバーと借方メンバーがあります。

カスタム計算機能は指定された様々な基準に基づいています。次に進む前にこれらの用語を確認してください。

表39-1 カスタム計算基準の説明

基準 説明

POV

カスタム計算が実行されるコンテキストを記述する、データベース内の対称リージョン。

属性メンバーをこの引数で使用することはできません。

計算スクリプト

MDXで表現される計算スクリプト。

属性メンバーは式の左辺で使用できません。

ターゲット

MDXで表現されるタプル引数。計算結果の書込み先となる、キューブ内のリージョンを定義します。この引数を各式の左側およびオフセットと組み合せて決定された場所に、結果およびオフセット値が書き込まれます。

属性メンバーをこの引数で使用することはできません。

(オプション)オフセット

各ソース金額のオフセット値が書き込まれる、データベース内の場所。

属性メンバーをこの引数で使用することはできません。

(オプション)貸方および借方メンバー

複式簿記で、1つの取引に対する仕訳を貸借一致させます。両方ともMDXメンバー式です。借方メンバーは正の結果値が書き込まれるメンバーを示し、貸方メンバーは負の結果値が書き込まれるメンバーを示します。

属性メンバーをこの引数で使用することはできません。

ソース・リージョン

MDXセット式。これで指定されたキューブのリージョンがスクリプト内の式で参照されます。

ASOのカスタム計算の記述と実行

Essbase集約ストレージ・キューブのカスタム計算を記述し実行して、ターゲットのレベル0セルを更新します。カスタム計算スクリプトはMDXで表現されます。スクリプトを実行するには、MaxLのexecute calculationを使用します。

カスタム計算の記述

1つのカスタム計算スクリプトは1つのファイルとして作成し、.csc拡張子を付けて保存します。カスタム計算スクリプトを作成するには、1つまたは一連のタプル表現ペアをMDXで記述し、最後にセミコロンを付けます。構文は次のとおりです。

tuple := numeric_value_expression;

tupleは1つ以上のメンバーに関するMDX仕様で、2つのメンバーが同じディメンションに属することはできません。タプルは等式の左辺にある必要があり、カスタム計算の結果が書き込まれる場所を決定する第1の要因となります。

タプル式の中に記述できるのはメンバー名のみです。カスタム計算スクリプトでのMDX関数の使用はサポートされていません。

ノート:

結果のターゲットを決定する第2の要因はターゲット・パラメータで、第3の要因はPOVパラメータです。2番目と3番目のパラメータは、計算スクリプトの一部としてではなく、計算実行時に指定します。

numeric_value_expressionは、1つの数値や算術演算などの単純なMDX数値式です。式は、等式の右辺である必要があります。算術演算子のみが許可されます。算術以外の演算子(たとえばAND、ORまたはIF文)が使用されている場合はエラーが返されます。

メンバー名を数値式の中で使用できますが、メンバー関数をカスタム計算スクリプトで使用することはサポートされていません。

属性メンバーはカスタム計算スクリプト内の等式の左辺で使用できません。

ソース・リージョンも定義する必要があります。このリージョンは、Essbaseのパフォーマンス・ヒントとして機能します。Essbaseは、ソース・リージョンで指定されたデータをプリフェッチし、これを使用して、スクリプトで指定された計算を実行します。

カスタム計算の実行

カスタム計算は、MaxLexecute calculation (集約ストレージ)文を使用して実行できます。

APIを使用してカスタム計算スクリプトを実行することもできます。その場合はJava APIメソッドIEssPerformCustomCalc.performCustomCalcまたはC API関数EssPerformCustomCalcASOをコールします。

また、Oracle Hyperion Calculation Managerを使用してカスタム計算を設計し、Enterprise Scheduling Servicesにデプロイして実行することもできます。

カスタム計算の使用例

Essbase集約ストレージ(ASO)キューブでのカスタム計算についてのこのユースケース例では、貸方メンバー、借方メンバーおよびオフセットを使用して、事業用家賃の割当てを実行します。

ディメンションのアウトラインは次のとおりとします。

  • Company: この中にCompanyA、CompanyBおよびその他の子があります。

  • Department: この中に番号付けされた部門があります(101、102、103など)。

  • Account: この中の勘定科目5740が賃借料の勘定科目で、SQFTが各部門の面積(平方フィート)の記録に使用される統計勘定科目です。

  • Scenario: この中のActualメンバーにデータが転記され、Allocationメンバーに割当ておよびカスタム計算が格納されます。Scenarioメンバーは親であり、子メンバーActualおよびAllocationを集約します。

  • Year: 時間ディメンションであり、月および四半期で構成されます。

  • Geography: 州および都市で構成されるディメンション。

  • AmountType: この中にあるDebitがターゲットで、Creditがオフセットです。

  • Project: このディメンションの中にProj1、Proj2などのプロジェクトがあります。

POVは、カスタム計算が実行される場所を示すMDXセット式です。次のように指定されます。

CrossJoin( { ( [Company], [101], [Jan], [Scenario] ) },
           Descendants( Geography, Geography.Levels(0)) )

DebitMemberは、正の結果値が書き込まれる借方メンバーを示すMDXメンバー式です。[BeginningBalance_Debit]のように指定されます。

CreditMemberは、負の結果値およびオフセット結果値が書き込まれる貸方メンバーを示すMDXメンバー式です。[BeginningBalance_Credit]のように指定されます。

ノート:

すべての結果値の合計が負数の場合は、オフセットは借方メンバーに書き込まれます。

オフセットは、オフセット・エントリが行われる場所を示すMDXタプル式です。([Account_NA], [Project_NA])のように指定されます。

オフセット式をターゲットおよびPOVと組み合せることで、オフセット・エントリが行われる場所が決定します。ディメンションが重複している場合にオフセットの場所を解決するための順序は、オフセット、ターゲット、POVの順となります。

ターゲットは、カスタム計算の結果が書き込まれる場所を示すMDXタプル式です。(Allocation)のように指定されます。

ターゲット式にPOVと、カスタム計算スクリプト内の各行の左側を組み合せることで、結果が書き込まれる場所を決定します。ディメンションが重複している場合、ターゲットの場所を解決するための順序は、等式の左辺、ターゲット、POVの順となります。この例では、結果はAllocationメンバーに書き込まれます。POVで指定されたScenarioメンバーよりもターゲットが優先されるためです。

カスタム計算スクリプトの例を次に示します。

(AccountA,Proj1) := 100;
([AccountB], [Proj1]) := ([AccountB], [Proj1]) * 1.1;
(AccountC,Proj1) := 
	((AccountB,Proj1,2007) + (AccountB, Proj1)) / 2;
(AccountA,Proj2) := 
	((AccountD,Proj1) + 
	  (AccountB,Proj2)) / 2;

POV内の各組合せについて、

  • 計算スクリプトは現在のPOV組合せのコンテキストで実行されます。

  • 1つのオフセット値がターゲットの場所に書き込まれます。

ノート:

各式(計算スクリプト内の行)は順番にではなく、同時に実行されます。したがって、ある式の結果を後続の式で使用することはできません。

ソース・リージョンを定義するには、カスタム計算スクリプトを調べて、等式の右辺でどのメンバーが参照されるかを特定します。少なくとも、ソース・リージョンには、カスタム計算スクリプトの代入文の右辺にあるメンバーすべてが含まれる必要があります。

ソース・リージョンを単一のMDXセットとして定義します。等式の右辺のメンバーが複数のディメンションからのものである場合は、CrossJoinを使用してこのセットを2つのセットから作成できます。CrossJoinが受け入れるのは2つのセットのみであるため、必要に応じてネストしたCrossJoinを使用します。

前述のカスタム計算スクリプトのソース・リージョンは次のとおりです。


Crossjoin(
 {[AccountB], [AccountD]}, 
   Crossjoin(
    {[Proj1], [Proj2]}, {[2007]}
   )
)

スクリプトの中で代入されないメンバーをソース・リージョンに含める必要はありません。たとえば、スクリプトでは使用されていない[AccountC]をソース・リージョンに追加した場合は、これは無視され、わずかなパフォーマンス低下の原因となります。

ソース・リージョンで数値を考慮する必要はありません。たとえば、カスタム計算スクリプトの中に([Bud Var]):=10という代入がある場合でも、ソース・リージョンには何も追加する必要はありません。

NONEMPTYTUPLEによるカスタム計算の最適化

NONEMPTYTUPLEプロパティを使用すると、Essbase集約ストレージ(ASO)のカスタム計算スクリプトを最適化して、大規模な疎データ・セットの計算時に空のタプルをスキップすることでメモリー・リソースを節約できます。

大規模なデータ・セットは非常に疎である場合があるため、NONEMPTYTUPLEプロパティをカスタム計算スクリプトで使用すると、メモリー・リソースを節約するためにスクリプトを最適化できます。

カスタム計算スクリプトを作成するには、1つまたは一連のタプル表現ペアをMDXで記述し、最後にセミコロンを付けます。必要に応じて空の結果セットを計算から除外するには、NONEMPTYTUPLEプロパティ句をカスタム計算スクリプトに含めます。

NONEMPTYTUPLEプロパティ句をカスタム計算スクリプトの中で使用すると、Essbaseに対して、指定されたnonempty_member_listが空のときは、タプルに対して計算されるセル値は空であると伝えることになります。

構文

use_optimized_way;
tuple := [NONEMPTYTUPLE (nonempty_member_list)] numeric_value_expression;

説明

  • use_optimized_way—リテラル・キーワード。計算スクリプト内でNONEMPTYTUPLEプロパティを有効にするために必要です。省略した場合は、NONEMPTYTUPLEディレクティブが無視されます。

  • tuple—1つ以上のメンバーに関するMDX仕様で、2つのメンバーが同じディメンションに属することはできません。

  • NONEMPTYTUPLE—オプションのプロパティ。これを使用すると計算のパフォーマンスを最適化できます。これを使用する場合は、nonempty_member_listを使用してこのリテラル・プロパティに従う必要があります。

  • nonempty_member_list—それぞれ別のディメンションからの1つ以上のメンバー名をカンマで区切ったもの。

  • numeric_value_expression—1つの数値や算術演算などの単純なMDX数値式。式は、等式の右辺である必要があります。算術演算子のみが許可されます。算術以外の演算子(たとえばAND、ORまたはIF文)が使用されている場合はエラーが返されます。

次のカスタム計算スクリプトの例には、NONEMPTYTUPLEプロパティ句が含まれているため、空のタプルは計算パスから除外されます。

use_optimized_way;
([Balance].[Net Balance].[Net Change].[Allocation Out]):= NONEMPTYTUPLE ([Balance].[Remainder],[Rule]) -(([Balance].[Remainder],[Rule])*(20.24000/100));
([2014], [August], [Actual]):= NONEMPTYTUPLE ([2014], [January], [Actual]) ([2014], [January], [Actual]);