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