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é :
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 :
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 :
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 :
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.