能否通过DMN规则引擎验证输入表A与表B的行匹配关系?
能否用DMN规则引擎实现跨输入表的行匹配验证?
当然可以,DMN(决策模型和符号)的FEEL(友好表达式语言)原生支持集合遍历与存在性判断,完全能满足你检查Input A每行是否在Input B存在对应行的需求。下面是两种常用的实现方案:
方案1:使用决策表(Decision Table)
这是DMN中最直观的实现方式,适合可视化管理规则:
- 定义输入:
- 声明
InputA为集合类型,每个元素包含keyA1、keyA2两个属性 - 声明
InputB为集合类型,每个元素包含keyB1、keyB2两个属性
- 声明
- 配置决策表:
- 设置Hit Policy为
COLLECT(用于收集所有行的匹配结果) - 第一输入列:遍历
InputA的每一行,表达式写为currentRow(配合遍历逻辑) - 第二输入列:判断当前行在
InputB中是否存在匹配,表达式:exists(InputB, b -> b.keyB1 = currentRow.keyA1 and b.keyB2 = currentRow.keyA2) - 输出列:返回包含原行数据和匹配结果的对象,比如
{row: currentRow, isMatched: <第二输入列结果>}
- 设置Hit Policy为
方案2:使用上下文+FEEL表达式
如果不需要可视化规则,直接用FEEL表达式就能快速生成结果:
for each row in InputA return { keyA1: row.keyA1, keyA2: row.keyA2, isMatched: exists(InputB, b -> b.keyB1 = row.keyA1 and b.keyB2 = row.keyA2) }
这个表达式会遍历InputA的每一行,对每行执行存在性判断,最终返回包含所有行匹配状态的集合。
补充说明
如果你的匹配逻辑需要扩展(比如键值类型转换、模糊匹配),只需要修改exists函数内的条件即可,FEEL支持丰富的表达式语法来适配复杂场景。
内容的提问来源于stack exchange,提问作者Viksraj
相关产品推荐
相关产品推荐

