BLOG | Le Groovy au service de PBCS

08/02/2023

L’article ci-dessous vous présente la mise en œuvre d’une solution technique PBCS pour répondre rapidement à une évolution du besoin métier. L’intérêt de cette solution est qu’elle est performante, facilement maintenable dans le cas d’une TMA externalisée par exemple. De plus, le travail au quotidien des utilisateurs finaux n’a pas évolué donc pas de conduite du changement !

PBCS est utilisé pour couvrir le besoin du pilotage de la Masse Salariale par les équipes finances. La déclinaison technique su besoin métier est le suivant. Dans le cas de matricules prévisionnels (des matricules dédiés pour projeter du recrutement à venir) nous ne pouvons pas déduire les mêmes informations que pour un salarié connu. Un salarié porte des attributs qui lui sont propres (société, emploi, nature de contrat, type de contrat, catégorie socio-professionnelle, sous-filière). Alors qu’un matricule prévisionnel est de facto banalisé car il peut être utilisé sans contrainte par différentes régions pour différents postes. 

Mais le besoin de reporting sur ces matricules spéciaux reste cependant demandé. 

Pour y arriver, nous avons mis en place des membres dédiés (pour le reporting) relatifs aux attributs suffixés par _PAP (comme Poste A Pourvoir).  
 

oracle-epm-poste-a-pourvoir

L’écran de saisie est le suivant.

ecran-saisie-epm-oracle

L’utilisateur final opte pour un poste (Poste 40), des dates d’entrée et de sortie et une nature de contrat (CDI DUREE INDETERMINEE).

ecran-saisie-epm-oracle-2

Maintenant, le défi est de créer un croisement sur les membres _PAP (ici sur CDI DUREE INDETERMINEE_PAP).

Bien entendu, nous avons en premier lieu travailler une règle de calcul de type Essbase. Nous avons été confrontés à quelques soucis pour reconstruire le nouveau membre (_PAP). Aussi nous nous sommes rapidement orientés vers une règle de calcul Groovy. Nous vous détaillons ci-dessous les grandes étapes.

Je définis dans le script Groovy quelques variables qui seront utilisées plus tard. Je préfère par réflexe rassembler toutes mes variables dans un même bloc, une partie déclarative.

script-groovy-oracle-epm

J’attire juste l’attention sur :

  • ü  la variable sEssCalc de type StringBuilder qui me permettra de stocker l’instruction à passer à Essbase

  • ü  la liste mois qui me permettra de récupérer facilement les périodes de travail

Je récupère également le point de vue du formulaire en deux lignes de code.

Ensuite, je vais m’intéresser uniquement aux saisies réalisées par un utilisateur de l’application.

C’est le fameux ‘cell.edited’ qui me rend service et je vais réaliser pour toutes les saisies le même traitement, à savoir :

  • ü  nettoyer les variables afin d’envoyer des données en corrélation avec les infos du dossier

  • ü  récupérer la date d’entrée et de sortie en lien direct

  • ü  déduire de ces dates les périodes au sens EPM

  • ü  déterminer finalement les membres (de la dimension période) associés aux dates de début et de fin
script-groovy-oracle-epm2

Ensuite je supprime de ma variable contenant le point de vue trois dimensions que je veux adapter à mon besoin plus tard.

script-groovy-oracle-epm3

Bien à ce stade, j’ai pas mal de choses sur le feu. Il est temps de finaliser la recette !

Ne perdons pas de vue que je suis toujours sur la cellule modifiée. Je m’assure que le matricule sur lequel j’ai saisi ma valeur est bien un matricule de type PAP. Si c’est le cas, parfait, je vérifie que la valeur modifiée est réalisée sur un indicateur nommé ‘IND_NATURE_CONTRAT’.

script-groovy-oracle-epm4

Et c’est à ce moment que j’appelle deux objets de type ‘Script’. Pourquoi ?

Pour deux principales raisons :

  1. D’abord, je ré-utilise ce bout de code dans cette règle Groovy pour chaque type de PAP. Cela m’évite de copier/coller ce code six fois.
  2. Et je ré-utilise ce code également dans d’autres règles Groovy

Finalement, dans le cas d’une évolution du script, il sera plus simple de la propager dans ces dites règles.

Dans le premier script, je remplis la variable sEssCalc (vu un peu plus haut) avec ce que j’aimerais faire dans la base de données. Je fais un nettoyage sur les anciens croisements potentiels puis j’écris sur le croisement qui correspond à la valeur saisie.

script-groovy-oracle-epm5

Allez, on y est presque, courage !

Il reste une dernière étape !

Oui il faut envoyer les instructions à Essbase. Let’s Go !

Dans le second script, je demande à Essbase de lancer ma commande contenue dans la variable sEssCalc.

script-groovy-oracle-epm

Et voilà. C’est terminé. Comme indiqué en début d’article, cette opération décrite sur la nature d’emploi est également déroulée pour mes autres indicateurs aussi aisément (en six lignes)

En conclusion, vous voyez qu’une trentaine de lignes de Groovy et quelques fonctions, nous avons réussi à traiter rapidement le besoin métier. L’intérêt est double car nous calculons uniquement pour les lignes modifiées (sans impacter les autres donc pas de recalcul) et le temps de calcul est très rapide.

Si vous avez des besoins complexes, difficilement appréhendé par le langage natif Essbase, vous pouvez nous contacter et solliciter notre expertise technique – en particulier Groovy – et métier. Klee Performance accompagnera toujours ses clients pour que la technologie soit l’alliée de la réussite de leurs projets.

  • Par Alain Mathon

    Manager Expert - Klee Performance