IF 문에 NOT을 사용하여 Essbase 계산 스크립트 최적화

Oracle Essbase 계산 스크립트에서는 조건이 True인 경우 코드를 실행하려면 if 문을 사용하고, 이전에 평가한 조건이 False인 경우 테스트할 각각의 새로운 조건을 지정하려면 elseelse if 문을 사용합니다.

ifelse 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)를 사용하여 순서를 강제 적용할 수 있습니다.