拡張ディメンション・アプリケーションでの計算のベスト・プラクティス

勘定科目を密ディメンションとして使用する拡張ディメンション・アプリケーション

勘定科目を密ディメンションとして使用する拡張ディメンション・アプリケーションを使用する場合、次のスクリプト・テクニックを使用できます。このようなアプリケーションに関する次の点に注意してください:

  1. ディメンション順序: 増減ディメンションは、ディメンション順序の最初の疎ディメンションで、ビットマップ・ディメンションと呼ばれます。

  2. 会社間ディメンションの親メンバーは動的計算です。

  3. すべてのカスタム・ディメンションでは、親メンバーを「動的計算」に設定する必要があります。

  4. 最小限の上位レベル・ブロック件数を持ち、スプレッドシート操作時に動的集計をアーカイブします。

  5. 最上位/親メンバーが既存の計算で使用される場合、既存の計算を書き換える必要があることを除き、カスタマイズされた計算を記述する際にポイント2および3は重要な役割を果たします。


拡張ディメンションの勘定科目と増減

SET HYBRIDBSOINCALCSCRIPT FULL / NONE

次の例のように、式の右側に最上位メンバーがある場合は、HYBRIDBSOINCALCSCRIPTが必要です:

"CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2";

この場合、次の例のように、問題となる行についてHYBRIDBSOINCALCSCRIPTを無効にし、問題となる行の実行後にそれを再度有効にする必要があります:

SET HYBRIDBSOINCALCSCRIPT NONE
"CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2"; SET HYBRIDBSOINCALCSCRIPT FULL;

必要に応じて、構成可能な計算(挿入位置)ルールについてのみ、これを行います。

SET HYBRIDBSOINCALCSCRIPT FULL / NONE

次の例のように、右側の最上位メンバーが1つのみである場合は、HYBRIDBSOINCALCSCRIPTによって式の速度が低下することがあります:

"CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2";

この場合、次の例のように、問題となる行についてHYBRIDBSOINCALCSCRIPTを無効にし、問題となる行の実行後にそれを再度有効にする必要があります:

SET HYBRIDBSOINCALCSCRIPT NONE
"CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2"; SET HYBRIDBSOINCALCSCRIPT FULL;

必要に応じて、構成可能な計算(挿入位置)ルールについてのみ、これを行います。

連続加算テクニック

"Target_Account_Stored" -> "Mvmt_None" = "FCCS_Mvmts_Subtotal" -> "Source_Account_DynamicCalc" -> "Total Custom1" -> "Total Custom2";

この例の目的は、右側にある動的計算の結果を保管済の密メンバーに保管することです。SET HYBRIDBSOINCALCSCRIPT FULLを指定して実行された場合、この計算は実行されません。このような状況では、「加算」として設定されているカスタム・ディメンションのレベル0のメンバーの集計演算子に基づき、連続加算として知られるテクニックを使用できます。勘定科目ディメンションは疎であるため、「動的計算」ソース勘定科目でレベル0のメンバーをFIX指定します。また、ハイブリッド・モードを必ず無効にしてください。

1.       SET HYBRIDBSOINCALCSCRIPT NONE; /* Turn OFF Hybrid mode */
2.      FIX( @RELATIVE( "Total Custom1", 0 ), @RELATIVE( "Total Custom2", 0 ), <other dimension members of FIX> )
3.      "FCCS_Mvmts_Subtotal" ( @CALCMODE( BOTTOMUP );
4.      "Target_Account_Stored" -> "Mvmt_None" = "Target_Account_Stored" -> "Mvmt_None" + "Source_Account_DynamicCalc";
5.      )
6.      ENDFIX

Custom1のレベル0のいくつかのメンバーで、集計演算子が次のように設定されている場合を考えます: Custom1_AおよびCustom1_Bメンバーの集計演算子は「減算」と設定されています。


連続加算の例3

このテクニックを使用する場合の重要な考慮事項: ビジネス・ルールが複数回実行される場合、ターゲット勘定科目が累積値を持つ可能性が非常に高くなります。その結果、誤った数値となります。そのため、BOTTOMUPプロセスでは、スクリプトが1回以上実行されている可能性が高いため、ターゲット値を#Missingに初期化することを検討してください。


連続加算の例4

次の構成要素は避けてください。

  1. CALC DIM、CALC ALL、AGG、およびサブツリーを計算する未割当のその他の式。CALC DIMおよびAGGの使用を、保管済メンバーが動的メンバーに依存しないディメンションに制限するのがベスト・プラクティスです。

  2. 計算スクリプトにCREATENONMISSINGBLOCKまたはCREATEBLOCKONEQを使用しないでください。

  3. 挿入位置内に次の関数を使用しないでください。

    • @ALLOCATE

    • @CREATEBLOCK

    • @IRREX

    • @MDALLOCATE

    • @MDSHIFT

    • @MOVSUMX

    • @PTD

    • @SANCESTVAL

    • @STDEV

    • @STDEVP

    • @STDEVRANGE

    • @SYD

    • @TREND

疎メンバー・ブロックおよびボトムアップの使用

非拡張ディメンション・アプリケーションのシナリオ

1.FIX ("FCCS_EntityInputFCCS_EntityInputFCCS_EntityInputFCCS_EntityInput FCCS_EntityInput FCCS_EntityInputFCCS_EntityInputFCCS_EntityInputFCCS_EntityInput", "Entity "Entity Currency" Currency" Currency" Currency" Currency" Currency" Currency" )
2.FIX ("Inventory_StockInventory_StockInventory_StockInventory_Stock Inventory_StockInventory_Stock Inventory_Stock Inventory_Stock ", "FCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncome ", "FCCS_NoFCCS_NoFCCS_NoFCCS_No FCCS_NoIntercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", "No "No Product", Product", Product", Product", Product", Product", Product", "FCCS_LocalFCCS_LocalFCCS_LocalFCCS_Local FCCS_Local GAAP" GAAP" GAAP" )
3."FCCS_ManagedFCCS_ManagedFCCS_ManagedFCCS_Managed FCCS_Managed FCCS_Managed Data" Data" Data" (
4."FCCS_OtherFCCS_OtherFCCS_OtherFCCS_Other FCCS_Other FCCS_Other Data" Data" Data" ="Warehouse_StockWarehouse_Stock Warehouse_Stock Warehouse_Stock Warehouse_Stock Warehouse_Stock " +"Showroom_Stock Showroom_StockShowroom_Stock Showroom_StockShowroom_Stock Showroom_Stock ";
5.)
6.ENDFIX
7.ENDFIX ENDFIX

拡張ディメンション・アプリケーションのシナリオ

8.FIX ("FCCS_EntityFCCS_EntityFCCS_EntityFCCS_Entity FCCS_Entity Input", Input", Input", Input", Input", Input", Input", "Entity "Entity Currency" Currency" Currency" Currency" Currency" Currency" Currency" )
9.FIX ("Inventory_StockInventory_StockInventory_StockInventory_Stock Inventory_StockInventory_Stock Inventory_Stock Inventory_Stock ", "FCCS_ManagedFCCS_Managed FCCS_Managed FCCS_ManagedFCCS_ManagedData" Data" Data" ,"FCCS_NoFCCS_NoFCCS_NoFCCS_No FCCS_NoIntercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", "No "No Product", Product", Product", Product", Product", Product", Product", "FCCS_LocalFCCS_LocalFCCS_LocalFCCS_Local FCCS_Local GAAP" GAAP" GAAP" )
10 ."FCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncome " (
11 ."FCCS_OtherFCCS_OtherFCCS_OtherFCCS_Other FCCS_Other FCCS_Other Data" Data" Data" ="Warehouse_StockWarehouse_Stock Warehouse_Stock Warehouse_Stock Warehouse_Stock Warehouse_Stock " +"Showroom_Stock Showroom_StockShowroom_Stock Showroom_StockShowroom_Stock Showroom_StockShowroom_Stock ";
12 .)
13 .ENDFIX ENDFIX
14 .ENDFIX

増減メンバー"FCCS_Mvmts_NetIncome"はアンカーとして使用されます。増減ディメンションはビットマップ・ディメンションと見なされます。これは、勘定科目密ディメンションの後の最初の疎ディメンションです。可能なかぎり、単一の増減ディメンション・メンバーを含む計算では、増減メンバーをメンバー・ブロック(アンカーと呼ばれます)として使用する必要があります。

ソースとして最上位/親メンバーを含む計算

非拡張ディメンション・アプリケーションのソース

1.       FIX ("Entity Currency", "FCCS_Entity Input")
2.      FIX("FCCS_Managed Data", "FCCS_Intercompany Top",
"Total Custom1", "Total Custom2")
3.      "FCCS_Mvmts_NetIncome"(
4.      IF(@ISLEV("Entity", 0))
5.      "Account 3" = "Account 1" + "Account 2";
6.      )
7.      ENDFIX
8.      ENDFIX

拡張ディメンション・アプリケーションのシナリオ

1.       FIX ("Entity Currency", "FCCS_Entity Input")
2.      FIX("Account 3" ,"FCCS_Managed Data", "FCCS_No Intercompany", "No Custom1", "No Custom2")

3.      "FCCS_Mvmts_NetIncome"(
4.      IF(@ISLEV("Entity", 0))
5.      "FCCS_Intercompany Top"->"Total Custom1"-
>"Total Custom2"->"Account 1" + "FCCS_Intercompany Top"-
>"Total Custom1"->"Total Custom2"->"Account 2"; 6.     )
7.      ENDFIX
8.      ENDFIX
  1. 最上位メンバーが動的計算で、FIX式で使用できないため、計算の右側でメンバーを使用して、結果を「No <member>」にリダイレクトします。

  2. 計算の結果を保管する単一の密ディメンション・メンバーは、FIX内に配置されます。

拡張ディメンション・アプリケーションでの計算のベスト・プラクティス

  • 計算の右側に最上位/親メンバーを含まない場合のみ、ボトムアップ処理を使用します。

  • 密ディメンションで@ISMBRチェックを使用するのではなく、@Removeを使用して密メンバーを削除します。

  • @LEVおよび@CURRMBRのかわりに、ブール@ISLEVを使用します。

  • 制限されたメンバーをFIXから削除します。

  • アンカーによる方法が機能しない場合は、コピーを使用してターゲット・ブロックを作成します。

  • 1つのターゲット・カスタム・ディメンション・メンバーに対してのみ計算を実行する必要があります。

  • スクリプトを汎用にするには@LIKEを使用します。

  • エッジ・ケースをチェックします。

  • 共通ケースを最初にチェックします。

  • 計算で単一の増減ディメンション・メンバーに書き込む場合は、増減メンバーをメンバー・ブロック(アンカーと呼ばれます)として使用します。

  • 勘定科目が密ディメンションの場合に計算で単一の勘定科目ディメンション・メンバーに書き込む場合は、勘定科目メンバーをFIXに移動します。期間および増減が密メンバーであるアプリケーションで、勘定科目メンバーを計算の左側に移動します。

拡張ディメンション・アプリケーションはハイブリッド集約モードを使用します。SET HYBRIDBSOINCALCSCRIPT構築は、Calculation Managerの一部として使用でき、保管済メンバーが動的メンバーに依存する場合に、アプリケーションのキューブが計算スクリプトでハイブリッド集約モードを使用するかどうかを制御します。

拡張ディメンション・アプリケーションでサポートされるEssbase関数のリストは、Oracle Essbaseテクニカル・リファレンスのハイブリッド集約モードでサポートされる関数に関する項を参照してください。

顧客Aのユース・ケース

このユース・ケースでは、当初の計算に次の問題が含まれていました。

  • 手動のキャッシュ・フロー計算

  • 計算なしに対して、挿入場所にキャッシュ・フロー計算が挿入されるとパフォーマンスが低下しました。1つのエンティティを連結するのに2分を要したのに対して、計算なしの場合は40秒でした。

  • 法定慣行のため、計算ではシード済キャッシュ・フローを使用できませんでした。

当初の計算

1.       FIX("Entity Currency", "FCCS_Entity Input")
2.      /* Account CA3_010 - CET1 Capital ratio */
3.      /* Account CA3_020 - Surplus(+)/Deficit(-) of CET1 capital */
4.      FIX ("FCCS_No Movement", "No Custom2", "No Custom3", "No Custom4", "FCCS_Data Input", "FCCS_No Intercompany")
5.      "Submitted" (
6.      "CA3_010" = ("FCCS_Mvmts_Subtotal"->"Total Custom1"->"Total Custom2"->"Total Custom3"-> "FCCS_Intercompany Top"->"FCCS_Total Data Source"->"FCCS_YTD"->"CA1_020" / "FCCS_Intercompany      Top"->"FCCS_Total Data Source"->"FCCS_YTD"-> "CA2_010") - @Prior("CA3_010"->"FCCS_YTD");

7.      "CA3_020" = ("FCCS_Mvmts_Subtotal"->"Total Custom1"->"Total Custom2"->"Total Custom3"-> "FCCS_Intercompany Top"->"FCCS_Total Data Source"->"FCCS_YTD"->"CA1_020" - ("FCCS_Intercompany Top"->"FCCS_Total Data Source"->"FCCS_YTD"->
"CA2_010" * 0.045)) - @Prior("CA3_020"->"FCCS_YTD");
8.      ENDFIX
9.      ENDFIX

次の理由のために、計算はうまく実行されません。

  1. 各ディメンションのほとんどの親メンバーが動的計算であるため、計算の右側が基本的にEssbaseに対する問合せです。

  2. 前述のケースでは、2つの問合せが同時に起動し、結果がフェッチされた場合のみ実際の計算が起動するため、式のキャッシュの速度が低下します。

  3. エンティティ・レベルに関係なく、前述のスクリプトは連結時にすべてのエンティティに対して実行されます。

改訂された計算

次の例は、改訂された計算を示します。

1.       SET HYBRIDBSOINCALCSCRIPT NONE; /*Turn OFF HYBRID BSO Mode */
2.      FIX("Entity Currency", "FCCS_Entity Input")
3.      /* Account CA3_010 - CET1 Capital ratio */
4.      /* Account CA3_020 - Surplus(+)/Deficit(-) of CET1 capital */
5.      /* First perform the natural aggregation in BOTTOMUP mode */
6.      FIX (@RELATIVE("Total Custom1", 0), @RELATIVE("Total Custom2", 0), @RELATIVE("Total Custom3", 0), "No Custom4",
@RELATIVE("FCCS_Total Data Source", 0), @RELATIVE("FCCS_Intercompany Top", 0))
7.      "FCCS_Mvmts_Subtotal"(@CALCMODE(BOTTOMUP);
8.      IF (@ISLEV("ENTITY", 0))
9.      "FCCS_No Movement"->"FCCS_No Intercompany"->"FCCS_Data Input"->"Submitted"->"CA3_010" = "FCCS_No Movement"->
"FCCS_No Intercompany"->"FCCS_Data Input"->"Submitted"->"CA3_010" + ("FCCS_YTD"->"CA1_020"/"FCCS_YTD"->"CA2_010");

10.     "FCCS_No Movement"->"FCCS_No Intercompany"->"FCCS_Data Input"->"Submitted"->"CA3_020" = "FCCS_No Movement"->
"FCCS_No Intercompany"->"FCCS_Data Input"->"Submitted"->"CA3_020" +
("FCCS_YTD"->"CA1_020" - ("FCCS_YTD"->"CA2_010" * 0.045));
11.     ENDIF;
12.     )
13.     ENDFIX
14.     /* Now leverage usage of @SHIFMINUS instead of subtraction and @PRIOR */
15.     FIX ("No Custom2", "No Custom3", "No Custom4", "FCCS_Data Input", "FCCS_No Intercompany", "Submitted", "CA3_010")
16.     "FCCS_No Movement"(@CALCMODE(BOTTOMUP);
17.     IF (@ISLEV("ENTITY", 0))
18.     @SHIFTMINUS("CA3_010", "FCCS_YTD"->"CA3_010", -1);
19.     ENDIF;
20.     )
21.     ENDFIX
22.     FIX ("No Custom2", "No Custom3", "No Custom4", "FCCS_Data Input", "FCCS_No Intercompany", "Submitted", "CA3_020")
23.     "FCCS_No Movement"(@CALCMODE(BOTTOMUP);
24.     IF (@ISLEV("ENTITY", 0))
25.     @SHIFTMINUS("CA3_020", "FCCS_YTD"->"CA3_020", -1);
26.     ENDIF;
27.     )
28.     ENDFIX
29.     ENDFIX

スクリプトの改善

  • 各問合せ計算を個別のFIXとして区分けし、宛先の密メンバーをFIXに移動しました

  • スクリプトは、連結中にレベル0のエンティティに対してのみ実行されます

  • 増減メンバーをアンカーとして使用します

  • パフォーマンスはエンティティ当たり2分から30秒に向上しました

勘定科目を疎ディメンションとして使用し、期間および増減を密ディメンションとして使用する拡張ディメンション・アプリケーション

この項では、勘定科目を疎ディメンションとして使用する拡張ディメンション・アプリケーションのスクリプト・テクニックについて概要を説明します。期間および増減を密ディメンションとし、勘定科目を疎ディメンションとしてアプリケーションを作成するか、既存のアプリケーションをそのように変換することを選択した場合は、次の点に留意してください:

  1. 期間および増減は密ディメンションです。

  2. 勘定科目ディメンションは疎です。

  3. シード親増減ディメンションのメンバーは動的計算です。

  4. 会社間ディメンションの親メンバーは動的計算です。

  5. すべてのカスタム・ディメンションの親メンバーは動的計算である必要があります。

  6. その目的は、上位レベル・ブロック件数を最小限にし、スプレッドシート操作中に動的集計をアーカイブするためです。

  7. 親メンバーが既存の計算で使用される場合、既存の計算を書き換える必要があることを除き、カスタマイズされた計算を記述する際にポイント2および3は重要な役割を果たします。


密ディメンションと疎ディメンションの例

顧客Aのユース・ケース

FCCS_Managed Dataのソース・データに基づく、データ・ソース・メンバーIC_Inventory_Allocの計算

最適化前


顧客Aのユース・ケース

顧客A - 元の計算スクリプト

  • a.TOPDOWNを実行します

  • b.右側の動的計算上位メンバーを使用するため、データの取得速度が低下します

  • c.計算で、同じ交差を使用して不必要な乗算と除算が行われます


顧客Aのユース・ケースの詳細

顧客Aのユース・ケース - 変更された計算スクリプト

変更された計算スクリプトでは、連続加算テクニックとBOTTOMUP処理を使用します。

  • a.BSOモードで計算を実行します - SET HYBRIDBSOINCALCSCRIPT NONE

  • b. @CREATEBLOCKを使用して、ソースFCCS_Managed Dataブロックに基づいてターゲットIC_Inventory_Allocブロックを作成します(BOTTOMUP)

  • c.動的計算上位メンバーのかわりに、右側で保管済メンバーが使用されます


顧客Aのユース・ケースの変更されたスクリプト

顧客Bのユース・ケース

この余剰勘定科目計算は、勘定科目が疎であるモデルに移行した後で書き換える必要がありました。増減ディメンションのシード親メンバーのデータ・ストレージ・プロパティは動的計算です。このため、連結のタイミングが不正確になり、問題が発生しました。移行後に計算を中断する必要がありました。

ベスト・プラクティスを導入した後の通年のタイミング:


顧客Bのユース・ケースのタイミング結果

顧客Bのユース・ケース - 元の計算

元のFCCS_20の計算:

  • a.増減ディメンション・メンバーがアンカーとして使用されました。増減メンバー「FCCS_Mvmts_Total」は動的計算であるため、アンカーとして使用できませんでした。

  • b.勘定科目ディメンションが疎であるため、右側の上位メンバー「FCCS_Total Liabilities and Equity」および「FCCS_Total Assets」の計算速度が遅くなっています。


顧客Bのユース・ケースの元のスクリプト

疎ユース・ケースの例5

顧客Bのユース・ケース - 変更された計算

この例は、変更されたFCCS_20の計算を示しています。

  • a.連結メンバーがアンカーとして使用されます。

  • b.連続加算テクニックは、レベル0のメンバーの「FCCS_Total Liabilities and Equity」および「FCCS_Total Assets」のFIX指定で使用され、最初にすべての負債と資本が加算されてから、すべての資産が減算されます


顧客Bのユース・ケース - 変更された計算