Cálculo inteligente de bloques de datos
Descubra cómo Intelligent Calculation de Essbase maneja los cálculos densos y dispersos, los cálculos simultáneos y los cálculos de varias transferencias.
Essbase crea un bloque de datos para cada combinación única de miembros de dimensión dispersa, siempre que exista al menos un valor de datos para la combinación. Cada bloque de datos representa todos los valores de miembros de dimensión densos para esa combinación única de miembros de dimensión dispersos.
Por ejemplo, en la base de datos Sample Basic, las dimensiones Market y Product son dispersas. Por lo tanto, el bloque de datos Nueva York -> Colas representa todos los valores de miembro en las dimensiones Año, Medidas y Escenario para la combinación dispersa Nueva York -> Colas.
En las siguientes secciones se asume que está familiarizado con los conceptos de nivel superior, nivel 0 y bloques de datos de entrada, como se describe en Almacenamiento de datos en bloques de datos.
Cálculo inteligente de dimensiones densas
Cuando calcula una dimensión densa y no utiliza un comando FIX, Essbase calcula al menos algunos de los valores de datos en cada bloque de datos de la base de datos. En términos de estado de Cálculo inteligente, los bloques se marcan como limpios a partir de un cálculo denso.
Por ejemplo, el siguiente script de cálculo calcula la dimensión Year, que es densa.
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Year);Debido a que Year es denso, cada bloque del cubo incluye miembros de Year. Por lo tanto, Essbase calcula cada bloque.
A continuación, dado que el script utiliza el comando SET CLEARUPDATESTATUS AFTER, Essbase marca todos los bloques de datos del cubo como limpios.
Cálculo inteligente de dimensiones dispersas
Al calcular una dimensión ligera, puede que Essbase no necesite calcular todos los bloques de datos de la base de datos. Descubra cómo el estado de actualización limpia/sucia del cálculo inteligente puede afectar al estado de los bloques de nivel 0 y superior y cómo evitar cálculos innecesarios.
Por ejemplo, el siguiente script de cálculo se basa en la base de datos básica de ejemplo:
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);Este script calcula la dimensión Product, que es una dimensión ligera. Puesto que Product es disperso, existe un bloque de datos para cada miembro de la dimensión Product. Por ejemplo, existe un bloque de datos para Nueva York -> Colas y otro para Nueva York -> 100-10.
Efectos de nivel 0
Si carga datos en el cubo en el nivel 0, los bloques afectados se marcan como sucios. Si posteriormente calcula sólo una dimensión ligera, los bloques de nivel 0 no se calculan y permanecen sucios. Al volver a calcular sólo una dimensión o dimensiones dispersas, Essbase vuelve a calcular los bloques de datos de nivel superior.
Note:
Essbase calcula los bloques de datos de nivel 0 si un miembro de nivel 0 ligero correspondiente tiene una fórmula aplicada.
El bloque de datos Nueva York -> 100-10 es un bloque de nivel 0; no representa un miembro principal en ninguna de las dimensiones dispersas (Market o Product). Los valores de datos para Nueva York -> 100-10 son valores de entrada; se cargan en la base de datos. Por lo tanto, Essbase no necesita calcular este bloque de datos. Essbase tampoco marca el bloque de datos para Nueva York -> 100-10 como limpio, aunque el script utilice el comando SET CLEARUPDATESTATUS AFTER.
Efectos de nivel superior
Cuando Essbase calcula una dimensión ligera, vuelve a calcular un bloque de datos de nivel superior si el bloque depende de uno o más bloques secundarios sucios.
Colas es un miembro de nivel principal en la dimensión Product. Essbase debe calcular los valores para Colas, por lo que Essbase calcula este bloque de datos. Dado que el script utiliza el comando SET CLEARUPDATESTATUS AFTER, Essbase marca el bloque de datos como limpio.
Cálculo innecesario
Puede evitar cálculos innecesarios calculando al menos una dimensión densa. Cuando se calcula una dimensión densa sin utilizar el comando FIX, los valores de datos se calculan en cada bloque, incluidos los bloques de nivel 0. Por lo tanto, los bloques de nivel 0 se marcan como limpios.
Cálculo inteligente y cálculos simultáneos
Tome precauciones con cálculos simultáneos cuando la opción Cálculo inteligente esté activada. Si varios cálculos intentan calcular los mismos bloques, es posible que Essbase no vuelva a calcular los bloques de datos porque ya están marcados como limpios.
En el siguiente ejemplo, según la base de datos Sample Basic, Actual y Budget son miembros de la dimensión Scenario densa. Puesto que Scenario es denso, cada bloque de la base de datos contiene los valores Actual y Budget. Si el usuario 1 ejecuta el siguiente script de cálculo, Essbase calcula los valores reales para todos los bloques de datos que representan Nueva York.
SET CLEARUPDATESTATUS AFTER;
FIX("New York", Actual)
CALC DIM(Product, Year);
ENDFIXEssbase marca los bloques de datos calculados como limpios, aunque no se han calculado todos los valores de cada bloque calculado. Por ejemplo, los valores de Presupuesto no se han calculado.
Si el Usuario 2 ejecuta el siguiente script de cálculo para calcular los valores de Presupuesto para Nueva York, Essbase no vuelve a calcular los bloques especificados, porque ya están marcados como limpios. Los resultados del cálculo para Presupuesto no son correctos.
SET CLEARUPDATESTATUS AFTER;
FIX("New York", Budget)
CALC DIM(Product, Year);
ENDFIXUna forma de resolver este problema es hacer que la dimensión Scenario esté dispersa. A continuación, los valores Real y Presupuesto se encuentran en bloques diferentes; por ejemplo, Nueva York -> Colas -> Real y Nueva York -> Colas -> Presupuesto. En este caso, el segundo script de cálculo calcula correctamente el bloque de presupuesto.
La ejecución de cálculos simultáneos puede requerir un aumento de la caché de datos.
Cálculo inteligente y cálculos de varias transferencias
Los scripts de cálculo de Essbase que requieren varias transferencias pueden ser incompatibles con el uso de Cálculo inteligente en algunas situaciones.
Cuando Essbase calcula bloques de datos en una primera transferencia de cálculo a través de una base de datos, marca los bloques de datos como limpios. Si intenta calcular los mismos bloques de datos en una transferencia posterior con Cálculo inteligente activado, Essbase no vuelve a calcular los bloques de datos, porque ya están marcados como limpios.
Siempre que sea posible, Essbase calcula una base de datos en una transferencia de cálculo a través de la base de datos.
Cuando se utiliza un script de cálculo para calcular una base de datos, el número de transferencias de cálculo que realiza Essbase depende del script de cálculo.
Por ejemplo, supongamos que Essbase calcula los bloques en una primera transferencia de cálculo y los marca como limpios. Si intenta calcular los mismos bloques en una pasada posterior mientras Intelligent Calculation está activado, Essbase no vuelve a calcular los bloques de datos, ya que ya están marcados como limpios.
Ejemplos y soluciones para cálculos de varias transferencias
En estos ejemplos se describen situaciones que producen resultados de cálculo de Essbase incorrectos, con soluciones para obtener resultados correctos. Se basan en la base de datos básica de ejemplo y suponen que el cálculo inteligente está activado.
Ejemplo 1: cálculo inteligente y dos pasos
El siguiente script de cálculo realiza un cálculo predeterminado y, a continuación, un cálculo de dos pasos:
CALC ALL;
CALC TWOPASS;Error
Essbase calcula los bloques de datos sucios de la base de datos y marca todos los bloques de datos como limpios. A continuación, Essbase debe volver a calcular los miembros etiquetados como dos transferencias en la dimensión etiquetada como cuentas. Sin embargo, Essbase no vuelve a calcular los bloques de datos especificados porque ya están marcados como limpios. Los resultados del cálculo no son correctos.
Solución
Para calcular los resultados correctos, desactive el cálculo inteligente para el cálculo de dos pasos.
Ejemplo 2: SET CLEARUPDATESTATUS y FIX
Este script de cálculo calcula los valores de datos para Nueva York. El cálculo se basa en la dimensión Product:
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Product);
ENDFIX
CALC TWOPASS;Error
Essbase realiza los siguientes procesos:
-
Essbase recorre la base de datos calculando los bloques de datos sucios que representan Nueva York. El cálculo se basa en la dimensión Product. Por lo tanto, Essbase calcula sólo los bloques que representan un miembro principal en la dimensión Product (por ejemplo, Nueva York -> Colas, Nueva York -> Root Beer y Nueva York -> Fruit Soda) y, a continuación, sólo calcula las agregaciones y fórmulas para la dimensión Product.
-
Debido a que se utiliza el comando SET CLEARUPDATESTATUS AFTER, Essbase marca los bloques de datos calculados como limpios, aunque no se han calculado todos los valores de datos de cada bloque calculado.
-
Essbase debe volver a calcular los miembros etiquetados como dos pasadas en la dimensión etiquetada como cuentas; sin embargo, algunos de estos bloques de datos ya están marcados como limpios del cálculo en el paso anterior. Essbase no vuelve a calcular los bloques de datos que están marcados como limpios. Los resultados del cálculo no son correctos.
Solución
Para calcular los resultados correctos, desactive el cálculo inteligente para el cálculo de dos pasos.
Ejemplo 3: SET CLEARUPDATESTATUS y dos comandos CALC DIM
Este script de cálculo basa el cálculo de la base de datos en las dimensiones Product y Year. Debido a que se utilizan dos comandos CALC DIM, Essbase realiza dos transferencias de cálculo a través de la base de datos:
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);
CALC DIM(Year);Error
Essbase realiza los siguientes procesos:
-
Essbase recorre la base de datos calculando los bloques de datos desfasados. El cálculo se basa en la dimensión Product, como en el ejemplo 2.
-
Debido a que se utiliza el comando SET CLEARUPDATESTATUS AFTER, Essbase marca los bloques de datos calculados como limpios, aunque no se han calculado todos los valores de datos de cada bloque calculado.
-
Essbase debe volver a calcular los bloques de datos. El recálculo se basa en la dimensión Year. Sin embargo, como resultado del cálculo del paso anterior, algunos bloques de datos ya están marcados como limpios y Essbase no los vuelve a calcular. Los resultados del cálculo no son correctos.
Solución
Puede calcular los resultados correctos mediante un comando CALC DIM para calcular las dimensiones Product y Year. Essbase calcula ambas dimensiones en una transferencia de cálculo a través de la base de datos.
El siguiente script de cálculo calcula los resultados correctos:
SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product, Year);Note:
Cuando se calculan varias dimensiones en un comando CALC DIM, Essbase calcula las dimensiones en el orden de cálculo predeterminado y no en el orden en que se muestran en el comando. Consulte Orden de cálculo de miembros.
Ejemplo 4: dos scripts de cálculo
En este ejemplo se calculan los valores de datos para Nueva York, pero se basan en dos dimensiones mediante dos scripts de cálculo. El primer script de cálculo calcula la dimensión Product:
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Product);
ENDFIXEssbase calcula los bloques de datos que incluyen Nueva York. Debido a que el cálculo se basa en la dimensión Product, Essbase calcula solo los bloques sucios que incluyen un miembro principal en la dimensión Product (por ejemplo, Nueva York -> Colas, Nueva York -> Root Beer y Nueva York -> Fruit Soda) y calcula solo las agregaciones y fórmulas para la dimensión Product.
Debido al comando CLEARUPDATESTATUS AFTER, Essbase marca los bloques de datos calculados como limpios, aunque no se han calculado todos los valores de datos de cada bloque calculado.
El segundo script de cálculo calcula la dimensión Year:
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Year);
ENDFIXEssbase calcula los bloques de datos que representan Nueva York. Debido a que el cálculo se basa en la dimensión Year, que es una dimensión densa, Essbase debe calcular todos los bloques de datos que incluyen Nueva York, aunque dentro de cada bloque Essbase sólo calcula las agregaciones y fórmulas para la dimensión Year.
Error
Como resultado del primer cálculo, algunos bloques de datos para Nueva York ya están marcados como limpios. Essbase no vuelve a calcular estos bloques de datos con el segundo script de cálculo porque los bloques de datos están marcados como limpios. Los resultados del cálculo no son correctos.
Solución
Puede calcular los resultados correctos indicando a Essbase que no marque los bloques de datos calculados como limpios. El siguiente script de cálculo calcula los resultados correctos:
SET CLEARUPDATESTATUS OFF;
FIX("New York")
CALC DIM(Product);
ENDFIX
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
CALC DIM(Year);
ENDFIXCon el comando SET CLEARUPDATESTATUS OFF, Essbase calcula los bloques de datos sucios, pero no los marca como limpios, a diferencia del comando SET CLEARUPDATESTATUS AFTER.
Esta solución supone que los bloques de datos no están marcados como limpios a partir de un cálculo parcial anterior de la base de datos.
Puede asegurarse de que todos los bloques de datos se calculen, independientemente de su estado, desactivando el cálculo inteligente. El siguiente script de cálculo calcula todos los bloques de datos especificados, independientemente de su estado limpio o sucio:
SET UPDATECALC OFF;
FIX("New York")
CALC DIM(Year, Product);
ENDFIXDebido a que no ha utilizado el comando SET CLEARUPDATESTATUS AFTER, Essbase no marca los bloques de datos calculados como limpios.