Optimización de reglas: ejemplo

Una vez identificados los pasos que se van a optimizar, edite la regla de negocio. Asegúrese de especificar la lógica y las condiciones óptimas para cada paso.

Considere la siguiente definición de regla de negocio, la cual calcula dos cuentas de acumulado anual y, a continuación, agrega los valores a través de las dimensiones Product y Entity:

SET UPDATECALC OFF;
/* PASS 1 BEGINS*/  
FIX ("BaseData","Plan","FY17",  "FY17" "FY16")
      "BU Version_1"(
          IF(@ismbr("Jan"))
             "4110_YTD" = "4110"; "4120_YTD" = "4120"; "4130_YTD" = "4130";
             "4140_YTD" = "4140"; "4150_YTD" = "4150";
          Else
             "4110_YTD"="4110" + @prior("4110_YTD"); "4120_YTD"="4120"
                                                                + @prior("4120_YTD");
             "4130_YTD"="4130" + @prior("4130_YTD"); "4140_YTD"="4140"
                                                                + @prior("4140_YTD");
             "4150_YTD"="4150" + @prior("4150_YTD");
          Endif)
  /*  PASS 1 ENDS -- PASS 2 BEGINS*/
      Agg("Entity","Product");
  /*  PASS 2 ENDS */
 ENDFIX

Al ejecutar esta regla en Calculation Manager (consulte Identificación de áreas para optimizar reglas), el separador Mensaje de registro muestra un mensaje similar al siguiente cuando se selecciona Solo pasadas:
Mensaje de ejemplo mostrado al ejecutar una regla con la selección Solo pasadas

Un análisis de la información del archivo de registro indica que el 99,995 % del tiempo de ejecución (79,235 segundos) se dedica a la pasada 1, y solo el 0,005 % a la pasada 2.

Si anula la selección de Solo pasadas, se mostrará información sobre bloques, lecturas y escrituras similar a la que aparece en la siguiente ilustración:
Mensaje de ejemplo mostrado al ejecutar una regla sin la selección Solo pasadas

La definición de regla anterior tiene estos problemas:

  • No tiene un FIX en las dimensiones Entity y Product, de ese modo se fuerza la ejecución de todas las reglas en todos los niveles de las dimensiones Entity y Product.

  • La pasada 1 calcula innecesariamente los niveles superiores. La función Agg en la pasada 2 hace esto y sobrescribe lo que se ha hecho en la pasada 1.

El script se puede optimizar como se muestra a continuación:

SET UPDATECALC OFF;
FIX ("BaseData","Plan","FY17")

/* PASS 1 BEGINS*/

        Fix(@LEVMBRS("Entity",0), @LEVMBRS("Product",0))
                "BU Version_1"(
                        IF(@ismbr("Jan"))
                                "4110_YTD" = "4110";
                                "4120_YTD" = "4120";
                        Else
                                "4110_YTD"="4110" + @prior("4110_YTD");
                                "4120_YTD"="4120" + @prior("4120_YTD");
                        Endif)
        ENDFIX
/*  PASS 1 ENDS --  PASS 2 BEGINS*/

    Agg("Entity","Product");

/*  PASS 2 ENDS */

ENDFIX

Al ejecutar la regla actualizada en Calculation Manager (consulte Identificación de áreas para optimizar reglas), el separador Mensaje de registro muestra un mensaje similar al siguiente:


Mensaje de ejemplo mostrado al ejecutar una regla fija

Un análisis de la información del archivo de registro indica que el tiempo de ejecución de la pasada 1 es de 15,901 segundos menos en comparación con la ejecución anterior.

Si anula la selección de Solo pasadas, se mostrará información sobre bloques, lecturas y escrituras similar a la que aparece en la siguiente ilustración para la pasada 1:
Mensaje de ejemplo mostrado al ejecutar una regla fija sin la opción Solo pasadas

Una comparación de la información sobre bloques, lecturas y escrituras con datos similares previos a la optimización indica un reducción en todo el panel de las estadísticas de procesamiento de la regla de negocio.