Политика совпадений DMN
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |

Таблица решений имеет политику совпадений, которая определяет, из чего состоят результаты вычисления таблицы решений.
Политика совпадений задаётся в атрибуте hitPolicy XML-элемента decisionTable.
Если политика совпадений не задана, используется политика по умолчанию UNIQUE.
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="definitions" name="definitions" namespace="http://camunda.org/schema/1.0/dmn">
<decision id="dish" name="Dish">
<decisionTable id="decisionTable" hitPolicy="RULE ORDER">
<!-- .. -->
</decisionTable>
</decision>
</definitions>
Движок DMN OpenBPM поддерживает следующие политики совпадений:
| Политика совпадений | Представление в XML | Unique |
|---|---|---|
UNIQUE |
Any |
ANY |
First |
FIRST |
Rule order |
RULE ORDER |
Collect |
COLLECT |
Роль политики совпадений
Политика совпадений определяет, сколько правил таблицы решений может быть удовлетворено и какие из удовлетворённых правил включаются в результат таблицы решений. Политики совпадений Unique, Any и First всегда возвращают не более одного удовлетворённого правила. Политики совпадений Rule Order и Collect могут возвращать несколько удовлетворённых правил.
Политика совпадений Unique
Может быть удовлетворено только одно правило либо ни одного. Результат таблицы решений содержит выходные условия удовлетворённого правила.
Если удовлетворено более одного правила, политика совпадений Unique нарушается.
См. следующую таблицу решений.
В зависимости от текущего сезона следует выбрать блюдо.
Может быть выбрано только одно блюдо, так как в один момент времени может существовать только один сезон.
Политика совпадений Any
Может быть удовлетворено несколько правил. Однако все удовлетворённые правила должны порождать одинаковый выход. Результат таблицы решений содержит только выход одного из удовлетворённых правил.
Если удовлетворено несколько правил, порождающих разные выходы, политика совпадений нарушается.
См. следующий пример:
Это таблица решений для заявления на отпуск. Если у заявителя
не осталось дней отпуска или он в настоящее время находится на испытательном сроке, заявление будет отклонено.
В противном случае заявление одобряется.
Политика совпадений First
Может быть удовлетворено несколько правил. Результат таблицы решений содержит только выход первого удовлетворённого правила.
См. приведённую выше таблицу решений для рекламы. С учётом текущего возраста пользователя принимается
решение о том, какую рекламу следует показать. Например, пользователю 19 лет. Все правила совпадут, но поскольку
политика совпадений установлена в First, используется только реклама автомобилей (Cars).
Политика совпадений Rule Order
Может быть удовлетворено несколько правил. Результат таблицы решений содержит выход всех удовлетворённых правил в порядке следования правил в таблице решений.
Снова рассмотрим пример с рекламой, но уже с политикой rule order. Допустим, у нас снова пользователь в возрасте 19 лет.
Все правила удовлетворены, поэтому выдаются все выходы, упорядоченные по порядку правил.
Это можно использовать, например, для указания приоритета отображаемой рекламы.
Политика совпадений Collect
Может быть удовлетворено несколько правил. Результат таблицы решений содержит выход всех удовлетворённых правил в произвольном порядке в виде списка.
С этой политикой совпадений список выходов не имеет упорядочивания. Поэтому реклама будет произвольной,
если, например, возраст равен 19.
Кроме того, для политики совпадений Collect можно указать агрегатор. Если агрегатор указан, результат таблицы решений будет содержать только одно выходное условие. Агрегатор сформирует выходное условие из всех удовлетворённых правил. Примечание: если политика совпадений Collect используется с агрегатором, таблица решений может иметь только один выход.
Агрегатор задаётся в атрибуте aggregation XML-элемента decisionTable.
<decisionTable id="decisionTable" hitPolicy="COLLECT" aggregation="SUM">
<!-- .. -->
</decisionTable>
Агрегаторы для политики совпадений Collect
В визуальном представлении таблицы решений в дополнение к политике совпадений COLLECT можно выбрать агрегатор. Движок DMN OpenBPM поддерживает
следующие агрегаторы:
| Визуальное представление | Представление в XML | Результат агрегации |
|---|---|---|
Collect (Sum) |
SUM |
сумма всех выходных значений |
Collect (Min) |
MIN |
наименьшее из всех выходных значений |
Collect (Max) |
MAX |
наибольшее из всех выходных значений |
Collect (Count) |
COUNT |
количество выходных значений |
Агрегатор SUM
Агрегатор SUM суммирует все выходы удовлетворённых правил.
Показанную таблицу решений можно использовать для суммирования надбавки к зарплате сотрудника. Например, сотрудник работает в компании
3,5 года. Тогда первое, второе и третье правила совпадут, и результат таблицы решений равен 600, так как выходы суммируются.
Агрегатор MIN
Агрегатор MIN можно использовать для возврата наименьшего выходного значения из всех удовлетворённых правил.
См. следующий пример со страхованием автомобиля. После нескольких лет без аварий страховой взнос уменьшается.
Например, если вход для таблицы решений равен 3,5 года, результат будет 98,83, так как первые три правила совпадают,
но третье правило имеет минимальный выход.
Агрегатор MAX
Агрегатор MAX можно использовать для возврата наибольшего выходного значения из всех удовлетворённых правил.

Эта таблица решений представляет решение о сумме карманных денег для ребёнка. В зависимости от возраста сумма растёт. Например, вход 9 удовлетворит первое и второе правила. Выход второго правила больше выхода первого правила, поэтому выход будет равен 5. Ребёнок в возрасте 9 лет получит 5 в качестве карманных денег.
Агрегатор COUNT
Агрегатор COUNT можно использовать для возврата количества удовлетворённых правил.

Например, снова рассмотрим таблицу решений с надбавкой к зарплате, на этот раз с агрегатором COUNT. При входе 4 будут удовлетворены первые три правила. Следовательно, результат таблицы решений будет равен 3, что означает, что после 4 лет результат таблицы решений составляет 3 надбавки к зарплате.
Лицензия и атрибуция
Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .
Оригинал документации: https://docs.camunda.org