设为首页 | 收藏本站
185 1521 8668

良好的DMN模型始于数据类型赋值

发表时间:2025-04-03 11:17作者:Together规则引擎
文章附图

实际上,运行时引擎通常并不关心您是否为数据类型分配了某些决策。但是正确地将数据类型分配给模型中的所有变量,而不仅仅是决策和输入数据,还包括 BKM、上下文条目和函数参数。在这篇文章中,我们将讨论为什么这很重要以及要记住的一些基本要点。

显然,在执行DMN模型时返回正确的输出是必须的。但同样重要的是你的逻辑的透明度。任何其他了解DMN的建模者都应该很容易理解,数据类型分配在其中起着重要作用。此外,在实践中,不正确的数据类型分配通常会导致不正确的决策逻辑。因此,于良好的DMN建模,从数据类型分配开始。

DMN的表达式语言FEEL定义了一个相对较短的基本类型列表:文本,数字,布尔值,以及一些与日期,时间和持续时间相关的类型。如果要分配约束(如数值范围或允许值的枚举),或将变量定义为包含组件的结构,则需要定义命名的自定义类型或项定义。如果变量是具有相同基类型或项定义的项列表,则其类型定义为项类型的集合。

Together决策建模器中的DMN功能区列出了模型中定义的所有类型,您只需要正确命名和分配它们。以下是需要记住的几点:

j为所有模型变量分配类型

这不仅包括决策和输入数据,还包括 BKM、决策服务、上下文条目和 BKM 参数。对于 DRD 元素,该工具提供了一个数据类型覆盖,可让您在图表中看到其分配的类型,因此您不会错过任何类型。

应将与没有约束的基本类型一致的变量分配给基本类型,而不是项定义

换句话说,当基本类型可以时,不要创建项定义。此规则的一个例外是当值具有特殊含义时。例如,我经常使用项目定义 tPercent 来表示解释为百分比的数字。

共享相同基本类型和约束的变量应使用相同的项定义

例如,如果模型包含定义为正数的多个变量,则所有变量都应使用相同的项定义(如 tPositiveNumber),而不是为每个变量使用单独的项定义。

类型定义必须与变量值一致

这是根本性的,但并不总是被记住。初学者有时会定义为 Number 类型的决策包含返回结构或日期的逻辑,或者定义为 Text 类型的决策,其逻辑返回文本集合。像这样的错误会破坏透明度,通常会导致模型逻辑脱轨。

类型名称应推荐类型定义

此外,变量名称还应推荐类型。违反这些规则的频率非常高。例如,变量 Age 表示一个数字,因此其类型不应为日期或持续时间。复数名称表示集合,因此不要将其用于不是集合的结构。类型名称 tRiskScore 表示一个数字,因此不要将其用于返回类别(枚举文本)的决策。在这种情况下,请将其称为tRiskCategory。使变量和类型名称与类型定义一致是逻辑透明度的关键。

如果决策返回调用的BKM的值,则该决策和BKM必须具有相同的类型

这似乎是显而易见的,但初学者有时觉得有义务为每个变量提供自己的项目定义。所以这是上面项目的特例。

结构与集合不同

一些业务用户对此感到困惑。结构意味着变量包含称为组件的属性。例如,变量 Customer (结构化类型 tCustomer) 可能具有组件 ID、名称和电子邮件,每个组件都按名称引用:Customer.id 等。每个组件可以包含一个值,也可以本身包含其他组件。相反,集合是相同类型的项目列表。例如,变量客户 ID(类型文本集合)是 id 值的列表。列表项没有单独的名称,但按位置引用:客户 ID[1] 引用列表中的第一个 ID。复数名称通常意味着集合,因此最好不要对结构使用复数名称。

表的类型是行类型的集合,行类型是一种结构,每个表列有一个组件

表是行的集合,其中每一行都是相同的结构化类型。表变量在DMN中起着重要作用。当变量是表时,您应该首先定义行类型,这是一种数据结构,每个表列都有一个组件。那么表类型是该类型的集合。因此,如果 Customer Table 的类型为 tCustomer 的 Collection,则 Customer Table[1] 指的是表的第一行,第一个 Customer,而 Customer Table.id 指的是表的 id 列,类型为 Text 的 Collection。如果变量 Order 表示订单项列表,则应将其命名为 tOrderItem 类型 Collection,其中 tOrderItem 的每个表列包含一个组件。将行类型命名为tOrder是不正确的,因为Order引用的是集合。

将变量分配给类型不会将值转换为类型

这与上文第4条和第5条有关。如果决策借款人风险返回一个数字,将其分配给 tRiskCategory 不会将该数字转换为枚举文本值。类型分配不是魔法!它们描述了建模者对数据的理解,但不会更改数据。要将借款人风险从数字更改为类别,您需要另一个决策 - 通常是决策表。同样,类型赋值不能将项更改为列表,反之亦然。只有决策逻辑才能更改实际数据类型。

Together平台上,正确的类型分配是建模者的另一个辅助工具,即FEEL表达式编辑器的关键。输入文本表达式时,编辑器的代码完成功能会不断建议 FEEL 语法在该点允许的变量。这对于结构化变量特别有用,其中允许的变量通常是组件的名称。单击建议会在表达式中输入变量,从而加快工作速度并降低拼写错误的可能性。仅当变量已正确分配数据类型时,这才有可能。

文章分类: 前沿动态
分享到:
精选文章
公众号
关于我们
联系方式
让您的业务更自动化、智能化!
联系邮箱:   zhangy@jee-soft.cn       wangyl@jee-soft.cn
185 1521 8668
183 3562 2627
联系电话: