27 Développer des macros de calcul personnalisées

Les macros personnalisées Essbase vous permettent de combiner plusieurs fonctions de calcul en une seule fonction. Vous pouvez les utiliser dans des scripts de calcul ou des formules.

Créez et testez de nouvelles macros localement dans une application de test. Enregistrez les CDM globalement uniquement après les avoir testés dans une application de test et après les avoir prêts à les utiliser dans un environnement de production.

Pour créer et gérer des CDM, vous devez disposer d'une autorisation Database Manager ou supérieure.

Les CDM sont pris en charge uniquement pour les cubes de stockage de blocs.

Nommer des macros personnalisées

Les noms de macro personnalisée (CDM) Essbase doivent être uniques et commencer par le symbole @. Les macros locales sont précédées du nom de l'application.

Respectez les consignes suivantes lorsque vous nommez des CDM :

  • Commencez le nom de la macro par le symbole "@" (par exemple, @MYMACRO). Le reste d'un nom peut contenir des lettres, des chiffres et les symboles suivants : @, #, $ et _. Les noms de macro ne doivent pas contenir d'espaces.

  • Pour les macros qui ne sont appelées que par d'autres macros, commencez le nom de la macro par "@_", afin de le distinguer des macros et fonctions générales.

  • Donnez des noms uniques aux macros. En outre, un nom de macro doit être différent des noms des fonctions personnalisées et des noms des fonctions de calcul existantes.

    Remarques :

    Si une application contient une macro locale portant le même nom qu'une macro globale, la macro locale est prioritaire et utilisée pour le calcul.

  • Pour les macros locales, vous devez ajouter le nom de l'application au nom de la macro, en séparant le nom de l'application du nom de la macro par un point :

    AppName.@MacroName

    Exemple :

    Sample.@MYMACRO
  • Etant donné que les macros globales sont disponibles pour toute application exécutée sur le serveur Essbase où la macro a été créée, vous n'y affectez pas de nom d'application.

Créer des macros personnalisées

Lorsque vous créez une macro personnalisée définie (CDM), Essbase l'inscrit dans un catalogue. Votre macro peut être globale ou locale pour une application. Vous pouvez ensuite l'utiliser dans des formules et des scripts de calcul, jusqu'à ce que la macro soit supprimée du catalogue.

Vous pouvez enregistrer un mappage du disque client comme suit :

  • En tant que locale, dans laquelle la macro est disponible uniquement dans l'application Essbase dans laquelle elle a été créée

  • Comme global, dans lequel la macro est disponible pour toutes les applications Essbase exécutées sur le serveur Essbase où la macro a été créée

Pour créer un mappage du disque client :

Utilisez l'instruction create macro MaxL.

L'instruction MaxL suivante crée une macro locale nommée @COUNTRANGE à utiliser dans l'exemple d'application :

create macro Sample.'@COUNTRANGE'(Any) AS
'@COUNT(SKIPMISSING, @RANGE(@@S))'
spec '@COUNTRANGE(MemberRange)'
comment 'counts all non-missing values';

L'instruction MaxL suivante crée une macro globale nommée @COUNTRANGE :

create macro'@COUNTRANGE'(Any) AS
'@COUNT(SKIPMISSING, @RANGE(@@S))'
spec '@COUNTRANGE(MemberRange)'
comment 'counts all non-missing values';

Implémenter des macros personnalisées

Utilisez vos macros personnalisées (CDM) comme vous utilisez les commandes de calcul natives Essbase : en les appelant dans des scripts de calcul ou en les associant à des formules d'outline.

Pour utiliser un mappage du disque client :

  1. Créez ou ouvrez un script ou une formule de calcul existant.
    • S'il a été enregistré localement, vous devez utiliser un script de calcul ou une formule dans l'application dans laquelle la macro a été créée.

    • S'il a été enregistré globalement, vous pouvez utiliser n'importe quel script de calcul ou formule dans n'importe quelle application sur le serveur Essbase.

  2. Ajoutez le code CDM au script de calcul ou à la formule.

    Par exemple, pour utiliser la macro personnalisée @COUNTRANGE présentée précédemment dans ce chapitre, créez le script de calcul suivant :

    CountMbr = @COUNTRANGE(Sales, Jan:Dec);

    Utilisez ce script de calcul avec la base de données Sample.Basic ou remplacez "Sales, Jan:Dec" par une plage de membres dans une base de données de test.

  3. Enregistrez le script ou la formule de calcul, puis exécutez-le comme d'habitude.

Afficher les macros personnalisées

Affichez une macro personnalisée définie (CDM) dans Essbase pour déterminer si elle a été créée et si elle a une portée locale ou globale.

Pour afficher un mappage du disque client, utilisez l'instruction display macro MaxL.

Exemples 

L'instruction MaxL suivante affiche uniquement les macros définies dans l'exemple d'application :

display macro on application Sample;

L'instruction MaxL suivante affiche toutes les macros globales et locales, si vous êtes autorisé à les afficher :

display macro;

Mettre à jour des macros personnalisées

Pour modifier la syntaxe ou le comportement d'une macro personnalisée définie (CDM) dans Essbase, déterminez d'abord s'il s'agit d'une portée locale ou globale, puis utilisez l'instruction MaxL créer ou remplacer une macro pour mettre à jour sa définition.

Pour mettre à jour un mappage du disque client :

  1. Déterminez si la macro est enregistrée localement ou globalement.
  2. Pour mettre à jour la définition de la macro, utilisez l'instruction create macro MaxL.

Exemples 

L'instruction MaxL suivante modifie la macro locale @COUNTRANGE, qui est utilisée uniquement dans l'exemple d'application :

create or replace macro Sample.'@COUNTRANGE'(Any)
as '@COUNT(SKIPMISSING, @RANGE(@@S))';

L'instruction MaxL suivante modifie la macro globale @COUNTRANGE :

create or replace macro '@COUNTRANGE'(Any)
as '@COUNT(SKIPMISSING, @RANGE(@@S))';

Copier des macros personnalisées

Vous pouvez copier des macros personnalisées (CDM) vers n'importe quel serveur Essbase et n'importe quelle application à laquelle vous disposez des droits d'accès appropriés. Le niveau d'autorisation de votre application doit être Database Manager ou supérieur.

Pour copier un mappage du disque client, utilisez l'instruction create or replace macro MaxL.

Exemple

L'instruction MaxL suivante crée une copie de la macro @COVARIANCE :

create macro Sample.'@COVARIANCE2'(single, single) as '@COVARIANCE'(single, single);

Supprimer des macros personnalisées

Pour supprimer une macro personnalisée définie (CDM) d'Essbase, déterminez d'abord s'il s'agit d'une étendue locale ou globale, puis utilisez l'instruction MaxL drop macro.

Pour supprimer un mappage du disque client, procédez comme suit :

  1. Déterminez si la macro est enregistrée localement ou globalement.
  2. Vérifiez qu'aucun script ou formule de calcul n'utilise le mappage du disque client.
  3. Pour supprimer la macro du catalogue de macros, utilisez l'instruction Drop macro MaxL.
  4. Redémarrez toutes les applications associées à la macro.

L'instruction MaxL suivante supprime la macro locale @COUNTRANGE, qui est utilisée uniquement dans l'exemple d'application :

drop macro Sample.'@COUNTRANGE';

L'instruction MaxL suivante supprime la macro globale @COUNTRANGE :

drop macro '@COUNTRANGE';

Actualiser le catalogue de macros personnalisées

Actualisez le catalogue Essbase des macros personnalisées (CDM) après avoir ajouté, mis à jour ou supprimé des macros. Utilisez l'instruction MaxL pour actualiser les définitions personnalisées si les modifications sont locales, ou redémarrez le serveur Essbase si les modifications sont globales.

Pour actualiser le catalogue des CDM pour toutes les applications sur un serveur, redémarrez le serveur. Reportez-vous à Démarrage, arrêt et vérification des serveurs pour connaître les déploiements indépendants ou à Utilisation de commandes pour démarrer, arrêter et visualiser le statut des processus pour le déploiement de pile sur OCI.

Pour actualiser le catalogue des CDM pour une application, utilisez l'instruction Actualiser les définitions personnalisées MaxL.

Par exemple, l'instruction MaxL suivante actualise le catalogue des CDM pour l'exemple d'application :

refresh custom definition on application sample;