Beregninger¶
Funktionen Beregninger (Admin > Metamodel > Beregninger-fanebladet) lader dig definere formler, der automatisk beregner feltværdier, når kort gemmes. Dette er kraftfuldt til at udlede metrikker, scores og aggregeringer fra dine arkitekturdata.
Sådan fungerer det¶
- En admin definerer en formel rettet mod en specifik korttype og felt
- Når et hvilket som helst kort af den type oprettes eller opdateres, kører formlen automatisk
- Resultatet skrives til målfeltet
- Målfeltet markeres som skrivebeskyttet på kortdetaljesiden (brugere ser et "calculated"-badge)
Oprettelse af en beregning¶
Klik på + Ny beregning og konfigurer:
| Felt | Beskrivelse |
|---|---|
| Navn | Beskrivende navn for beregningen |
| Måltype | Den korttype, denne beregning gælder for |
| Målfelt | Feltet, hvor resultatet gemmes |
| Formel | Udtrykket, der skal evalueres (se syntaks nedenfor) |
| Udførelsesrækkefølge | Udførelsesrækkefølge, når flere beregninger eksisterer for samme type (lavere kører først) |
| Aktiv | Aktivér eller deaktivér beregningen |
Formel-syntaks¶
Formler bruger et sikkert, sandboxet udtrykssprog. Du kan referere til kortegenskaber, relaterede kortdata og livscyklusinformation.
Kontekstvariabler¶
| Variabel | Beskrivelse | Eksempel |
|---|---|---|
fieldKey |
Enhver egenskab fra det nuværende kort | businessCriticality |
related_{type_key} |
Array af relaterede kort af en given type | related_applications |
lifecycle_plan, lifecycle_active, osv. |
Livscyklus-datoværdier | lifecycle_endOfLife |
Indbyggede funktioner¶
| Funktion | Beskrivelse | Eksempel |
|---|---|---|
IF(condition, true_val, false_val) |
Betinget logik | IF(riskLevel == "critical", 100, 25) |
SUM(array) |
Sum af numeriske værdier | SUM(PLUCK(related_applications, "costTotalAnnual")) |
AVG(array) |
Gennemsnit af numeriske værdier | AVG(PLUCK(related_applications, "dataQuality")) |
MIN(array) |
Minimumværdi | MIN(PLUCK(related_itcomponents, "riskScore")) |
MAX(array) |
Maksimumværdi | MAX(PLUCK(related_itcomponents, "costAnnual")) |
COUNT(array) |
Antal elementer | COUNT(related_interfaces) |
ROUND(value, decimals) |
Afrund et tal | ROUND(avgCost, 2) |
ABS(value) |
Absolut værdi | ABS(delta) |
COALESCE(a, b, ...) |
Første ikke-null værdi | COALESCE(customScore, 0) |
LOWER(text) |
Små bogstaver | LOWER(status) |
UPPER(text) |
Store bogstaver | UPPER(category) |
CONCAT(a, b, ...) |
Sammensæt strenge | CONCAT(firstName, " ", lastName) |
CONTAINS(text, search) |
Tjek om tekst indeholder delstreng | CONTAINS(description, "legacy") |
PLUCK(array, key) |
Udtræk et felt fra hvert element | PLUCK(related_applications, "name") |
FILTER(array, key, value) |
Filtrer elementer efter feltværdi | FILTER(related_interfaces, "status", "ACTIVE") |
MAP_SCORE(value, mapping) |
Map kategoriske værdier til scores | MAP_SCORE(criticality, {"high": 3, "medium": 2, "low": 1}) |
Eksempelformler¶
Samlede årlige omkostninger fra relaterede applikationer:
SUM(PLUCK(related_applications, "costTotalAnnual"))
Risikoscore baseret på kritikalitet:
IF(riskLevel == "critical", 100, IF(riskLevel == "high", 75, IF(riskLevel == "medium", 50, 25)))
Antal aktive grænseflader:
COUNT(FILTER(related_interfaces, "status", "ACTIVE"))
TIME Model-placering (Tolerate / Invest / Migrate / Eliminate) — det samme eksempel, som du vil se i panelet Formula Reference inde i Admin → Metamodel → Beregninger, når du opretter en ny beregning. Måltype = Application, målfelt = timeModel. Antager, at du har tilføjet to single_select-felter med navn businessFit og technicalFit med indstillinger 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")))
Dette er også det gennemarbejdede eksempel, der henvises til af EA Beginner's Guide.
Kommentarer understøttes ved hjælp af #:
# Calculate weighted risk score
IF(businessCriticality == "missionCritical", riskScore * 2, riskScore)
Kørsel af beregninger¶
Beregninger kører automatisk, når et kort gemmes. Du kan også manuelt udløse en beregning til at køre på tværs af alle kort af måltypen:
- Find beregningen på listen
- Klik på knappen Kør
- Formlen evalueres for hvert matchende kort, og resultaterne gemmes
Udførelsesrækkefølge¶
Når flere beregninger er rettet mod den samme korttype, kører de i den rækkefølge, der er specificeret af deres udførelsesrækkefølge-værdi. Dette er vigtigt, når én beregning afhænger af resultatet af en anden — sæt afhængigheden til at køre først (lavere nummer).