Passa al contenuto principale

Calcoli

La funzionalità Calcoli (Admin > Metamodello > scheda Calcoli) consente di definire formule che calcolano automaticamente i valori dei campi quando le card vengono salvate. Questo è potente per derivare metriche, punteggi e aggregazioni dai dati architetturali.

Come funziona

  1. Un amministratore definisce una formula che mira a un tipo di card e un campo specifico
  2. Quando qualsiasi card di quel tipo viene creata o aggiornata, la formula viene eseguita automaticamente
  3. Il risultato viene scritto nel campo target
  4. Il campo target è contrassegnato come sola lettura nella pagina di dettaglio della card (gli utenti vedono un badge "calcolato")

Creazione di un calcolo

Cliccate su + Nuovo calcolo e configurate:

CampoDescrizione
NomeNome descrittivo per il calcolo
Tipo targetIl tipo di card a cui si applica questo calcolo
Campo targetIl campo dove il risultato viene memorizzato
FormulaL'espressione da valutare (vedi la sintassi di seguito)
Ordine di esecuzioneOrdine di esecuzione quando esistono più calcoli per lo stesso tipo (il numero più basso viene eseguito per primo)
AttivoAbilitare o disabilitare il calcolo

Sintassi delle formule

Le formule utilizzano un linguaggio di espressioni sicuro e sandboxed. Potete fare riferimento agli attributi della card, ai dati delle card correlate e alle informazioni sul ciclo di vita.

Variabili di contesto

VariabileDescrizioneEsempio
fieldKeyQualsiasi attributo dalla card correntebusinessCriticality
related_{type_key}Array di card correlate di un dato tiporelated_applications
lifecycle_plan, lifecycle_active, ecc.Valori delle date del ciclo di vitalifecycle_endOfLife

Funzioni predefinite

FunzioneDescrizioneEsempio
IF(condizione, val_vero, val_falso)Logica condizionaleIF(riskLevel == "critical", 100, 25)
SUM(array)Somma dei valori numericiSUM(PLUCK(related_applications, "costTotalAnnual"))
AVG(array)Media dei valori numericiAVG(PLUCK(related_applications, "dataQuality"))
MIN(array)Valore minimoMIN(PLUCK(related_itcomponents, "riskScore"))
MAX(array)Valore massimoMAX(PLUCK(related_itcomponents, "costAnnual"))
COUNT(array)Numero di elementiCOUNT(related_interfaces)
ROUND(valore, decimali)Arrotonda un numeroROUND(avgCost, 2)
ABS(valore)Valore assolutoABS(delta)
COALESCE(a, b, ...)Primo valore non nulloCOALESCE(customScore, 0)
LOWER(testo)Testo in minuscoloLOWER(status)
UPPER(testo)Testo in maiuscoloUPPER(category)
CONCAT(a, b, ...)Unisce stringheCONCAT(firstName, " ", lastName)
CONTAINS(testo, ricerca)Verifica se il testo contiene una sottostringaCONTAINS(description, "legacy")
PLUCK(array, chiave)Estrae un campo da ogni elementoPLUCK(related_applications, "name")
FILTER(array, chiave, valore)Filtra gli elementi per valore del campoFILTER(related_interfaces, "status", "ACTIVE")
MAP_SCORE(valore, mappatura)Mappa valori categorici a punteggiMAP_SCORE(criticality, {"high": 3, "medium": 2, "low": 1})

Formule di esempio

Costo annuale totale dalle applicazioni correlate:

SUM(PLUCK(related_applications, "costTotalAnnual"))

Punteggio di rischio basato sulla criticità:

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

Conteggio delle interfacce attive:

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

Posizionamento TIME Model (Tolerate / Invest / Migrate / Eliminate) — lo stesso esempio che si vedrà nel pannello Formula Reference all'interno di Admin → Metamodello → Calcoli quando si crea un nuovo calcolo. Tipo target = Application, campo target = timeModel. Si presuppone di aver aggiunto due campi single_select denominati businessFit e technicalFit con opzioni 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")))

Questo è anche l'esempio funzionante referenziato dalla Guida per principianti EA.

I commenti sono supportati utilizzando #:

# Calcola il punteggio di rischio ponderato
IF(businessCriticality == "missionCritical", riskScore * 2, riskScore)

Esecuzione dei calcoli

I calcoli vengono eseguiti automaticamente quando una card viene salvata. Potete anche attivare manualmente un calcolo per eseguirlo su tutte le card del tipo target:

  1. Trovate il calcolo nell'elenco
  2. Cliccate sul pulsante Esegui
  3. La formula viene valutata per ogni card corrispondente e i risultati vengono salvati

Ordine di esecuzione

Quando più calcoli mirano allo stesso tipo di card, vengono eseguiti nell'ordine specificato dal loro valore di ordine di esecuzione. Questo è importante quando un calcolo dipende dal risultato di un altro — impostate la dipendenza per essere eseguita per prima (numero inferiore).