SAP BPC Embedded : les nouveautés FOX dans SAP BW 7.5

Nouveautés SAP BPC Embedded FOX 7.5

Avec l’arrivée de SAP BPC 10.1 Embedded / Integrated Planning, les formules FOX ne sont plus présentées comme un outil à disposition des utilisateurs finaux pour effectuer des calculs, mais bien comme une aide à la création de formules complexes gérées par l’IT.

 A présent optimisé par le Planning Application Kit de HANA, le FOX peut s’enrichir de fonctionnalités complémentaires qui le rapprochent davantage d’un langage de développement spécialisé. C’est ce que démontrent les nouveautés apportées par BW 7.5.

Nous n’aborderons pas ici la problématique de la couverture des fonctions IP par PAK, qui s’approche de 100%, ni le détail des fonctions IP qui ont été rendues possibles grâce au PAK.

Mieux contrôler les données de référence dans les formules FOX

Le FOX fonctionne à partir de plusieurs jeux de données : tout d’abord celui qui correspond à la cible de l’écriture (souvent le budget ou la prévision), défini par un niveau d’agrégation et restreint par des filtres, avec pour cible un DSO ou un infocube. Les données qu’on prévoit de modifier sont bloquées pendant le traitement.

Les données de référence correspondent à toutes les autres de données que le système a besoin de mettre en mémoire afin de réaliser les calculs, mais qui ne seront pas modifiées.

Jusqu’à récemment, ces données étaient déduites du script lui-même. Par exemple, si l’on souhaitait copier les données de 2016 vers 2017, nous avions : { 0AMOUNT, 2017 } = { 0AMOUNT, 2016 ). Les données de 2016 étaient de manière évidente des données de référence.

L’inconvénient de cette méthode est que dans certains cas les données de référence ne peuvent être déduites a priori, et que des traitements pouvaient amener à supprimer ces données pendant l’exécution. La solution était de « ruser » lors de la rédaction du script ou d’élargir les filtres pour intégrer les données qu’on souhaitait voir disponibles, même si cela bloquait et transférait une quantité importante de données.

Qu’il s’agisse de copier, valoriser, tester, etc, il était nécessaire de pouvoir sélectionner et contrôler ces données de référence de façon plus souple. C’est à présent chose faite grâce à plusieurs fonctions: INFOPROVIDER, KEEP, ENHANCE.

Avec la fonction INFOPROVIDER, il est possible d’ajouter directement dans la formule un niveau d’agrégation ou un DSO parmi les sources des données de référence.

Exemple : INFOPROVIDER DSO1.

Les données ainsi chargées en mémoire seront accessibles en faisant directement référence à l’infoprovider, grâce aux opérandes classiques.

Exemple : { 0SALES, 2017 } = DSO1.{ 0ORDER, PREVYEAR | 0SIMUL = 1 }.

KEEP permet de s’assurer que certaines données présentes initialement dans les données de référence ne seront pas effacées pendant l’exécution :

 Exemple : KEEP REFDATA SELECTION FOR INFOPROVIDER DSO1 FOR 0CALYEAR : 2016.

ENHANCE permet d’ajouter aux données de référence certaines données répondant aux paramètres indiqués :

 Exemple : ENHANCE REFDATA SELECTION FOR INFOPROVIDER DSO1 FOR 0CALYEAR : 2016.

Pour ces deux fonctions, la mention de l’infoprovider n’est pas obligatoire, sauf s’il s’agit d’un infoprovider supplémentaire. Il est bien entendu possible d’ajouter plusieurs infoobjets comme filtres.

Rappelons qu’il est ensuite aisé de passer par chaque donné de référence grâce à FOREACH <variable> IN REFDATA.

Mieux structurer les formules FOX

Le FOX permet d’écrire des formules simples ou complexes, qui sont ensuite interprétées par le système pour générer un programme ABAP. Les concepts du FOX et ceux de l’ABAP sont donc très proches.

A présent que le FOX est perçu comme un langage de développement spécialisé pour le traitement multidimensionnel, optimisé par HANA, il est naturel de porter la réflexion sur la structure des formules, d’éviter le redondance de code et de concevoir l’écriture du FOX au travers des principes de base du développement.

Avec BW 7.5, il est possible d’appliquer des fonctionnalités proches de l’ABAP dans FOX. En premier lieu, FOX permet maintenant de créer avec TABLE des tables internes temporaires, définies à partir des infoobjets ou des types génériques.

Exemple : TABLE MATABLE {  ANNEE TYPE 0CALYEAR KEY, COSTS TYPE I  }.

Dans une table, il faut au minimum un champ « clé », qui servira d’identifiant pour la lecture et l’écriture. Par exemple, on indiquera MATABLE.{ COSTS, 2015}  = 200.

 Des fonctions complémentaires sont disponibles pour interagir avec la table interne :

  • Compter le nombre de lignes avec LINES( MATABLE ).
  • Indiquer par 1 ou 0 si une ligne existe avec EXISTS( MATABLE.{2014} ).
  • Supprimer une ligne par DELETE( MATABLE.{2014} ).
  • Effacer toutes les lignes par CLEAR MATABLE.
  • Boucler sur toutes les lignes avec FOREACH YEAR IN MATABLE.

Une grande nouveauté est l’utilisation de subroutines. Jusqu’à présent, si l’on souhaitait effectuer un calcul plusieurs fois dans une même formule, ou dans plusieurs formules, il fallait écrire plusieurs fois le code ou créer un programme ABAP auquel on faisait appel comme subroutine. A présent, on peut créer la subroutine en FOX et l’appliquer dans la même formule ou d’autres formules.

La syntaxe est directement inspirée de l’ABAP, avec la fonction FORM…ENDFORM, comprenant IMPORTING pour les données envoyées à la routine, et CHANGING pour les données en retour.

Dans l’exemple suivant, nous allons prévoir le salaire individuel au budget à partir du salaire individuel, s’il existe dans le DSO, ou le salaire moyen à partir d’une autre niveau d’agrégation.

 INFOPROVIDER SALAIREINDIV.

INFOPROVIDER SALAIREMOYEN.

FORM SALAIREPREV IMPORTING EMPLOYEID TYPE 0EMPLID

                                                               CC TYPE 0COSTCENTER

                                        CHANGING SALAIREPREV TYPE F.

             IF SALAIREINDIV.{0SALAIRE, 0EMPLID, 0COSTCENTER} <> 0.

                         SALAIREPREV =  SALAIREINDIV.{0SALAIRE, 0EMPLID, 0COSTCENTER}.

             ELSE.

                         SALAIREPREV = SALAIREMOYEN.{0AMOUNT, 0COSTCENTER}.

             ENDIF.

 ENDFORM.

 On fera appel à cette routine, par exemple avec :

 FOREACH SALARIE, CC.

             {0AMOUT, SALARIE, CC} = SALAIREPREV(SALARIE, CC).

 ENDFOR.

Il est aussi possible désormais d’inclure une autre formule avec la fonction INCLUDE. Si vous avez besoin d’utiliser le même code dans plusieurs formules, il suffit d’écrire une seule fois la formule puis de l’utiliser dans plusieurs autres, par exemple avec : INCLUDE MAFORMULE.

Dans ce cas, seuls les éléments suivants sont réutilisés :

  • La définition des tables internes en type.
  • Les infoproviders
  • Les FORM

Au final, il est possible de concevoir l’application de prévision et d’élaboration budgétaire (ou autre chose) globalement, non comme une succession de formules indépendantes mais comme un tout logique. Cela renforce l’idée qu’une application avec SAP BPC Embedded / Integration Planning nécessite une conception globale et une méthodologie éprouvée pour obtenir rapidement les meilleurs résultats.

Ces améliorations répondent à des demandes fréquentes et vont permettre de réduire la quantité de formules rédigées, d’effectuer une conception optimisée de l’application et d’assurer une meilleure maintenance. Le fait de simplifier l’écriture des formules, par rapport à un lourd développement ABAP est aussi un facteur d’accélération dans la conduite de projet. Même si ces fonctions peuvent sembler assez techniques, elles permettent de créer plus rapidement les formules complexes que si l’on était dans ABAP.

Un projet de mise en oeuvre, pour aboutir à une bonne couverture du besoin, doit faire preuve de réactivité et d’agilité. Le fait que les consultants déjà en charge de l’analyse du besoin ou du paramétrage puissent rapidement créer ou modifier une formule (en gardant une cohérence d’ensemble) amène à obtenir plus rapidement le feedback ou la validation des utilisateurs et de l’AMOA. Ce faisant, on démultiplie les occasions de vérifier l’adéquation du résultat avec les besoins réels de l’entreprise afin de les couvrir au mieux.

A lire également

– Bien concevoir une application SAP BPC Embedded / Integrated Planning
– FOX, le language de script de SAP BPC Embedded / Integrated Planning
– Le point sur SAP Analysis Office 2.1
– SAP Cloud for Analytics dans l’univers SAP BI & EPM
– Piloter les performances : l’essentiel en 5 minutes
Processus budgétaire : transformer un mal nécessaire en instrument de pilotage efficace.

Ecrit par Laurent Allais, le 1er avril 2016

About the Author

Laurent Allais
Laurent ALLAIS est expert en solutions d'élaboration budgétaire, business intelligence et pilotage des performances (EPM - FP&A), avec plus de 25 ans d'expérience dans ce domaine. Il intervient dans la mise en oeuvre de Workday Adaptive Planning, leader mondial des solutions cloud EPM et Financial Planning & Analysis. Après avoir fondé Artens et dirigé l'activité SAP BI-EPM de Viséo, il fonde Alsight en 2012, premier spécialiste d'Adaptive Planning en France. Alsight a rejoint Génération Conseil en 2019 dont il a dirigé l'activité Adaptive Planning pendant 4 ans, avant de rejoindre comme associé la société Adapt1Solution, désormais première société de conseil française spécialisée sur Workday Adaptive Planning. Il est intervenu chez plus de 60 clients autour des projets BI et EPM (FP&A), dont Renault, PSA, AGF, Embraer, Airbus, UCPA, ClubMed, Mega International, Pernod-Ricard, Euronext, Infovista, Véolia, Lizéo, Elitechgroup, Roquette, Pimkie, Chanel, L'Oréal, etc... Contact : Laurent.allais@expandbi.com