Optimización de fórmulas de Essbase

Para optimizar el procesamiento de fórmulas de almacenamiento de bloques de Essbase para cálculos y consultas, puede evitar las fórmulas mediante la consolidación en lugar del cálculo, utilizar fórmulas más sencillas cuando sea posible, realizar pasos para ajustar el rendimiento de fórmulas complejas o cambiar al modo híbrido.

Puede lograr mejoras significativas en el rendimiento del cálculo mediante el uso cuidadoso de fórmulas en el esquema del cubo. Por ejemplo, puede lograr un rendimiento de cálculo mejorado colocando fórmulas en los miembros del esquema de la base de datos en lugar de colocar las fórmulas en un script de cálculo. Consulte Desarrollo de fórmulas para cubos de almacenamiento de bloques.

En las siguientes secciones se describe cómo gestionar problemas de fórmulas que afectan al rendimiento del cálculo en cubos de almacenamiento de bloques que no son de modo híbrido.

Para la optimización del modo híbrido, consulte Modo híbrido para el procesamiento analítico rápido.

Consolidación de miembros de Essbase

El uso del esquema de cubo para acumular valores de datos de Essbase es más eficaz que el uso de una fórmula para calcularlos.

Por ejemplo, la consolidación de los miembros 100-10, 100-20 y 100-30 en el miembro 100, como se muestra a continuación, es más eficaz que la aplicación de la siguiente fórmula al miembro 100:

100-10 + 100-20 + 100-30

Figura 34-1 Ejemplo de consolidación


En esta imagen se muestra un esquema en el que los miembros 100-10, 100-20 y 100-30 se consolidan en el miembro 100.

Consulte Ejemplos de consolidación de miembros.

Fórmulas de miembros simples de Essbase

Si una fórmula de Essbase es simple, afecta al rendimiento del cálculo del almacenamiento de bloques menos que las fórmulas complejas. El tamaño del bloque también es un factor en el rendimiento. Las fórmulas más simples son aquellas que no utilizan referencias multidimensionales, funciones de rango, funciones financieras o funciones de relación.

Si utiliza una fórmula simple y el tamaño de bloque no es inusualmente grande, puede colocar la fórmula en un miembro de una dimensión ligera o densa sin afectar significativamente al rendimiento del cálculo. Cuanto mayor sea el tamaño del bloque, más impacto tendrán las fórmulas simples en el rendimiento del cálculo.

Una fórmula simple es, por ejemplo, un ratio o un porcentaje y cumple los siguientes requisitos:

  • No hace referencia a valores de una dimensión diferente (dispersa o densa). Por ejemplo, una fórmula simple no puede hacer referencia a Producto -> Ene.

  • No utiliza funciones de rango. Por ejemplo, una fórmula simple no puede utilizar @AVGRANGE, @MAXRANGE, @MINRANGE o @SUMRANGE.

  • No utiliza relaciones ni funciones financieras. Por ejemplo, una fórmula simple no puede utilizar @ANCESTVAL, @NEXT, @PARENTVAL, @SHIFT, @ACCUM o @GROWTH.

Referencias

Para obtener información sobre la relación entre el tamaño del bloque y el rendimiento del cálculo, consulte Tamaño del bloque y densidad del bloque.

Para obtener información sobre cómo afectan las fórmulas al rendimiento del cálculo, consulte Cálculo ascendente y descendente.

Rango y funciones financieras

Funciones de Relación

Operador de dimensiones cruzadas

Fórmulas de miembros complejas de Essbase

Si una fórmula de Essbase es compleja, afecta al rendimiento del cálculo del almacenamiento de bloques más que a las fórmulas más simples. Para optimizar fórmulas complejas, aplíquelas en dimensiones densas, aumente la densidad y utilice FIX para reducir el alcance.

Si utiliza una fórmula compleja, puede mejorar el rendimiento aplicando las siguientes directrices:

  • Si es posible, aplique la fórmula a un miembro en una dimensión densa. Si no es posible, determine si puede cambiar los cálculos descendentes a descendentes (consulte Fórmulas en dimensiones dispersas en esquemas grandes).

  • Utilice el comando FIX en un script de cálculo para calcular solo los bloques de datos necesarios.

  • Aumente la densidad de la base de datos (ratio de los bloques de datos existentes a los posibles bloques de datos).

Una fórmula compleja es aquella que cumple cualquiera de los siguientes requisitos:

  • Hace referencia a un miembro o miembros de una dimensión diferente (dispersa o densa); por ejemplo, Producto -> Ene.

  • Usa una o más funciones de rango, por ejemplo, @AVGRANGE, @MAXRANGE, @MINRANGE o @SUMRANGE.

  • Usa funciones de relación o financieras, por ejemplo, @ANCESTVAL, @NEXT, @PARENTVAL, @SHIFT, @ACCUM o @GROWTH.

Cuando se aplica a miembros de dimensión dispersos, las fórmulas complejas crean más sobrecarga de cálculo y, por lo tanto, un rendimiento lento. Este problema se produce porque la presencia de fórmulas complejas requiere que Essbase realice cálculos en todos los bloques de datos posibles, así como en todos los bloques de datos existentes relacionados con el miembro con la fórmula compleja. La presencia de una relación o función financiera en un miembro de dimensión dispersa hace que Essbase realice cálculos en todos los bloques, tanto posibles como existentes, lo que aumenta aún más la sobrecarga.

Por lo tanto, una fórmula compleja que incluye una relación o función financiera crea un aumento de gastos generales mayor que una fórmula compleja que no incluye una relación o función financiera.

Dos ejemplos ilustran la sobrecarga de fórmulas complejas:

  • Si el cubo tiene 90 bloques de datos existentes y 100 bloques de datos potenciales, la sobrecarga de las fórmulas complejas no es grande, ni más de 10 bloques adicionales en los que leer y posiblemente escribir valores.

  • Si el cubo tiene 10 bloques de datos existentes y 100 bloques de datos potenciales, la sobrecarga es hasta diez veces mayor que la que sería sin la fórmula compleja (en función de la estructura del esquema y otros factores), hasta 90 bloques adicionales para leer y posiblemente escribir.

En todos los casos, cuanto menor sea el ratio entre los bloques de datos existentes y los posibles bloques de datos, mayor será la sobrecarga de rendimiento de cálculo y menor será el rendimiento.

Referencias

Para obtener información sobre la relación entre el tamaño del bloque y el rendimiento del cálculo, consulte Tamaño del bloque y densidad del bloque.

Para obtener información sobre cómo afectan las fórmulas al rendimiento del cálculo, consulte Cálculo ascendente y descendente.

Rango y funciones financieras

Funciones de Relación

Fórmulas en dimensiones dispersas en grandes esquemas

Para optimizar el cálculo de fórmulas complejas en dimensiones dispersas en grandes esquemas de cubos de almacenamiento de bloques de Essbase, puede forzar un cálculo ascendente de las fórmulas.

Puede utilizar el comando de cálculo SET FRMLBOTTOMUP para optimizar el cálculo de fórmulas en dimensiones dispersas en grandes esquemas de base de datos. Con este comando, puede forzar un cálculo ascendente en fórmulas de miembros dispersos que, de lo contrario, se calcularían de arriba abajo. Consulte Cálculo ascendente y descendente.

Forzar un cálculo ascendente en una fórmula descendente permite un uso más eficiente de los comandos CALC ALL y CALC DIM. Revise las discusiones del comando de cálculo SET FRMLBOTTOMUP y el valor de configuración CALCOPTFRMLBOTTOMUP.

Valores constantes asignados a miembros en una dimensión dispersa

Si asigna una constante a un miembro en una dimensión ligera, Essbase crea automáticamente un bloque de datos para cada combinación de miembros de dimensión ligera que contenga el miembro. Para limitar la creación de bloques, puede utilizar FIX.

Por ejemplo, supongamos que un miembro o una fórmula de script de cálculo contiene la siguiente expresión:

California = 120;

En esta fórmula, California es un miembro en una dimensión dispersa y 120 es un valor constante. Essbase crea automáticamente todos los bloques de datos posibles para California y asigna el valor 120 a todas las celdas de datos. Se pueden crear muchos miles de bloques de datos. Para mejorar el rendimiento, cree una fórmula que no cree valores innecesarios.

Para asignar constantes en una dimensión dispersa solo a aquellas intersecciones que requieren un valor, utilice FIX de una manera similar al siguiente ejemplo:

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

En este ejemplo, Colas es un miembro de la dimensión ligera, Product; Actual es un miembro de la dimensión densa, Scenario; y Misc es un miembro de la dimensión densa, Measures. El valor 120 se asigna a cualquier intersección de California (en la dimensión Market), Actual (en la dimensión Scenario), Varios (en la dimensión Measures), Colas (en la dimensión Product) y cualquier miembro de la dimensión Year, porque no se ha especificado un miembro específico de Year en el script.

Debido a que Sample Basic incluye solo dos dimensiones dispersas, este ejemplo solo afecta a un bloque. Si existieran más dimensiones dispersas, Essbase garantizaría bloques de datos para todas las combinaciones de las dimensiones dispersas con California y Colas, creando bloques si es necesario. Dentro de los nuevos bloques, Essbase establece los valores de Medidas y Escenario (distintos de los asignados al valor 120) en #MISSING.

Valores no constantes asignados a miembros en una dimensión dispersa

Para evitar temporalmente la creación no deseada de bloques cuando asigna valores no constantes a miembros de una dimensión dispersa, puede utilizar el comando SET CREATEBLOCKONEQ OFF en un script de cálculo de Essbase.

Si asigna valores no constantes a miembros de una dimensión dispersa, los bloques se crean en función de la configuración Crear bloques en ecuaciones. El valor Crear bloques en ecuaciones se define en el nivel de base de datos, como una propiedad de base de datos. Consulte Valores no constantes.

En los scripts de cálculo, puede sustituir temporalmente el valor Crear bloques en ecuaciones. Tenga en cuenta los efectos del siguiente cálculo cuando West no tiene un valor y la opción Crear bloques en ecuaciones está activada:

West = California + 120;

Se pueden crear bloques innecesarios para todas las intersecciones de miembros dispersos con West, incluso si el valor de bloque correspondiente es #MISSING para todos los secundarios de West. Especialmente en una base de datos grande, la creación y el procesamiento de bloques innecesarios requieren tiempo de procesamiento adicional.

Para controlar la creación de bloques al asignar valores no constantes a miembros de una dimensión dispersa, utilice el comando de cálculo SET CREATEBLOCKONEQ ON | OFF, como se muestra en el siguiente script:

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

Debido a que la configuración Crear bloque en ecuación está desactivada al principio del script, los bloques West se crean solo cuando existen valores para los secundarios de West. Más tarde, debido a que la configuración Crear bloque en ecuación está activada, se crean todos los bloques para East.

Note:

El uso de SET CREATEBLOCKONEQ sólo afecta a la creación de bloques durante la ejecución del script de cálculo que contiene este comando. Este comando no cambia la configuración general de la base de datos para Crear bloques en ecuaciones.

Operadores de dimensiones cruzadas en fórmulas de miembro

Al diseñar fórmulas de miembros de almacenamiento de bloques de Essbase, tenga cuidado al utilizar un operador multidimensional ( -> ) en la parte izquierda de una ecuación o en ecuaciones de dimensiones densas.

Lado izquierdo de una ecuación

Para un rendimiento de script de cálculo más rápido, utilice FIX en el script de cálculo para cualificar el uso de una fórmula en lugar de una fórmula que incluya un operador multidimensional a la izquierda de una ecuación.

Por ejemplo, supongamos que desea aumentar los valores de Jan -> Sales en Sample.Basic en un 5 %. Para mejorar el rendimiento calculando solo las combinaciones relevantes de miembros, utilice el comando FIX:

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

Con el comando FIX, Essbase calcula la fórmula solo para las combinaciones de miembros especificadas, en este ejemplo, para las combinaciones que incluyen Jan.

Compare esta técnica con el uso del enfoque de operador multidimensional más lento. Para el ejemplo anterior, coloque la siguiente fórmula en el miembro Sales del esquema de la base de datos:

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

A medida que Essbase recorre la base de datos, calcula la fórmula para cada combinación de miembros que incluye un miembro de la dimensión etiquetada como tiempo (Ene, Feb, Mar, etc.), aunque solo se deben calcular las combinaciones de enero.

Consulte Use the FIX Command.

Ecuaciones en una dimensión densa

Cuando se utiliza un operador multidimensional en una ecuación de una dimensión densa, Essbase no crea automáticamente los bloques necesarios si se aplican las dos condiciones siguientes:

  • Los valores resultantes provienen de una dimensión densa.

  • El operando o los operandos son de una dimensión dispersa.

Puede utilizar las siguientes técnicas para crear los bloques y evitar el problema de rendimiento.

  • Asegúrese de que los miembros de resultados son de una dimensión dispersa, no de una dimensión densa. En este ejemplo, el miembro de resultados Budget es de una dimensión ligera:

    FIX(Sales)
        Budget = Actual * 1.1;
    ENDFIX
    FIX(Expenses)
        Budget = Actual *  .95;
    ENDFIX
  • Utilice el comando de cálculo DATACOPY para crear y, a continuación, calcular los bloques necesarios. Consulte Copia de bloques existentes con DATACOPY.

  • Utilice una fórmula de miembro que contenga las ecuaciones de miembro densas:

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

Gestionar niveles de ejecución de fórmula

Puede evitar un bucle excesivo de fórmulas de Essbase rescursivas mediante la configuración de CALCLIMITFORMULARECURSION.

Las fórmulas de un esquema de almacenamiento de bloques pueden tener dependencias entre sí, de modo que provocan una ejecución anidada de fórmulas dentro de uno o más bloques. Estas fórmulas se denominan fórmulas recursivas. A veces, las fórmulas recursivas generan bucles grandes o interminables que provocan una terminación anormal del servidor.

Para evitar la terminación anormal, puede utilizar el valor de configuración CALCLIMITFORMULARECURSION para detener una ejecución de fórmula que supere un número predeterminado de niveles de ejecución.