Em scripts de cálculo do Oracle Essbase, você usa a instrução if
para executar código se uma condição for verdadeira, as instruções else
e else if
para especificar cada nova condição a fim de testar se a condição avaliada anteriormente era falsa.
Você pode otimizar o código que usa as instruções if
e else if
analisando a condição que atende à maioria dos seus dados e, em seguida, movendo a avaliação dessa condição para o início do código para que ele seja executado o mais cedo possível.
Considere o seguinte exemplo de Script de Cálculo para Sample.Basic, em que Contas e Hora são densas:
SET UPDATECALC OFF; "SalesYTD"( IF(@ismbr("Jan")) SalesYTD" = "Sales"; Else "SalesYTD"="Sales" + @prior("SalesYTD"); Endif )
Nesse caso, mais de 90% dos dados atendem ao critério da condição else
. Somente 10% dos dados atende ao critério da condição if
. Em razão da função @prior
na condição else
, Janeiro deve ser calculado antes de todos os outros meses. Ao executar esse cálculo, o tempo total decorrido é relatado como:
Total Calc Elapsed Time for [IF.csc] : [0.203] seconds
Nesse cálculo, observe que o membro "SalesYTD" é calculado no modo Célula, o que significa que Janeiro, porque aparece antes de outros meses no outline, é calculado primeiro, independentemente da ordem das instruções condicionais if
.
É possível otimizar tais scripts ao reordenar as instruções e adicionar um operador NOT
à primeira condição, como mostrado neste exemplo:
SET UPDATECALC OFF; "SalesYTD"( IF(NOT(@ismbr("Jan"))) "SalesYTD" = "Sales" + @prior("SalesYTD"); Else "SalesYTD"="Sales"; Endif )
O cálculo, nesse caso, leva menos de 15 minutos em comparação com o exemplo anterior, pois mais de 90% dos dados atendem ao critério na instrução if
.
Note:
Neste exemplo, é imperativo calcular a fórmula na ordem do outline (Fevereiro deve ser calculado após Janeiro, Março após Fevereiro e assim por diante) para se obter os resultados corretos. Você pode usar@calcmode(Cell)
para forçar a ordem se isso não acontecer automaticamente.