Fórmulas em Scripts de Cálculo
Quando você define fórmulas do Essbase em scripts de cálculo, elas têm precedência sobre quaisquer fórmulas aplicadas a membros no outline do cubo. O uso de fórmulas dessa forma dá aos cálculos de lote flexibilidade adicional além dos relacionamentos codificados na estrutura do cubo.
Você pode gravar fórmulas para calcular usando equações básicas, equações condicionais e fórmulas interdependentes.
Em um script de cálculo do Essbase, você pode executar as duas operações:
-
Calcular uma fórmula de membro existente na estrutura do cubo
-
Definir uma nova fórmula que dure pela duração da execução do script de cálculo
Para calcular uma fórmula existente que é aplicada a um membro na estrutura de tópicos, use o nome do membro seguido por um ponto e vírgula (;). Por exemplo, o seguinte comando em um script de cálculo calcula a fórmula que é aplicada ao membro Variação na estrutura:
Variance;Para substituir valores resultantes do cálculo da estrutura, você pode aplicar manualmente uma fórmula no script de cálculo. Por exemplo, a seguinte fórmula em um script de cálculo percorre o cubo, adicionando os valores nos membros Folha de Pagamento, Marketing e Diversos, e colocando o resultado no membro Despesas. Esta fórmula substitui qualquer fórmula colocada no membro Despesas na estrutura:
Expenses = Payroll + Marketing + Misc;Observação:
Não é possível aplicar fórmulas a membros compartilhados ou somente a membros de rótulo.
Consulte também: Desenvolver Fórmulas para Cubos de Armazenamento em Blocos.
Equações Básicas em Scripts de Cálculo do Essbase
Em scripts de cálculo do Essbase, você usa equações para atribuir valores aos membros do outline do cubo. A atribuição dura pela duração da execução do script de cálculo.
A sintaxe de uma equação em um script de cálculo do Essbase é:
member = mathematical_expression;member é um nome de membro do outline, e mathematical_expression é qualquer expressão matemática válida.
O Essbase avalia a expressão e atribui o valor ao membro especificado.
No exemplo a seguir, o Essbase percorre o banco de dados, subtraindo os valores em COGS dos valores em Vendas e colocando o resultado em Margem:
Margin = Sales - COGS;Neste exemplo, o Essbase percorre o banco de dados, subtraindo os valores em Custo dos valores no Varejo, calculando os valores resultantes como uma porcentagem dos valores no Varejo e colocando os resultados na Marcação:
Markup = (Retail - Cost) % Retail;Você também pode usar os operadores lógicos > (maior que) e < (menor que) em equações.
No exemplo a seguir, se as vendas de fevereiro forem maiores que as vendas de janeiro, o Indicador de Aumento de Vendas resultará em um valor de 1. Se for falso, o resultado será um valor de 0:
Sales Increase Flag = Sales -> Feb > Sales -> Jan;Equações Condicionais nos Scripts de Cálculo do Essbase
É possível usar equações condicionais em fórmulas de script de cálculo do Essbase para definir a lógica if/else e controlar o fluxo de eventos durante o cálculo.
Ao usar uma instrução IF como parte de uma fórmula de membro em um script de cálculo, você deve:
-
Associe a instrução IF a um único membro
-
Coloque a instrução IF entre parênteses
No exemplo a seguir, toda a instrução IF…ENDIF é colocada entre parênteses e associada ao membro Profit, Profit (IF(...)...):
Profit
(IF (Sales > 100)
Profit = (Sales - COGS) * 2;
ELSE
Profit = (Sales - COGS) * 1.5;
ENDIF;)O Essbase percorre o banco de dados e executa os seguintes cálculos:
-
A instrução IF verifica se o valor de Vendas para a combinação de membros atual é maior que 100.
-
Se Vendas for maior que 100, o Essbase subtrairá o valor em COGS do valor em Vendas, multiplicará a diferença por 2 e colocará o resultado em Lucro.
-
Se Vendas for menor ou igual a 100, o Essbase subtrairá o valor em COGS do valor em Vendas, multiplicará a diferença por 1,5 e colocará o resultado em Lucro.
Para obter mais informações sobre comandos condicionais e controlar o fluxo de scripts de cálculo, consulte Grupos de Comandos de Cálculo
Fórmulas Interdependentes nos Scripts de Cálculo do Essbase
Assim como acontece com as fórmulas no outline, uma fórmula em um script de cálculo calcula relacionamentos matemáticos entre membros no outline do cubo do Essbase.
Um bom exemplo de uma fórmula interdependente no Essbase é uma avaliação de fluxo de caixa, na qual o inventário de abertura depende do inventário de fechamento do mês anterior.
Quando você usa uma fórmula interdependente em um script de cálculo, lembre-se de que as mesmas regras se aplicam à instrução IF. Você deve:
-
Associar a fórmula a um único membro
-
Coloque a fórmula entre parênteses
No exemplo a seguir, toda a fórmula interdependente é colocada entre parênteses e associada ao membro Inventário de Abertura:
"Opening Inventory"
(IF(NOT @ISMBR (Jan))
"Opening Inventory" = @PRIOR("Ending Inventory");
ENDIF;)
"Ending Inventory" = "Opening Inventory" - Sales + Additions;Fórmulas de Script de Cálculo e Status do Cálculo Inteligente
As fórmulas em membros de dimensão esparsa que contêm funções financeiras ou de relacionamento sempre causam recálculo, mesmo que o Cálculo Inteligente do Essbase marque os blocos como limpos.
Suponha que você tenha uma fórmula em um membro de dimensão esparsa e a fórmula contenha um dos seguintes tipos de função:
-
Relacionamento (por exemplo, @PRIOR ou @NEXT)
-
Financeiro (por exemplo, @NPV ou @INTEREST)
O Essbase sempre recalcula o bloco de dados que contém a fórmula, mesmo que o bloco seja marcado como limpo para fins de Cálculo Inteligente.
Consulte Cálculo Inteligente de Blocos de Dados e Cálculo Inteligente para Cubos de Armazenamento em Blocos.
Agrupar Fórmulas e Dimensões no Script
Você pode obter melhorias significativas no desempenho de cálculo agrupando cuidadosamente as fórmulas e dimensões do membro do Essbase em um script de cálculo.
Calcular uma Série de Fórmulas de Membros
Ao calcular fórmulas, certifique-se de usar parênteses corretamente.
No exemplo a seguir, parênteses colocados incorretamente fazem com que o Essbase execute dois cálculos passados pelo cubo: uma vez calculando as fórmulas nos membros Trim1 e Trim2; e uma vez calculando a fórmula no Trim3:
(Qtr1;
Qtr2;)
Qtr3;Por outro lado, as seguintes configurações fazem com que o Essbase percorra o cubo apenas uma vez, calculando as fórmulas nos membros Trim1, Trim2 e Trim3:
Qtr1;
Qtr2;
Qtr3;ou
(Qtr1;
Qtr2;
Qtr3;)Da mesma forma, as seguintes fórmulas fazem com que o Essbase passe pelo cubo uma vez, calculando ambas as fórmulas em uma só passagem:
Profit = (Sales - COGS) * 1.5;
Market = East + West;Calcular uma Série de Dimensões
Ao calcular uma série de dimensões, você pode otimizar o desempenho agrupando as dimensões sempre que possível.
Por exemplo, a seguinte fórmula faz com que o Essbase percorra o cubo apenas uma vez:
CALC DIM(Year, Measures);Por outro lado, a seguinte sintaxe faz com que o Essbase percorra o cubo duas vezes, uma para cada comando CALC DIM:
CALC DIM(Year);
CALC DIM(Measures);