在 DMN(决策模型与符号)规范中,决策表 (Decision Table) 是一种极其重要的框式表达式,它通过表格形式将复杂的业务决策逻辑离散化,建立起输入组合与输出结果之间的映射关系。

以下是对决策表的详细解析:
1. 基本定义与构成
决策表是一种标准化的符号,用于表达决策逻辑,它包含且仅包含确定输出所需的全部输入。
l 信息项目名称 (Information Item name): 通常是该决策表所属的决策或业务知识模型的名称。
l 输入子句(Input Clauses): 由输入表达式(如“客户状态”)和可选的允许值范围组成。
l 输出子句 (Output Clauses): 包含名称和可选的允许输出值列表。如果只有一个输出,名称可省略;两个及以上则称为输出组件。
l 注释子句 (Annotation Clauses): 零个或多个命名列,用于记录规则的说明性文字(如“政策依据”),不参与逻辑计算。
l 决策规则 (Decision Rules): 表中的每一行(或列)代表一条规则,由特定的输入条目和对应的输出条目组成。
2. 表格布局与展示 (Orientation)
根据逻辑的复杂程度和展示需求,决策表有三种标准方向:
l 水平方向 (Horizontal): 规则作为行,子句作为列。这是最常用的格式,输入位于左侧,输出位于右侧。
l 垂直方向 (Vertical): 规则作为列,子句作为行。适用于规则较多而输入较少的情况。
l 交叉表 (Crosstab): 由两个输入维度组成的二维网格,输出位于右下角。交叉表默认必须是完备且不重叠的(即 Unique 策略)。
3. 规则匹配逻辑
l 匹配机制: 当所有输入表达式的值都满足对应规则的输入条目时,该条规则被视为“命中”。
l 无关项 ('-'): 破折号表示该项输入对该规则无关,任何输入值都能满足此条目。
l S-FEEL 支持: 决策表通常使用 S-FEEL(简单友好表现力表达式语言)来编写输入/输出条目,支持区间(如 [18..60])、比较符和列表测试。
4. 命中策略 (Hit Policy)
当多个规则可能同时匹配给定的输入组合时,命中策略决定了最终产生什么结果。它由首字母标识符表示:
单次命中策略 (Single Hit) —— 仅返回一个结果:
1. 唯一 (Unique, U): 默认策略,逻辑上规则不允许重叠,每次只能命中一条规则。
2. 任意 (Any, A): 允许重叠,但所有匹配规则的输出必须完全相同。
3. 优先级 (Priority, P): 返回输出值列表中优先级最高的结果。
4. 第一 (First, F): 按照规则在表中的定义顺序,返回第一条匹配规则的结果。
多次命中策略 (Multiple Hit) —— 返回结果列表或聚合值:
1. 集合 (Collect, C): 以任意顺序返回所有匹配项的列表。可带有聚合算子:+ (Sum), < (Min), > (Max), (Count)。
2. 规则顺序 (Rule order, R): 按表中定义的顺序返回所有结果列表。
3. 输出顺序 (Output order, O): 按预定义的输出值优先级返回结果列表。
5. 执行语义与错误处理
l 默认输出值: 如果没有任何规则匹配,决策表可以指定一个默认值。若未指定且无匹配,则返回 null。
l B-FEEL 的优化:在 1.6 版本引入的 B-FEEL 下,收集策略的聚合函数变得更健壮。例如,sum([]) 在标准 FEEL 中返回 null,而在 B-FEEL 中返回 0,且会自动忽略非数值项。
可交换性:决策表的逻辑可以通过 XML 或 XMI 格式在不同厂商的工具之间精准交换,确保决策模型的统一。