0

如果我的决策表中有 10 行,其中我只想执行第 6 行和第 4 行而不禁用剩余行。我们怎样才能实现这个功能?但是,在 Action Rule 中我们可以设置优先级,但我们不能为决策表中的每一行设置优先级。我尝试搜索决策表属性中可用的任何选项,但没有。请帮助解决这个问题。

4

1 回答 1

0

您可能需要实现这样的逻辑:这就是所谓的规则链。一个规则(行)进行修改,然后另一个规则(行)被激活,依此类推。

这需要 RETE 模式才能工作,请查看 RETE 的 ODM 文档,并记住在 BOM 设置中设置方法“SET NEXT”来更新 RETE。
这个例子展示了一个基于 NEXT 初始值的具有不同选项的链接机制。

| 下一个 ?| 条件 2| 积极的 ?| 行动 1   | 下一个  |
| aa1 | bb1 | 真实 | 这样做1 | aa2 |
| aa2 | bb2 | 真实 | 这样做2 | aa3 |
| aa3 | bb3 | 真实 | 这样做3 | aa7 |
| aa4 | bb4 | 假 | 这样做4 | aa6 |
| AA5 | bb5 | 真实 | 这样做5 | aa1 |
| aa6 | bb6 | 假 | 这样做6 | xxx |
| aa7 | bb7 | 真实 | 这样做7 | aa8 |
| aa8 | bb8 | 真实 | 这样做8 | aa9 |
| aa9 | bb9 | 真实 | 这样做9 | AA10 |
| AA10 | bb10 | 真实 | 这样做10 | xxx |

但这是最后的措施解决方案!

我不知道您的模型,条件等...突然之间,您可能想要修改您的条件,因为在通常情况下不需要在 DT 中选择具有优先级的规则,也就是说 99.9%的时间!

但是,如果 DT 条件列都作为分区排他性,则您可能一次匹配提供的数据的 10 行中只有一个规则(行)。然后无需排序规则执行。

但情况并非总是如此,有时 DT 中的某些规则(行)可能匹配,然后可能会在同一数据上执行少数行,这是因为某些条件可能重叠。

例如:让我们考虑这个具有两个条件列和两行(规则)和一个动作列的 DT。(没有语言化,只有逻辑)

| <= 年龄 >= | 之后的日期 |  行动  |
| 18 , 21 | 2020 年 5 月 7 日 | 这样做|
| 16 , 20 | 2020 年 5 月 12 日 | 这样做|

在这种情况下,规则条件重叠,并且对于年龄 = 19 和日期 = 12-JUNE-2020 的数据,这两个规则(行)将匹配,并且将执行“做这个”和“做那个”。

如果您的 DT 的 10 条规则(行)在运行时与提供的数据匹配,则条件不够独占,您可能需要更改/重新设计 DT 条件的设计:例如添加新的条件列,以区分规则(行)。或纠正重叠条件

让我们以前面的示例添加一个新的判别条件列:例如 GENDER

| <= 年龄 >= | 之后的日期 | 性别 |  行动  |
| 18 , 21 | 2020 年 5 月 7 日 | 中号 | 这样做|
| 16 , 20 | 2020 年 5 月 12 日 | F | 这样做|

在这种情况下,新列将允许一次只匹配一个规则。或者重做初始条件

| <= 年龄 >= | 之后的日期 |  行动  |
| 18 , 21 | 2020 年 5 月 7 日 | 这样做|
| 22 , 24 | 2020 年 5 月 12 日 | 这样做|

现在,即使第二个条件重叠,对于年龄 = 19 和日期 = 12-JUNE-2020 的数据,只有第一个规则(行)会匹配,并且“执行此操作”将被执行。

我对您想要按优先级排序的事实感到非常困惑。优先级在某些特殊情况下可能会有所帮助(再次),但如果它在所有地方都使用它总是一个问题(例如规则中超过 5 个优先级)并且它成为维护的噩梦,因为优先级永远不会传达为什么应该应用规则在另一个之前。相反,作为最佳实践,使用工作流将 ruletask 中的规则与顺序任务规则流进行分组,而 ruletask 名称传达分组/分离的语义。例如初始化数据、数据校验、数据验证、数据转换等...

每当您需要订购规则时,请在规则流中使用规则任务!然后,如果您需要这样做,您可以将您的 DT 拆分为 2 个决策表,以便第一个表中的某些规则可以在第二个决策表中的其他规则之前应用。

于 2020-06-23T20:42:05.877 回答