*FUNCTION/*ENDFUNCTION
Une fonction personnalisée correspond au nom d'un paramètre fictif que vous pouvez insérer dans des formules à la place d'une instruction MDX correspondante ou d'une partie de celle-ci. Cela peut nettement améliorer la lisibilité d’une instruction de calcul.
Les définitions des fonctions de calcul peuvent être insérées partout dans un fichier de calculs ou un fichier inclus. Leur syntaxe est la suivante :
Pour les fonctions à une ligne :
*FUNCTION {functionname}({Param1}[,{Param2}…]) = {Function Text}
Pour les fonctions à plusieurs lignes :
*FUNCTION {functionname}({Param1}[,{Param2}…])
{Function text}
{Function text}
*ENDFUNCTION
Le nombre de fonctions pouvant être défini dans un fichier de script de calcul est illimité.
Le nombre de paramètres pouvant être transférés à une fonction pour modifier dynamiquement la chaîne MDX correspondante est illimité.
Actuellement, les fonctions ne peuvent pas être imbriquées, c'est-à-dire qu'une fonction ne peut pas contenir une autre fonction.
La position des fonctions dans le fichier de calculs importe peu, sauf si la même fonction est redéfinie, auquel cas la nouvelle définition de la fonction s'applique uniquement à partir du point de redéfinition.
Les valeurs des paramètres transférés sont remplacées dans le texte de la fonction sans aucune validation, même si elles sont incorporées dans des mots plus longs.
Faites attention lorsque vous définissez les noms de paramètres afin d’éviter tout risque de conflit avec les mots réservés MDX et avec le texte qui les entoure dans les calculs. La meilleure pratique est de toujours encadrer le nom des paramètres avec un séparateur, comme dans l'exemple suivant :
*FUNCTION Price(%COST%,%HOUR%)
%COST%/%HOUR%
*ENDFUNCTION[#CE0661000] = Price([CE0004000],[CE0652000])
Cet exemple permet de calculer le prix. Il est inutile de contrôler le dénominateur pour zéro afin d'éviter une erreur de division par zéro. Le moteur de script de calcul remplace automatiquement par un zéro l'erreur de division par zéro.
Vous pouvez également utiliser *FUNCTION pour remplacer les membres ou dimensions afin de rendre les scripts plus lisibles.
*FUNCTION PERSONAL_COST = CE0004000
*FUNCTION LAB_HOUR = CE0652000
*FUNCTION PER_PRICE = CE0661000
*FUNCTION ACCOUNT = P_ACCT
Price(%COST%,%HOUR%)
%COST%/%HOUR%
*ENDFUNCTION
[ACCOUNT].[#PER_PRICE] = Price([ACCOUNT].[PERSONAL_COST],[ACCOUNT].[LAB_HOUR])
Les caractères suivants, ainsi que l'espace, ne sont pas valables dans des noms de fonctions de calcul :
+ - / * ^ % > < = ( ) [ ] { } , . ; ' : & \ | # ~ "
Tous les codes logiciels et/ou lignes/chaînes de code ("Code") inclus dans cette documentation sont fournis à titre d'exemples et ne sont en aucun cas destinés à un usage dans un environnement système productif.Le Code a pour but de mieux expliquer et d'offrir un exemple visuel des règles de syntaxe et de rédaction de certains codes.SAP ne garantit pas l'exactitude et l'exhaustivité du Code ci-après et SAP ne pourra pas être tenu responsable des erreurs ou dommages causés par l'utilisation dudit Code, sauf si de tels dommages ont été causés volontairement par SAP ou par négligence grave de SAP.