Optimisation des règles : exemple

Une fois que vous avez identifié les passes qui ont besoin d'être optimisées, modifiez la règle métier. Veillez à indiquer la logique et les conditions optimales pour chaque passe.

Observons la définition de règle métier suivante qui calcule deux comptes YTD puis agrège les valeurs par l'intermédiaire des dimensions Produit et Entité :

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

Lors de l'exécution de cette règle dans Calculation Manager (voir Identifications de domaines pour l'optimisation de règle), l'onglet Message de journal affiche un message semblable au suivant lorsque Passe uniquement est sélectionné :
Exemple de message affiché lors de l'exécution d'une règle avec l'option Passe uniquement

L'analyse des informations contenues dans le fichier journal montre que 99,995 % de la durée d'exécution (79,235 secondes) est consacrée à la passe 1, tandis que la passe 2 ne représente que 0,005 % de la durée d'exécution.

Si vous désélectionnez Passe uniquement, des informations relatives aux blocs, aux écritures et aux lectures sont affichées, comme illustré sur l'image suivante :
Exemple de message affiché lors de l'exécution d'une règle sans l'option Passe uniquement

La définition de règle précédente présentait les problèmes suivants :

  • Aucune instruction FIX n'est définie sur les dimensions Entité et Produit, toutes les règles doivent donc être exécutées sur l'ensemble des niveaux des dimensions Entité et Produit.

  • La passe 1 calcule inutilement les niveaux supérieurs. La fonction Agg de la passe 2 les calcule également et écrase les résultats obtenus dans la passe 1.

Vous pouvez optimiser le script comme suit :

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

Lors de l'exécution de la règle mise à jour dans Calculation Manager (voir Identifications de domaines pour l'optimisation de règle), l'onglet Message de journal affiche un message semblable au suivant :


Exemple de message affiché lors de l'exécution d'une règle fixe

L'analyse des informations contenues dans le fichier journal montre que la passe 1 a nécessité 15,901 secondes de moins que lors de la dernière exécution.

Si vous désélectionnez Passe uniquement, des informations relatives aux blocs, aux écritures et aux lectures sont affichées pour la passe 1, comme illustré dans l'image suivante :
Exemple de message affiché lors de l'exécution d'une règle fixe sans l'option Passe uniquement

La comparaison des informations relatives aux blocs, aux écritures et aux lectures avec celles obtenues avant l'optimisation permet d'observer une réduction globale dans les statistiques de traitement de la règle métier.