Перейти к основному содержимому

Вычисления

Функция Вычисления (Администрирование > Метамодель > вкладка «Вычисления») позволяет определять формулы, автоматически вычисляющие значения полей при сохранении карточек. Это мощный инструмент для получения метрик, оценок и агрегаций из ваших архитектурных данных.

Как это работает

  1. Администратор определяет формулу, нацеленную на конкретный тип карточки и поле
  2. При создании или обновлении любой карточки этого типа формула запускается автоматически
  3. Результат записывается в целевое поле
  4. Целевое поле помечается как только для чтения на странице карточки (пользователи видят метку «вычисляемое»)

Создание вычисления

Нажмите + Новое вычисление и настройте:

ПолеОписание
НазваниеОписательное имя вычисления
Целевой типТип карточки, к которому применяется вычисление
Целевое полеПоле, в которое записывается результат
ФормулаВыражение для вычисления (синтаксис описан ниже)
Порядок выполненияПорядок выполнения при наличии нескольких вычислений для одного типа (меньшее значение выполняется первым)
АктивноВключить или отключить вычисление

Синтаксис формул

Формулы используют безопасный изолированный язык выражений. Вы можете ссылаться на атрибуты карточки, данные связанных карточек и информацию о жизненном цикле.

Контекстные переменные

ПеременнаяОписаниеПример
fieldKeyЛюбой атрибут текущей карточкиbusinessCriticality
related_{type_key}Массив связанных карточек данного типаrelated_applications
lifecycle_plan, lifecycle_active и т.д.Значения дат жизненного циклаlifecycle_endOfLife

Встроенные функции

ФункцияОписаниеПример
IF(condition, true_val, false_val)Условная логикаIF(riskLevel == "critical", 100, 25)
SUM(array)Сумма числовых значенийSUM(PLUCK(related_applications, "costTotalAnnual"))
AVG(array)Среднее числовых значенийAVG(PLUCK(related_applications, "dataQuality"))
MIN(array)Минимальное значениеMIN(PLUCK(related_itcomponents, "riskScore"))
MAX(array)Максимальное значениеMAX(PLUCK(related_itcomponents, "costAnnual"))
COUNT(array)Количество элементовCOUNT(related_interfaces)
ROUND(value, decimals)Округление числаROUND(avgCost, 2)
ABS(value)Абсолютное значениеABS(delta)
COALESCE(a, b, ...)Первое ненулевое значениеCOALESCE(customScore, 0)
LOWER(text)Текст в нижнем регистреLOWER(status)
UPPER(text)Текст в верхнем регистреUPPER(category)
CONCAT(a, b, ...)Объединение строкCONCAT(firstName, " ", lastName)
CONTAINS(text, search)Проверка вхождения подстрокиCONTAINS(description, "legacy")
PLUCK(array, key)Извлечение поля из каждого элементаPLUCK(related_applications, "name")
FILTER(array, key, value)Фильтрация элементов по значению поляFILTER(related_interfaces, "status", "ACTIVE")
MAP_SCORE(value, mapping)Сопоставление категориальных значений с оценкамиMAP_SCORE(criticality, {"high": 3, "medium": 2, "low": 1})

Примеры формул

Суммарная годовая стоимость связанных приложений:

SUM(PLUCK(related_applications, "costTotalAnnual"))

Оценка риска на основе критичности:

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

Количество активных интерфейсов:

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

Размещение в TIME Model (Tolerate / Invest / Migrate / Eliminate) — тот же пример, который Вы увидите в панели Formula Reference внутри Админ → Метамодель → Вычисления при создании нового вычисления. Target type = Application, target field = timeModel. Предполагается, что Вы добавили два поля single_select с именами businessFit и technicalFit с опциями 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")))

Это также рабочий пример, на который ссылается Руководство для начинающих EA.

Комментарии поддерживаются с помощью #:

# Вычислить взвешенную оценку риска
IF(businessCriticality == "missionCritical", riskScore * 2, riskScore)

Запуск вычислений

Вычисления запускаются автоматически при сохранении карточки. Вы также можете вручную запустить вычисление для всех карточек целевого типа:

  1. Найдите вычисление в списке
  2. Нажмите кнопку Запустить
  3. Формула будет вычислена для каждой соответствующей карточки, и результаты будут сохранены

Порядок выполнения

Когда несколько вычислений нацелены на один и тот же тип карточки, они выполняются в порядке, определённом их значением порядка выполнения. Это важно, когда одно вычисление зависит от результата другого — задайте зависимому вычислению более позднее выполнение (большее число).