Cálculo Inteligente de Blocos de Dados

Saiba como cálculos densos e esparsos, cálculos simultâneos e cálculos de várias passagens são tratados pelo Cálculo Inteligente do Essbase.

O Essbase cria um bloco de dados para cada combinação exclusiva de membros de dimensão esparsa, desde que exista pelo menos um valor de dados para a combinação. Cada bloco de dados representa todos os valores de membro de dimensão densos para essa combinação exclusiva de membros de dimensão esparsa.

Por exemplo, no banco de dados Sample Basic, as dimensões Mercado e Produto são esparsas. Portanto, o bloco de dados New York -> Colas representa todos os valores de membro nas dimensões Ano, Medidas e Cenário para a combinação esparsa New York -> Colas.

As próximas seções supõem que você esteja familiarizado com os conceitos de nível superior, nível 0 e blocos de dados de entrada, conforme discutido em Armazenamento de Dados em Blocos de Dados.

Cálculo Inteligente de Dimensões Densas

Quando você calcula uma dimensão densa e não usa um comando FIX, o Essbase calcula pelo menos alguns dos valores de dados em cada bloco de dados no banco de dados. Em termos de status de Cálculo Inteligente, os blocos são marcados como limpos de um cálculo denso.

Por exemplo, o script de cálculo a seguir calcula a dimensão Ano, que é densa.

SET CLEARUPDATESTATUS AFTER;
CALC DIM(Year);

Como o Ano é denso, cada bloco do cubo inclui membros do Ano. Portanto, o Essbase calcula cada bloco.

Em seguida, como o script usa o comando SET CLEARUPDATESTATUS AFTER, o Essbase marca todos os blocos de dados no cubo como limpos.

Cálculo Inteligente de Dimensões Esparsas

Quando você calcula uma dimensão esparsa, o Essbase pode não precisar calcular cada bloco de dados no banco de dados. Saiba como o status de atualização limpo/sujo do Cálculo Inteligente pode afetar o status dos blocos de nível 0 e de nível superior e como evitar cálculos desnecessários.

Por exemplo, o seguinte script de cálculo é baseado no banco de dados de Amostra Básica:

SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);

Este script calcula a dimensão Produto, que é uma dimensão esparsa. Como o Produto é esparso, existe um bloco de dados para cada membro na dimensão Produto. Por exemplo, existe um bloco de dados para Nova York -> Colas e outro para Nova York -> 100-10.

Efeitos de Nível 0

Se você carregar dados no cubo no nível 0, os blocos afetados serão marcados como sujos. Se você calcular subsequentemente apenas uma dimensão esparsa, os blocos de nível 0 não serão calculados e permanecerão sujos. Quando você recalcula apenas uma dimensão ou dimensões esparsas, o Essbase recalcula blocos de dados de nível superior.

Observação:

O Essbase calcula blocos de dados de nível 0 se um membro de nível 0 correspondente tiver uma fórmula aplicada a ele.

O bloco de dados New York -> 100-10 é um bloco de nível 0; ele não representa um membro pai em qualquer dimensão esparsa (Mercado ou Produto). Os valores de dados para New York -> 100-10 são valores de entrada; eles são carregados no banco de dados. Portanto, o Essbase não precisa calcular esse bloco de dados. O Essbase também não marca o bloco de dados para Nova York -> 100-10 como limpo, mesmo que o script use o comando SET CLEARUPDATESTATUS AFTER.

Efeitos de Nível Superior

Quando o Essbase calcula uma dimensão esparsa, ele recalcula um bloco de dados de nível superior se o bloco for dependente de um ou mais blocos filhos sujos.

Colas é um membro de nível pai na dimensão Produto. O Essbase deve calcular valores para Colas para que o Essbase calcule esse bloco de dados. Como o script usa o comando SET CLEARUPDATESTATUS AFTER, o Essbase marca o bloco de dados como limpo.

Cálculo Desnecessário

Você pode evitar o cálculo desnecessário calculando pelo menos uma dimensão densa. Quando você calcula uma dimensão densa sem usar o comando FIX, os valores de dados são calculados em cada bloco, incluindo os blocos de nível 0. Assim, os blocos de nível 0 são marcados como limpos.

Cálculo Inteligente e Cálculos Concorrentes

Tome precauções com cálculos simultâneos quando o Cálculo Inteligente estiver ativado. Se vários cálculos tentarem calcular os mesmos blocos, o Essbase não poderá recalcular os blocos de dados, porque eles já estão marcados como limpos.

No exemplo a seguir, com base no banco de dados Básico de Amostra, Real e Orçamento são membros da densa dimensão Cenário. Como o Cenário é denso, cada bloco no banco de dados contém os valores Real e Orçamento. Se o Usuário 1 executar o seguinte script de cálculo, o Essbase calculará os valores Reais de todos os blocos de dados que representam Nova York.

SET CLEARUPDATESTATUS AFTER;
FIX("New York", Actual)
   CALC DIM(Product, Year);
ENDFIX

O Essbase marca os blocos de dados calculados como limpos, embora nem todos os valores em cada bloco calculado tenham sido calculados. Por exemplo, os valores de Orçamento não foram calculados.

Se o Usuário 2 executar o seguinte script de cálculo para calcular os valores de Orçamento para Nova York, o Essbase não recalculará os blocos especificados, porque eles já estão marcados como limpos. Os resultados do cálculo do Orçamento não estão corretos.

SET CLEARUPDATESTATUS AFTER;
FIX("New York", Budget)
   CALC DIM(Product, Year);
ENDFIX

Uma maneira de resolver esse problema é tornar a dimensão Scenario esparsa. Em seguida, os valores Real e Orçamento estão em blocos diferentes; por exemplo, New York -> Colas -> Real e New York -> Colas -> Orçamento. Nesse caso, o segundo script de cálculo calcula corretamente o bloco Orçamento.

A execução de cálculos simultâneos pode exigir um aumento no cache de dados.

Cálculo Inteligente e Cálculos de Várias Aprovações

Os scripts de cálculo do Essbase que exigem várias passagens podem ser incompatíveis com o uso do Cálculo Inteligente em algumas situações.

Quando o Essbase calcula blocos de dados em uma primeira passagem de cálculo por um banco de dados, ele marca os blocos de dados como limpos. Se você tentar calcular os mesmos blocos de dados em uma passagem subsequente com o Cálculo Inteligente ativado, o Essbase não recalculará os blocos de dados, porque eles já estão marcados como limpos.

Sempre que possível, o Essbase calcula um banco de dados em uma passagem de cálculo pelo banco de dados.

Quando você usa um script de cálculo para calcular um banco de dados, o número de transações de cálculo que o Essbase executa depende do script de cálculo.

Por exemplo, suponha que o Essbase calcule blocos em uma primeira passagem de cálculo e os marque como limpos. Se você tentar calcular os mesmos blocos em uma passagem subsequente enquanto o Cálculo Inteligente estiver ativado, o Essbase não recalculará os blocos de dados, porque eles já estão marcados como limpos.

Exemplos e Soluções para Cálculos de Várias Aprovações

Esses exemplos descrevem situações que produzem resultados de cálculo incorretos do Essbase, com soluções para obter resultados corretos. Eles são baseados no banco de dados Básico de Amostra e assumem que o Cálculo Inteligente está ativado.

Exemplo 1: Cálculo Inteligente e Dois Passos

O seguinte script de cálculo faz um cálculo padrão e, em seguida, um cálculo de duas etapas:

CALC ALL;
CALC TWOPASS;

Erro

O Essbase calcula os blocos de dados sujos no banco de dados e marca todos os blocos de dados como limpos. Em seguida, o Essbase precisa recalcular os membros marcados como de duas passagens na dimensão marcada como contas. No entanto, o Essbase não recalcula os blocos de dados especificados porque eles já estão marcados como limpos. Os resultados do cálculo não estão corretos.

Solução

Você pode calcular os resultados corretos desativando o Cálculo Inteligente para o cálculo de duas passagens.

Exemplo 2: SET CLEARUPDATESTATUS e FIX

Este script de cálculo calcula valores de dados para Nova York. O cálculo é baseado na dimensão Produto:

SET CLEARUPDATESTATUS AFTER;
FIX("New York")
   CALC DIM(Product);
ENDFIX
CALC TWOPASS;

Erro

O Essbase executa os seguintes processos:

  1. O Essbase percorre o banco de dados calculando os blocos de dados sujos que representam Nova York. O cálculo é baseado na dimensão Produto. Assim, o Essbase calcula somente os blocos que representam um membro pai na dimensão Produto (por exemplo, New York -> Colas, New York -> Root Beer e New York -> Fruit Soda) e, em seguida, calcula apenas as agregações e fórmulas para a dimensão Produto.

  2. Como o comando SET CLEARUPDATESTATUS AFTER é usado, o Essbase marca os blocos de dados calculados como limpos, embora nem todos os valores de dados em cada bloco calculado tenham sido calculados.

  3. O Essbase deve recalcular os membros marcados como de dois passos na dimensão marcada como contas; no entanto, alguns desses blocos de dados já estão marcados como limpos do cálculo na etapa anterior. O Essbase não recalcula os blocos de dados marcados como limpos. Os resultados do cálculo não estão corretos.

Solução

Você pode calcular os resultados corretos desativando o Cálculo Inteligente para o cálculo de duas passagens.

Exemplo 3: SET CLEARUPDATESTATUS e Dois Comandos CALC DIM

Este script de cálculo baseia o cálculo do banco de dados nas dimensões Produto e Ano. Como dois comandos CALC DIM são usados, o Essbase faz dois cálculos que passam pelo banco de dados:

SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);
CALC DIM(Year);

Erro

O Essbase executa os seguintes processos:

  1. O Essbase percorre o banco de dados calculando os blocos de dados sujos. O cálculo é baseado na dimensão Produto, como no Exemplo 2.

  2. Como o comando SET CLEARUPDATESTATUS AFTER é usado, o Essbase marca os blocos de dados calculados como limpos, embora nem todos os valores de dados em cada bloco calculado tenham sido calculados.

  3. O Essbase deve recalcular os blocos de dados. O recálculo é baseado na dimensão Ano. No entanto, como resultado do cálculo na etapa anterior, alguns blocos de dados já estão marcados como limpos e o Essbase não os recalcula. Os resultados do cálculo não estão corretos.

Solução

É possível calcular os resultados corretos usando um comando CALC DIM para calcular as dimensões Produto e Ano. O Essbase calcula as duas dimensões em uma passagem de cálculo pelo banco de dados.

O script de cálculo a seguir calcula os resultados corretos:

SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product, Year);

Observação:

Quando você calcula várias dimensões em um comando CALC DIM, o Essbase calcula as dimensões na ordem de cálculo padrão e não na ordem em que você as lista no comando. Consulte Ordem de Cálculo de Membro.

Exemplo 4: Dois Scripts de Cálculo

Este exemplo calcula valores de dados para Nova York, mas calcula com base em duas dimensões usando dois scripts de cálculo. O primeiro script de cálculo calcula a dimensão Produto:

SET CLEARUPDATESTATUS AFTER;
FIX("New York")
   CALC DIM(Product);
ENDFIX

O Essbase calcula os blocos de dados que incluem Nova York. Como o cálculo é baseado na dimensão Produto, o Essbase calcula somente os blocos sujos que incluem um membro pai na dimensão Produto (por exemplo, Nova York -> Colas, Nova York -> Cerveja Raiz e Nova York -> Soda de Fruta) e calcula apenas as agregações e fórmulas para a dimensão Produto.

Por causa do comando CLEARUPDATESTATUS AFTER, o Essbase marca os blocos de dados calculados como limpos, embora nem todos os valores de dados em cada bloco calculado tenham sido calculados.

O segundo script de cálculo calcula a dimensão Ano:

SET CLEARUPDATESTATUS AFTER;
FIX("New York")
   CALC DIM(Year);
ENDFIX

O Essbase calcula os blocos de dados que representam Nova York. Como o cálculo é baseado na dimensão Ano, que é uma dimensão densa, o Essbase deve calcular todos os blocos de dados que incluem Nova York, embora dentro de cada bloco o Essbase calcule apenas as agregações e fórmulas para a dimensão Ano.

Erro

Como resultado do primeiro cálculo, alguns blocos de dados para Nova York já estão marcados como limpos. O Essbase não recalcula esses blocos de dados com o segundo script de cálculo porque os blocos de dados estão marcados como limpos. Os resultados do cálculo não estão corretos.

Solução

Você pode calcular os resultados corretos informando ao Essbase para não marcar os blocos de dados calculados como limpos. O script de cálculo a seguir calcula os resultados corretos:

SET CLEARUPDATESTATUS OFF;
FIX("New York")
   CALC DIM(Product);
ENDFIX
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
   CALC DIM(Year);
ENDFIX

Com o comando SET CLEARUPDATESTATUS OFF, o Essbase calcula blocos de dados sujos, mas não os marca como limpos, ao contrário do comando SET CLEARUPDATESTATUS AFTER.

Essa solução pressupõe que os blocos de dados não sejam marcados como limpos de um cálculo parcial anterior do banco de dados.

Você pode garantir que todos os blocos de dados sejam calculados, independentemente de seu status, desativando o Cálculo Inteligente. O seguinte script de cálculo calcula todos os blocos de dados especificados, independentemente de seu status limpo ou sujo:

SET UPDATECALC OFF;
FIX("New York")
   CALC DIM(Year, Product);
ENDFIX

Como você não usou o comando SET CLEARUPDATESTATUS AFTER, o Essbase não marca blocos de dados calculados como limpos.