Otimização de Fórmula do Essbase

Para otimizar o processamento de fórmulas de armazenamento em bloco do Essbase para cálculo e consulta, você pode evitar fórmulas usando consolidação em vez de cálculo, usar fórmulas mais simples quando possível, executar etapas para ajustar o desempenho de fórmulas complexas ou alternar para o modo híbrido.

Você pode obter melhorias significativas no desempenho do cálculo usando fórmulas cuidadosamente no outline do cubo. Por exemplo, você pode obter um melhor desempenho de cálculo colocando fórmulas nos membros no outline do banco de dados em vez de colocar as fórmulas em um script de cálculo. Consulte Desenvolver Fórmulas para Cubos de Armazenamento em Blocos.

As seções a seguir descrevem como lidar com problemas de fórmula que afetam o desempenho do cálculo no modo híbrido, cubos de armazenamento em blocos.

Para a otimização do modo híbrido, consulte Modo Híbrido para Processamento Analítico Rápido.

Consolidação de Membros do Essbase

Usar o outline do cubo para totalizar valores de dados do Essbase é mais eficiente do que usar uma fórmula para calculá-los.

Por exemplo, a consolidação dos membros 100-10, 100-20 e 100-30 no membro 100, conforme mostrado abaixo, é mais eficiente do que a aplicação da seguinte fórmula ao membro 100:

100-10 + 100-20 + 100-30

Figura 34-1 Exemplo de Consolidação


Esta imagem mostra um outline, no qual os membros 100-10, 100-20 e 100-30 são consolidados no membro 100.

Consulte Exemplos de Consolidação de Membros.

Fórmulas de Membro Simples do Essbase

Se uma fórmula do Essbase for simples, ela afetará o desempenho do cálculo do armazenamento em blocos menos do que as fórmulas complexas. O tamanho do bloco também é um fator no desempenho. Fórmulas mais simples são aquelas que não usam referências transdimensionais, funções de intervalo, funções financeiras ou funções de relacionamento.

Se você usar uma fórmula simples e o tamanho do bloco não for excepcionalmente grande, poderá colocar a fórmula em um membro de uma dimensão esparsa ou densa sem afetar significativamente o desempenho do cálculo. Quanto maior o tamanho do bloco, mais impacto as fórmulas simples têm no desempenho do cálculo.

Uma fórmula simples é, por exemplo, uma proporção ou uma porcentagem e atende aos seguintes requisitos:

  • Não faz referência a valores de uma dimensão diferente (esparsa ou densa). Por exemplo, uma fórmula simples não pode fazer referência a Produto -> Jan.

  • Não usa funções de intervalo. Por exemplo, uma fórmula simples não pode usar @AVGRANGE, @MAXRANGE, @MINRANGE ou @SUMRANGE.

  • Não usa funções financeiras ou de relacionamento. Por exemplo, uma fórmula simples não pode usar @ANCESTVAL, @NEXT, @PARENTVAL, @SHIFT, @ACCUM ou @GROWTH.

Referências

Para obter informações sobre a relação entre o tamanho do bloco e o desempenho do cálculo, consulte Tamanho do Bloco e Densidade do Bloco.

Para obter informações sobre como as fórmulas afetam o desempenho do cálculo, consulte Cálculo de Baixo para Cima e de Cima para Baixo.

Funções Financeiras e de Faixa

Funções de Relação

Operador Multidimensional

Fórmulas de Membro Complexas do Essbase

Se uma fórmula do Essbase for complexa, ela afetará o desempenho do cálculo do armazenamento em blocos mais do que as fórmulas mais simples. Para otimizar fórmulas complexas, aplique-as em dimensões densas, aumente a densidade e use FIX para restringir o escopo.

Se você usar uma fórmula complexa, poderá melhorar o desempenho aplicando as seguintes diretrizes:

  • Se possível, aplique a fórmula a um membro em uma dimensão densa. Se não for possível, determine se você pode alterar os cálculos de cima para baixo para cima (consulte Fórmulas em Dimensões Esparsas em Tópicos Grandes).

  • Use o comando FIX em um script de cálculo para calcular apenas os blocos de dados necessários.

  • Aumente a densidade do banco de dados (proporção de blocos de dados existentes para possíveis blocos de dados).

Uma fórmula complexa é aquela que atende a qualquer um dos seguintes requisitos:

  • Faz referência a um ou mais membros em uma dimensão diferente (esparsa ou densa); por exemplo, Produto -> Jan.

  • Usa uma ou mais funções de intervalo, por exemplo, @AVGRANGE, @MAXRANGE, @MINRANGE ou @SUMRANGE.

  • Usa funções de relacionamento ou financeiras; por exemplo, @ANCESTVAL, @NEXT, @PARENTVAL, @SHIFT, @ACCUM ou @GROWTH.

Quando aplicadas a membros de dimensão esparsa, fórmulas complexas criam mais custos indiretos de cálculo e, portanto, desempenho lento. Esse problema ocorre porque a presença de fórmulas complexas exige que o Essbase execute cálculos em todos os blocos de dados possíveis, bem como em todos os blocos de dados existentes relacionados ao membro com a fórmula complexa. A presença de uma relação ou função financeira em um membro de dimensão esparsa faz com que o Essbase execute cálculos em todos os blocos, tanto possíveis quanto existentes, aumentando ainda mais a sobrecarga.

Assim, uma fórmula complexa que inclui um relacionamento ou uma função financeira cria um aumento de custos indiretos maior do que uma fórmula complexa que não inclui um relacionamento ou uma função financeira.

Dois exemplos ilustram a sobrecarga de fórmulas complexas:

  • Se o cubo tiver 90 blocos de dados existentes e 100 blocos de dados potenciais, a sobrecarga para fórmulas complexas não será grande, não mais do que 10 blocos extras para ler e possivelmente gravar valores.

  • Se o cubo tiver 10 blocos de dados existentes e 100 blocos de dados em potencial, a sobrecarga será até dez vezes maior do que seria sem a fórmula complexa (dependendo da estrutura do outline e de outros fatores), até 90 blocos extras para ler e possivelmente gravar.

Em todos os casos, quanto menor a proporção de blocos de dados existentes para possíveis blocos de dados, maior a sobrecarga de desempenho de cálculo e mais lento o desempenho.

Referências

Para obter informações sobre a relação entre o tamanho do bloco e o desempenho do cálculo, consulte Tamanho do Bloco e Densidade do Bloco.

Para obter informações sobre como as fórmulas afetam o desempenho do cálculo, consulte Cálculo de Baixo para Cima e de Cima para Baixo.

Funções Financeiras e de Faixa

Funções de Relação

Fórmulas em Dimensões Esparsas em Tópicos Grandes

Para otimizar o cálculo de fórmulas complexas em dimensões esparsas em grandes contornos do cubo de armazenamento em bloco do Essbase, você pode forçar um cálculo ascendente das fórmulas.

Você pode usar o comando de cálculo SET FRMLBOTTOMUP para otimizar o cálculo de fórmulas em dimensões esparsas em contornos de grandes bancos de dados. Com esse comando, você pode forçar um cálculo de baixo para cima em fórmulas de membros esparsos que, caso contrário, seriam calculados de cima para baixo. Consulte Cálculo de Cima para Baixo e de Cima para Baixo.

Forçar um cálculo ascendente em uma fórmula descendente permite o uso mais eficiente dos comandos CALC ALL e CALC DIM. Revise as discussões do comando de cálculo SET FRMLBOTTOMUP e a definição de configuração CALCOPTFRMLBOTTOMUP.

Valores Constantes Atribuídos a Membros em uma Dimensão Esparsa

Se você atribuir uma constante a um membro em uma dimensão esparsa, o Essbase criará automaticamente um bloco de dados para cada combinação de membros de dimensão esparsa que contiverem o membro. Para limitar a criação do bloco, você pode usar FIX.

Por exemplo, suponha que um membro ou uma fórmula de script de cálculo contenha a seguinte expressão:

California = 120;

Nesta fórmula, Califórnia é um membro em uma dimensão esparsa e 120 é um valor constante. O Essbase cria automaticamente todos os blocos de dados possíveis para a Califórnia e atribui o valor 120 a todas as células de dados. Muitos milhares de blocos de dados podem ser criados. Para melhorar o desempenho, crie uma fórmula que não crie valores desnecessários.

Para atribuir constantes em uma dimensão esparsa apenas às interseções que exigem um valor, use FIX de maneira semelhante ao seguinte exemplo:

FIX(Colas,Misc,Actual)
   California = 120;
ENDFIX

Neste exemplo, Colas é um membro da dimensão esparsa, Produto; Real é um membro da dimensão densa, Cenário; e Misc é um membro da dimensão densa, Medidas. O valor 120 é atribuído a qualquer interseção da Califórnia (na dimensão Mercado), Real (na dimensão Cenário), Diversos (na dimensão Medidas), Colas (na dimensão Produto) e qualquer membro na dimensão Ano, porque um membro específico do Ano não está especificado no script.

Como o Sample Basic inclui apenas duas dimensões esparsas, esse exemplo afeta apenas um bloco. Se existissem dimensões mais esparsas, o Essbase garantiria blocos de dados para todas as combinações das dimensões esparsas com Califórnia e Colas, criando blocos, se necessário. Nos novos blocos, o Essbase define valores de Medidas e Cenário (que não sejam aqueles atribuídos ao valor 120) como #MISSING.

Valores Não Constantes Atribuídos a Membros em uma Dimensão Esparsa

Para impedir temporariamente a criação indesejada de blocos quando você atribui valores não constantes a membros de uma dimensão esparsa, você pode usar o comando SET CREATEBLOCKONEQ OFF em um script de cálculo do Essbase.

Se você atribuir valores não constantes a membros de uma dimensão esparsa, os blocos serão criados com base na configuração Criar Blocos em Equações. A definição Criar Blocos em Equações é definida no nível do banco de dados, como uma propriedade do banco de dados. Consulte Valores Não Constantes.

Nos scripts de cálculo, você pode substituir temporariamente a configuração Criar blocos em equações. Considere os efeitos do seguinte cálculo quando West não tiver um valor e Create Blocks on Equations estiver ativado:

West = California + 120;

Blocos desnecessários podem ser criados para todas as interseções de membros esparsos com o Oeste, mesmo que o valor do bloco correspondente seja #MISSING para todos os filhos do Oeste. Especialmente em um banco de dados grande, a criação e o processamento de blocos desnecessários exigem tempo de processamento adicional.

Para controlar a criação de blocos quando você atribui valores não constantes a membros de uma dimensão esparsa, use o comando de cálculo SET CREATEBLOCKONEQ ON | OFF, conforme mostrado no seguinte script:

FIX (Colas);
   SET CREATEBLOCKONEQ OFF
   West = California + 120;
   SET CREATEBLOCKONEQ ON
   East = “New York” + 100;
ENDFIX

Como a configuração Criar bloco na equação está desativada no início do script, os blocos ocidentais são criados somente quando existem valores para os filhos de Oeste. Posteriormente, como a configuração Criar Bloco na Equação está ativada, todos os blocos para Leste são criados.

Observação:

Usar SET CREATEBLOCKONEQ afeta apenas a criação de blocos durante a execução do script de cálculo que contém este comando. Este comando não altera a definição geral do banco de dados para Criar Blocos em Equações.

Operadores Multidimensionais em Fórmulas de Membros

Ao criar fórmulas de membro de armazenamento em bloco do Essbase, tenha cuidado ao usar um operador multidimensional ( -> ) no lado esquerdo de uma equação ou em equações em dimensões densas.

Lado esquerdo de uma equação

Para obter um desempenho de script de cálculo mais rápido, use FIX no script de cálculo para qualificar o uso de uma fórmula em vez de uma fórmula que inclua um operador multidimensional à esquerda de uma equação.

Por exemplo, suponha que você queira aumentar os valores Jan -> Sales em Sample.Basic em 5%. Para melhorar o desempenho calculando apenas as combinações relevantes de membros, use o comando FIX:

FIX(Jan)
   Sales = Sales * .05;
ENDFIX

Com o comando FIX, o Essbase calcula a fórmula apenas para combinações de membros especificadas, neste exemplo, para combinações que incluem Jan.

Compare essa técnica com a abordagem mais lenta do operador multidimensional. Para o exemplo anterior, você coloca a seguinte fórmula no membro Vendas no outline do banco de dados:

Sales(Sales -> Jan = Sales -> Jan * .05;)

À medida que o Essbase percorre o banco de dados, ele calcula a fórmula para cada combinação de membros que inclui um membro da dimensão marcada como hora (Jan, Fev, Mar, etc.), embora apenas as combinações de janeiro precisem ser calculadas.

Consulte Usar o Comando FIX.

Equações em uma dimensão densa

Quando você usa um operador multidimensional em uma equação em uma dimensão densa, o Essbase não cria automaticamente os blocos necessários se ambas as condições se aplicarem:

  • Os valores resultantes são de uma dimensão densa.

  • O operando ou operandos são de uma dimensão esparsa.

Você pode usar as técnicas a seguir para criar os blocos e evitar o problema de desempenho.

  • Certifique-se de que os membros de resultados sejam de uma dimensão esparsa, não de uma dimensão densa. Neste exemplo, o membro de resultados Orçamento é de uma dimensão esparsa:

    FIX(Sales)
        Budget = Actual * 1.1;
    ENDFIX
    FIX(Expenses)
        Budget = Actual *  .95;
    ENDFIX
  • Use o comando de cálculo DATACOPY para criar e, em seguida, calcular os blocos necessários. Consulte Copiar Blocos Existentes com DATACOPY.

  • Use uma fórmula de membro que contenha as equações de membro denso:

    FIX(Sales, Expenses)
    Budget (Sales = Sales -> Actual * 1.1;
    Expenses = Expenses -> Actual * .95;)
    ENDFIX

Gerenciar Níveis de Execução da Fórmula

Você pode evitar o loop excessivo de fórmulas rescursivas do Essbase configurando CALCLIMITFORMULARECURSION.

As fórmulas em um outline de armazenamento em blocos podem ter dependências entre si, de forma que causem uma execução aninhada de fórmulas em um ou mais blocos. Tais fórmulas são chamadas de fórmulas recursivas. Às vezes, fórmulas recursivas resultam em loops grandes ou intermináveis que resultam em encerramento anormal do servidor.

Para evitar encerramento anormal, você pode usar a definição de configuração CALCLIMITFORMULARECURSION para interromper uma execução de fórmula que ultrapasse um número padrão de níveis de execução.