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

Вычисления

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

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

  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. Формула будет вычислена для каждой соответствующей карточки, и результаты будут сохранены

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

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