Aller au contenu principal

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 :

ChampDescription
NomNom descriptif du calcul
Type cibleLe type de fiche auquel ce calcul s'applique
Champ cibleLe champ où le résultat est stocké
FormuleL'expression à évaluer (voir la syntaxe ci-dessous)
Ordre d'exécutionOrdre d'exécution lorsque plusieurs calculs existent pour le même type (le plus petit s'exécute en premier)
ActifActiver 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

VariableDescriptionExemple
fieldKeyN'importe quel attribut de la fiche courantebusinessCriticality
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 vielifecycle_endOfLife

Fonctions intégrées

FonctionDescriptionExemple
IF(condition, valeur_vraie, valeur_fausse)Logique conditionnelleIF(riskLevel == "critical", 100, 25)
SUM(tableau)Somme des valeurs numériquesSUM(PLUCK(related_applications, "costTotalAnnual"))
AVG(tableau)Moyenne des valeurs numériquesAVG(PLUCK(related_applications, "dataQuality"))
MIN(tableau)Valeur minimaleMIN(PLUCK(related_itcomponents, "riskScore"))
MAX(tableau)Valeur maximaleMAX(PLUCK(related_itcomponents, "costAnnual"))
COUNT(tableau)Nombre d'élémentsCOUNT(related_interfaces)
ROUND(valeur, decimales)Arrondir un nombreROUND(avgCost, 2)
ABS(valeur)Valeur absolueABS(delta)
COALESCE(a, b, ...)Première valeur non nulleCOALESCE(customScore, 0)
LOWER(texte)Texte en minusculesLOWER(status)
UPPER(texte)Texte en majusculesUPPER(category)
CONCAT(a, b, ...)Concaténer des chaînesCONCAT(firstName, " ", lastName)
CONTAINS(texte, recherche)Vérifier si le texte contient une sous-chaîneCONTAINS(description, "legacy")
PLUCK(tableau, cle)Extraire un champ de chaque élémentPLUCK(related_applications, "name")
FILTER(tableau, cle, valeur)Filtrer les éléments par valeur de champFILTER(related_interfaces, "status", "ACTIVE")
MAP_SCORE(valeur, correspondance)Associer des valeurs catégorielles à des scoresMAP_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).