Aller au contenu

Calculs

La fonctionnalité Calculs (Admin > Métamodèle > onglet Calculs) vous permet de définir des formules qui calculent automatiquement des valeurs de champs lorsque les fiches sont sauvegardées. C'est un outil puissant pour dériver des métriques, des scores et des agrégations à partir de vos données d'architecture.

Comment ça marche

  1. Un administrateur définit une formule ciblant un type de fiche et un champ spécifiques
  2. Lorsqu'une fiche de ce type est créée ou mise à jour, la formule s'exécute automatiquement
  3. Le résultat est écrit dans le champ cible
  4. Le champ cible est marqué en lecture seule sur la page de détail de la fiche (les utilisateurs voient un badge « calculé »)

Création d'un calcul

Cliquez sur + Nouveau calcul et configurez :

Champ Description
Nom Nom descriptif du calcul
Type cible Le type de fiche auquel ce calcul s'applique
Champ cible Le champ où le résultat est stocké
Formule L'expression à évaluer (voir la syntaxe ci-dessous)
Ordre d'exécution Ordre d'exécution lorsque plusieurs calculs existent pour le même type (le plus petit s'exécute en premier)
Actif Activer ou désactiver le calcul

Syntaxe des formules

Les formules utilisent un langage d'expression sécurisé et isolé. Vous pouvez référencer les attributs de la fiche, les données des fiches liées et les informations du cycle de vie.

Variables de contexte

Variable Description Exemple
fieldKey N'importe quel attribut de la fiche courante businessCriticality
related_{type_key} Tableau de fiches liées d'un type donné related_applications
lifecycle_plan, lifecycle_active, etc. Valeurs de dates du cycle de vie lifecycle_endOfLife

Fonctions intégrées

Fonction Description Exemple
IF(condition, valeur_vraie, valeur_fausse) Logique conditionnelle IF(riskLevel == "critical", 100, 25)
SUM(tableau) Somme des valeurs numériques SUM(PLUCK(related_applications, "costTotalAnnual"))
AVG(tableau) Moyenne des valeurs numériques AVG(PLUCK(related_applications, "dataQuality"))
MIN(tableau) Valeur minimale MIN(PLUCK(related_itcomponents, "riskScore"))
MAX(tableau) Valeur maximale MAX(PLUCK(related_itcomponents, "costAnnual"))
COUNT(tableau) Nombre d'éléments COUNT(related_interfaces)
ROUND(valeur, decimales) Arrondir un nombre ROUND(avgCost, 2)
ABS(valeur) Valeur absolue ABS(delta)
COALESCE(a, b, ...) Première valeur non nulle COALESCE(customScore, 0)
LOWER(texte) Texte en minuscules LOWER(status)
UPPER(texte) Texte en majuscules UPPER(category)
CONCAT(a, b, ...) Concaténer des chaînes CONCAT(firstName, " ", lastName)
CONTAINS(texte, recherche) Vérifier si le texte contient une sous-chaîne CONTAINS(description, "legacy")
PLUCK(tableau, cle) Extraire un champ de chaque élément PLUCK(related_applications, "name")
FILTER(tableau, cle, valeur) Filtrer les éléments par valeur de champ FILTER(related_interfaces, "status", "ACTIVE")
MAP_SCORE(valeur, correspondance) Associer des valeurs catégorielles à des scores MAP_SCORE(criticality, {"high": 3, "medium": 2, "low": 1})

Exemples de formules

Coût annuel total des applications liées :

SUM(PLUCK(related_applications, "costTotalAnnual"))

Score de risque basé sur la criticité :

IF(riskLevel == "critical", 100, IF(riskLevel == "high", 75, IF(riskLevel == "medium", 50, 25)))

Nombre d'interfaces actives :

COUNT(FILTER(related_interfaces, "status", "ACTIVE"))

Placement TIME Model (Tolerate / Invest / Migrate / Eliminate) — le même exemple que vous verrez dans le panneau Formula Reference dans Admin → Métamodèle → Calculations lors de la création d'un nouveau calcul. Type cible = Application, champ cible = timeModel. Suppose que vous avez ajouté deux champs single_select nommés businessFit et technicalFit avec les options excellent, adequate, insufficient, unreasonable :

# ── TIME Model (Tolerate / Invest / Migrate / Eliminate) ──
# Assumes single_select fields: businessFit and technicalFit
# with options: excellent, adequate, insufficient, unreasonable.
#
# Scoring: Map each dimension to 1-4 numeric scale.
# Business Fit  = Y-axis (how well does it serve the business?)
# Technical Fit = X-axis (how healthy is the technology?)
#
# Quadrant logic (threshold at score 2.5):
#   Invest    = high business + high technical
#   Migrate   = high business + low technical
#   Tolerate  = low business  + high technical
#   Eliminate = low business  + low technical
#
bf = MAP_SCORE(data.businessFit, {"excellent": 4, "adequate": 3, "insufficient": 2, "unreasonable": 1})
tf = MAP_SCORE(data.technicalFit, {"excellent": 4, "adequate": 3, "insufficient": 2, "unreasonable": 1})
IF(bf is None or tf is None, None, IF(bf >= 2.5, IF(tf >= 2.5, "invest", "migrate"), IF(tf >= 2.5, "tolerate", "eliminate")))

C'est aussi l'exemple opérationnel référencé par le Guide du débutant EA.

Les commentaires sont pris en charge avec # :

# Calculer le score de risque pondéré
IF(businessCriticality == "missionCritical", riskScore * 2, riskScore)

Exécution des calculs

Les calculs s'exécutent automatiquement lorsqu'une fiche est sauvegardée. Vous pouvez également déclencher manuellement un calcul pour l'exécuter sur toutes les fiches du type cible :

  1. Trouvez le calcul dans la liste
  2. Cliquez sur le bouton Exécuter
  3. La formule est évaluée pour chaque fiche correspondante et les résultats sont sauvegardés

Ordre d'exécution

Lorsque plusieurs calculs ciblent le même type de fiche, ils s'exécutent dans l'ordre spécifié par leur valeur d'ordre d'exécution. C'est important lorsqu'un calcul dépend du résultat d'un autre -- définissez la dépendance pour qu'elle s'exécute en premier (numéro inférieur).