확장 차원 애플리케이션의 계산에 대한 모범 사례

계정이 밀집 차원인 확장된 차원 애플리케이션

계정이 밀집 차원인 확장된 차원 애플리케이션을 사용하는 경우 스크립팅 기술을 사용할 수 있습니다. 이 애플리케이션에 관한 다음과 같은 사항을 참고하십시오.

  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

오른쪽에 최상위 멤버가 하나만 있는 경우 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

몇 개의 레벨 0 Custom1 멤버가 다음과 같이 연결 연산자를 설정하는 경우를 고려하십시오. Custom1_A 및 Custom1_B 멤버는 연결 연산자가 빼기로 설정되어 있습니다.


연속 더하기 예 3

이 기법을 사용할 때 고려해야 할 중요한 사항: 비즈니스 규칙이 여러 번 실행되는 경우 타겟 계정에 누적 값이 있을 가능성이 높습니다. 결과적으로 숫자가 잘못됩니다. 따라서 스크립트가 한 번 이상 실행되었으므로 BOTTOMUP 프로세스에서 타겟 값을 #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

희소 멤버 블록 및 BOTTOMUP 사용

비확장 차원 애플리케이션 시나리오

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 표현식에서 사용할 수 없으므로, 계산의 오른쪽에 사용하고 결과를 "<member> 없음"으로 리디렉션합니다.

  2. 계산 결과를 저장하는 단일 조밀 차원 멤버를 FIX에 배치해야 합니다.

확장 차원 애플리케이션의 계산에 대한 모범 사례

  • 오른쪽 계산에 최상위/상위 멤버가 포함되지 않은 경우에만 BottomUp 처리를 사용합니다.

  • 밀집 차원에서 @ISMBR 검사를 사용하는 대신에 @Remove를 사용하여 밀집 멤버를 제거합니다.

  • @LEV 및 @CURRMBR 대신, 부울 @ISLEV를 사용합니다.

  • FIX에서 제한된 멤버를 제거합니다.

  • 앵커 접근법이 효과가 없는 경우, 복사를 사용하여 타겟 블록을 생성합니다.

  • 하나의 타겟 사용자정의 차원 멤버에서만 계산을 수행해야 합니다.

  • @LIKE를 사용하여 스크립트를 일반화합니다.

  • 에지 사례를 확인합니다.

  • 일반 사례를 먼저 확인합니다.

  • 계산이 단일 이동 차원 멤버에 쓰는 경우, 이동 멤버를 멤버 블록(앵커라고 함)으로 사용합니다.

  • 계정이 밀집 차원인 단일 계정 차원 멤버에 계산을 쓸 때 계정 멤버를 FIX로 이동합니다. 기간 및 이동이 밀집 멤버인 애플리케이션에서 계정 멤버를 계산의 왼쪽으로 이동합니다.

확장 차원 애플리케이션에서는 하이브리드 집계 모드를 사용합니다. SET HYBRIDBSOINCALCSCRIPT 구문은 Calculation Manager의 일부로 사용할 수 있으며 저장된 멤버가 동적 멤버에 종속된 경우 애플리케이션의 큐브가 계산 스크립트에서 하이브리드 집계 모드를 사용하는지 여부를 제어합니다.

확장 차원 애플리케이션에서 지원되는 Essbase 함수 목록은 Oracle Essbase Technical Reference의 "하이브리드 집계 모드에서 지원되는 함수"를 참조하십시오.

고객 A 사용 사례

이 사용 사례에서는 원래 계산에 다음과 같은 문제가 있었습니다.

  • 수동 현금 흐름 계산

  • 현금 흐름 계산을 삽입 지점에 삽입하면, 계산이 없는 경우에 비해 성능이 저하되었습니다. 하나의 엔티티를 연결하는 데 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. 위의 경우에는 두 개의 동시 쿼리가 실행되고, 결과를 가져올 때만 실제 계산이 시작되므로 공식 캐시의 속도가 느립니다.

  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 블록, BOTTOMUP을 기반으로 타겟 IC_Inventory_Alloc 블록을 생성하는 데 사용됩니다.

  • 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. 연속 더하기 기법은 "FCCS_Total Liabilities and Equity" 및 "FCCS_Total Assets"의 레벨 0 멤버에서 FIX와 함께 사용되며, 먼저 모든 부채와 자본을 더한 후 모든 자산을 뺍니다.


고객 B 사용 사례 - 수정된 계산