잘못 작성된 규칙은 애플리케이션 전반에 큰 영향을 미칩니다. 다음은 몇 가지 비즈니스 규칙 디자인 모범 사례입니다. 모범 사례 권장 사항을 따르면 상당한 성능 이점을 얻을 수 있습니다.
비즈니스 규칙에 대한 다음 주요 디자인 가이드라인을 따르십시오.
상위 10개 규칙 모범 사례
비즈니스 규칙을 디자인하는 경우 다음 모범 사례 권장 사항을 따르십시오. 잘못 작성된 규칙은 애플리케이션 전반에 큰 영향을 미치므로 이러한 가이드라인을 통해 상당한 성능 이점을 얻을 수 있습니다.
SET 명령에 대한 다음 가이드라인을 따릅니다.
SET CREATEBLOCKONEQ ON
및 SET CREATENONMISSINGBLK ON
을 사용하지 마십시오.SET CLEARBLOCK EMPTY
SET CALCTASKDIMS
를 사용하여 규칙을 방지하거나 테스트합니다. Oracle Essbase에서는 일반적으로 이를 자동으로 수행합니다.SET COPYMISSINGBLOCK OFF
블록 생성은 데이터 복사 또는 희소 멤버 지정을 사용하여 수행해야 합니다. 함수 @createblockoneq
및 @createblock
은 제한된 Fix 문 내에서 최후의 수단으로 사용해야 합니다.
Fix 문(예: 데이터 복사 규칙)에서 차원 참조가 누락되는 것을 방지합니다. 누락되는 경우 처리 시간이 낭비되고, 경합이 증가하고, 누락된 차원의 모든 레벨에 불필요한 블록이 생성될 수 있습니다.
양식과 연계된 비즈니스 규칙에서 병렬 계산을 제거합니다. Calc Parallel 또는 Fix Parallel은 관리/뱃치 규칙에서만 사용해야 합니다.
블록 및 데이터 폭증이 야기될 수 있으므로 불필요한 0을 생성하지 마십시오. 주의 깊게 비즈니스 논리를 검토하여 0을 확인하는 데 필요한 If 조건을 추가합니다. 0을 #missing
으로 변환합니다.
동일한 블록의 여러 통과를 제거합니다. 대신 적절한 외부 FIX를 설정하고 필요에 따라 안팎으로 이동합니다. 동일한 교차점에서 If 문을 사용 및 재사용하는 대신 If 문을 결합합니다.
방정식 왼쪽에 횡차원 참조를 사용하는 것을 방지합니다. 성능에 영향을 미칩니다.
스크립트에서 가장 많은 블록부터 가장 적은 블록의 생성 순으로 차원을 집계합니다. 예를 들어 Agg(첫번째로 많은 블록 차원, 두번째로 많은 블록 차원, 세번째로 많은 블록 차원)가 있습니다. Agg는 Calc Dim보다 빠르며 기본 집계 메커니즘입니다. 일반 사용자 규칙에서 차원 맨위까지 @ancestors
를 사용하는 집계는 블록 경합을 야기할 수 있습니다.
동일한 기본 논리를 사용하여 규칙을 여러 개 생성하는 대신, 런타임 프롬프트를 사용합니다. 규칙이 많아질수록 유지관리도 증가합니다.
비즈니스 논리 분할 및 재사용을 위해 템플리트를 사용합니다. 하지만 템플리트가 Fix, EndFix가 사용된 완전히 작동하는 규칙이면 안 됩니다. 다양한 템플리트가 결합된 규칙에는 적절한 외부 Fix가 있어야 하며 필요에 따라 더 작은 부분 안팎으로 이동해야 합니다.
계산을 사용하여 비즈니스 논리 추가
비즈니스 논리를 애플리케이션에 통합하려면 Calculation Manager를 사용하여 계산을 빌드할 수 있습니다. 이렇게 하면 비즈니스 문제를 해결하는 복잡한 계산을 생성, 검증, 배포 및 관리할 수 있습니다.
일반적으로 다음 작업을 위해 비즈니스 규칙 및 규칙 세트를 생성합니다.
수익 모델링 수행
비용 모델링 수행
KPI 계산
할당 수행
Calculation Manager에는 다음 객체가 포함됩니다.
규칙: 구성요소 및 템플리트 포함
구성요소: 규칙 빌드 지원
규칙 세트: 동시에 또는 순차적으로 계산할 수 있는 규칙 포함
템플리트: 계산을 수행하는 시스템 템플리트 및 관리자가 디자인할 수 있는 사용자정의 템플리트 포함
구성요소: 규칙 빌드 지원
계산 생성에 대해 자세히 알아보려면 Oracle Enterprise Performance Management Cloud용 Calculation Manager로 디자인의 가이드라인을 참조하십시오.
집계 빌드
합산은 애플리케이션을 엔티티 등의 차원이나 다른 희소 차원의 요약 레벨 멤버로 롤업합니다.
Calculation Manager에는 집계 빌드에 도움이 되는 템플리트가 포함되어 있습니다. 템플리트 사용 방법에 대한 몇 가지 제안은 다음과 같습니다.
POV 설정
POV를 설정하면 선택한 멤버에 대해서만 규칙이 실행됩니다. 차원에 런타임 프롬프트를 사용하면 사용자가 규칙을 실행할 때 이러한 차원의 멤버 값을 지정할 수 있습니다. 이런 방식으로, 사용자는 Calculation Manager에서 규칙을 수정할 필요 없이 여러 연도, 시나리오 및 버전에 대해 규칙을 여러 번 실행할 수 있습니다.
일반적인 설정:
전체 밀집 집계: 밀집 차원의 상위 값이 동적 계산으로 설정되지 않은 경우 이 섹션을 완료합니다. 일반적으로 이 탭은 비어 있습니다.
전체 희소 집계: 집계해야 하는 희소 차원을 선택합니다. 선택한 차원의 순서는 관련이 없습니다.
부분 차원 집계, 밀집: 밀집 차원의 상위 값이 동적 계산으로 설정되지 않은 경우 이 섹션을 완료합니다. 일반적으로 이 탭은 비어 있습니다.
데이터를 현지 통화까지 집계: 아니요
데이터베이스의 누락 값 집계: 예
희소 차원에 대한 계산 최적화: 해제
계산기 캐시 값 선택: 기본값
이 마법사의 디버그 모드를 활성화하시겠습니까?: 디버그 마법사 설정 또는 디버그 마법사 해제. 이 템플리트에 일부 디자인 시간 프롬프트에 대한 선택을 표시하기 위해 생성된 스크립트를 보려면 디버그 마법사 설정을 선택합니다.
모범 사례:
엔티티, 시나리오, 버전 등 멤버에 대한 런타임 프롬프트를 활용합니다. 이 경우 사용자 입력에 따라 동적으로 규칙을 실행할 수 있습니다.
일반적으로 계정, 기간 등의 밀집 차원은 집계할 필요가 없습니다. 이 경우, 상위 멤버를 동적 계산으로 설정할 수 있습니다. 그러나 밀집 차원에 멤버 공식이 있고 동적 계산으로 설정되지 않은 경우 계산 차원 규칙이 필요합니다.
세부 계산 빌드
Calculation Manager를 사용하여 비즈니스 문제를 해결하는 계산을 생성, 검증, 배포 및 관리합니다.
Calculation Manager에서는 다음과 같은 세 가지 객체 유형을 계산할 수 있습니다.
규칙 세트: 동시에 또는 순차적으로 계산할 수 있는 규칙 포함
규칙: 구성요소 및 템플리트 포함
구성요소: 공식 구성요소, 스크립트 구성요소, 조건 구성요소, 범위 구성요소, 고정 루프 구성요소 포함
모범 사례:
규칙 빌드의 첫 단계로, 비즈니스 논리 및 규칙이 적용되는 엔티티나 부서를 파악합니다. 예를 들어 규칙에 관련된 계정을 확인합니다.
소스 및 대상 계정을 알고 있어야 합니다.
계산 드라이버를 완전히 파악한 후 적절한 객체 구성요소 또는 템플리트를 사용하여 규칙을 빌드합니다. 구성요소 및 템플리트를 통해 규칙 배포에 도움이 되는 멤버를 쉽게 선택할 수 있습니다.
엔티티, 시나리오, 버전 등 멤버에 대한 런타임 프롬프트를 활용하면 사용자 입력에 따라 동적으로 규칙을 실행할 수 있습니다.
Calculation Manager 진단
규칙을 배포하기 전에 오류 및 경고를 실행합니다. 다음을 포함한 유용한 정보를 제공합니다.
if (<q>Earned Premium</q><>0)
가 포함되어야 합니다. 이렇게 하면 애플리케이션에서 0이 중요하지 않게 됩니다.예제 규칙 이슈 및 해결 방법
예 1: 여러 번 데이터베이스 패스스루가 실행되는 규칙
다음 규칙에서는 연도 및 기간, 통화, 계정에 대해 10번의 데이터베이스 패스스루가 실행됩니다.
예 2: 한 번만 데이터베이스 패스스루가 실행되는 규칙
다음 규칙에서는 한 번만 데이터베이스 패스스루가 실행됩니다. 영향을 받은 셀의 총수가 크게 감소합니다.
예 3: 0이 복사되고 생성되는 규칙
이 규칙에서는 방정식 오른쪽 구성요소 중 0이 포함된 구성요소가 있으면 파생된 멤버는 0이 됩니다. 집계 후에는 0이 많아집니다. 이를 해결하려면 규칙에 if 문, if ("Earned Premium"<>0)
가 포함되어야 합니다. 이렇게 하면 애플리케이션에서 0이 중요하지 않게 됩니다.
예 4: BSO 큐브에서 0 제거
다음 공식은 원래 값이 되거나 0인 경우 #missing으로 변경됩니다.
"DenseMbr" = "DenseMbr" * "DenseMbr"/"DenseMbr";
"SparseMbr" = "SparseMbr" * "SparseMbr"/"SparseMbr";
이를 해결하려면 공식을 활용하여 규칙을 생성합니다. 멤버마다 계산이 수행되어야 하므로 멤버(예: 연도, 시나리오 또는 버전)가 가장 적은 희소 차원을 사용하십시오.
Fix(idescendants(Entity),@levmbrs(Accounts,0),@levmbrs(Period,0),@idescendants(Custom dimensions), @levmbrs(Years,0),@levmbrs(Versions)) Actual=Actual*Actual/Actual; Fix("Actual") CLEARBLOCK EMPTY: Endfix Endfix
나중에 재구조화를 수행해야 합니다. 그러지 않으면 빈 블록이 삭제되지 않습니다.