Oracle Essbase 계산 스크립트에서는 조건이 True인 경우 코드를 실행하려면 if 문을 사용하고, 이전에 평가한 조건이 False인 경우 테스트할 각각의 새로운 조건을 지정하려면 else 및 else if 문을 사용합니다.
if 및 else if 문을 사용하는 코드는 대부분의 데이터를 충족하는 조건을 분석한 다음 해당 조건에 대한 평가를 가능한 한 빨리 실행되도록 코드 시작 부분으로 이동하여 최적화할 수 있습니다.
계정 및 시간이 조밀한 Sample.Basic에 대한 다음 계산 스크립트의 예를 고려하십시오.
SET UPDATECALC OFF;
"SalesYTD"(
IF(@ismbr("Jan"))
SalesYTD" = "Sales";
Else
"SalesYTD"="Sales" + @prior("SalesYTD");
Endif
)
이 경우 90% 이상의 데이터가 else 조건의 기준을 충족합니다. 약 10%의 데이터만 if 조건의 기준을 충족합니다. else 조건의 @prior 기능 때문에 다른 월보다 1월을 먼저 계산해야 합니다. 이 계산을 실행하면 총 경과 시간이 다음과 같이 보고됩니다.
Total Calc Elapsed Time for [IF.csc] : [0.203] seconds
이 계산에서 "SalesYTD" 멤버는 셀 모드에서 계산됩니다. 즉, 1월은 아웃라인의 다른 달보다 먼저 표시되므로 if 조건문의 순서에 관계없이 먼저 계산됩니다.
이러한 스크립트는 다음 예에 표시된 것처럼 명령문 순서를 재정하고 첫번째 조건에 NOT 연산자를 추가하여 최적화할 수 있습니다.
SET UPDATECALC OFF;
"SalesYTD"(
IF(NOT(@ismbr("Jan")))
"SalesYTD" = "Sales" + @prior("SalesYTD");
Else
"SalesYTD"="Sales";
Endif
)
이 경우 이전 예와 비교하여 계산 시간이 1/4 미만으로 단축되는데, 90% 이상의 데이터가 if 명령문의 기준을 충족하기 때문입니다.
Note:
이 예에서 올바른 결과를 얻으려면 공식을 아웃라인 순서대로 계산해야 합니다(2월은 1월 다음에, 3월은 2월 다음에 등으로 계산해야 함). 자동으로 수행되지 않는 경우@calcmode(Cell)를 사용하여 순서를 강제 적용할 수 있습니다.