Considerações sobre Sintaxe

  • Sempre utilize @LEVMBRS, em vez de @RELATIVE, se usado na dimensão inteira.
  • Se aplicável, use @CHILDREN, em vez de @RELATIVE.
  • Use @REMOVE e @LEVMBRS se quiser excluir alguns membros de uma instrução FIX.

Execução de Cálculos Usando Datas Armazenadas no Planning

O Planning permite que você insira valores de data. Por exemplo, quando se usa o formato MM/DD/AAAA, é possível inserir uma data de início como 11/01/2019 e uma data de término como 06/01/2020. O Oracle Essbase armazena valores formatados de data como valores numéricos. Por exemplo, a data de início anterior é armazenada como 20191101 e a de término como 201200601. Você pode usar funções do Essbase, por exemplo, a função @ROUND, @INT ou @TRUNCATE, para calcular o número de meses entre qualquer data de início e qualquer data de término. O exemplo a seguir mostra como calcular o número de meses entre uma data de início e uma data de término usando a função @ROUND:

  1. Calcule o número de meses entre o ano da data de término e o ano da data de início, da seguinte maneira:
    (@ROUND ("End Date",-4) - @ROUND ("Start Date",-4))/10000*12
    O resultado deste cálculo (20200000 – 20190000)/10000 *12 é 12.
  2. Calcule o número de meses entre o início do ano da data de término e a data de término e some-o.
    (@ROUND ("End Date",-2) - @ROUND ("End Date",-4))/100
    O resultado do cálculo (20200600 – 20200000)/100 é 6.
  3. Calcule o número de meses entre o início do ano da data de início e a data de término e subtraia-o.
    (@ROUND ("Start Date",-2) - @ROUND ("Start Date",-4))/100
    O resultado do cálculo (20191100 – 20190000)/100 é 11.
  4. Combine as etapas anteriores na fórmula (12+6-11) para calcular o número de meses (7) entre qualquer data de início e qualquer data de término.
    (((@ROUND ("End Date",-4) - @ROUND ("Start Date",-4))/10000*12) + 
    ((@ROUND ("End Date",-2) - @ROUND ("End Date",-4))/100)-
    ((@ROUND ("Start Date",-2) - @ROUND ("Start Date",-4))/100))

Uso da Função @CURRMBR

A função @CURRMBR, que retorna o nome do membro da dimensão que está sendo calculado no momento, é muito útil para definir o escopo e gerenciar cálculos complexos. No entanto, considere o seu impacto no desempenho.

O desempenho não é afetado quando a função @CURRMBR é usada em uma dimensão esparsa porque o bloco corresponde a um membro de dimensão esparsa apenas. No entanto, o desempenho dessa função é mais lento quando ela é usada em dimensões densas porque ela executa cálculos no nível do bloco, e não no nível da célula. Por isso, essa função calcula todos os membros de dimensões densas, mesmo que um membro de dimensão densa específico não esteja presente na consulta. Consequentemente, use essa função moderadamente com dimensões densas.

Além disso, quando usada em dimensões densas, a dimensão @CURRMBR pode produzir erros ou resultados inesperados se utilizada juntamente com outras funções, como @CONCATENATE. Por exemplo, se um membro calculado dinamicamente em uma consulta contiver a fórmula "Actual"->@MEMBER(@CONCATENATE(@NAME (@CURRMBR ("Account")),"_Total")) e a dimensão Conta for esparsa, a consulta será executada sem erros desde que a conta na consulta gere um membro de outline válido. No entanto, se a dimensão Account for densa, a consulta resultará no erro a seguir, mesmo se a conta na consulta gerar um membro de outline válido.

Error executing formula for [member name] (line 0): attempt to cross a null @ member in function [@X]

Esse erro é gerado porque a função @CURRMBR faz cálculos no nível do bloco e, portanto, calcula todas as contas no bloco denso. Nem todas as contas no bloco geram um membro de outline válido, o que resulta na mensagem de erro anterior. Para obter mais informações sobre a função @CURRMBR, consulte @CURRMBR em Referência Técnica do Oracle Essbase.