dmn中的元素
dmn中的元素
决策表是DMN规范的核心元素。 它们是实现业务与IT一致的手段。 它们非常直观:左侧列包含条件和输入值(输入input),右侧列包含结果(输出output)。 每行对应一个规则。 如果满足左侧条件,则将右侧结果会传回。
决策表应始终保持业务的可读性。 技术术语(例如,针对某些类型的数据的映射)隐藏在后台。 条件可以用FEEL表达语言表达。
Business-IT-Alignment名词解释:决策表具有被大多数业务用户轻松理解的巨大优势,但是合适的决策引擎可以直接执行表。 因此,在这一领域中实现业务与IT的一致性非常容易。 充分利用它!
让我们看一个例子。 假设您要做出一个非常重要的决定:您要煮什么饭。。 有什么投入? 好吧,这可能取决于一年中的时间,并且可能会导致产生一个如图6.2所示的决策表。 (是的,整个春季吃芦笋可能会很乏味,但我们只是开始使用DMN。)
图6.2:一个简单的决策表。
即使您愿意接受单调的用餐计划,也无法用六个月的肉类菜肴招待客人,尤其是其中一些可能是素食主义者。 我们将在决策表中添加另一个输入列。 多列始终通过AND(并且)链接,因此必须满足所有条件。 尽管如果将单元格留空,引擎不会考虑该条件。因此,在图6.3的示例中,春季总是会有芦笋。万岁!
图6.3:决策表可以包含多个输入列。 条件由AND链接。
仔细看看桌子。 结果,有两个新规则来提供面食。 这些规则之间的唯一区别是季节。 这个非常好用和容易理解,但是我们可以使用逗号分隔符来压缩它。 逗号在单元格中表示“或”。 因此,图6.4中的表具有相同的内容,但更易于掌握。
图6.4:在单个单元格中,可以用逗号分隔不同的条件。 因此,条件通过OR链接。
到目前为止,在比较中我们只限于相等比较(=)。 也可以使用其他算术比较操作,我们可以在表中显式使用它们。 假设您想提供干熟的牛排,但您只能为有限的客人提供。 图6.5显示了相应的决策表。 干熟的牛排最多只能容纳三位客人,而大批的牛排则便宜些。
图6.5:比较不限于相等。
还有一种使表格更易于阅读的方法。 DMN使链接单元成为可能,并且链接的所有单元都具有相同的条件,因此图6.6给出了一个整齐的版本。 这里的差异似乎很小,但是在较大的表中,它可以大大提高可读性。
图6.6:可以链接单元以提高可读性。
您想定义合适的配菜吗? 这很简单,因为DMN允许根据需要提供任意数量的结果列。 图6.7显示了决策表。
图6.7:可能有几个结果列。
您可能已经使用了最后几个示例,想知道为什么我们经常在表中写对与错,而不是是或否,或者为什么我们将季节和餐食用引号引起来。 它是为了容纳FEEL表达语言; 始终必须将决策表转换为有效的FEEL。 让我们仔细看看。
BPMN-Tooling:由于DMN决策表可以执行,因此必须将它们转换为正确的FEEL,因此表需要包含有效的表达式。 工具可以通过提供视图(例如,为了业务IT协调而隐藏某些FEEL特性)来提供很多帮助。 因此,它可能会帮助您找到一个在仍在后台存储true和false的同时显示yes和no的工具。
6.2.2决策表中的表达式
图6.8:决策表被转换为FEEL表达式。
我们使用FEEL在表格中定义表达条件。 更准确地说,表格在后台转换为FEEL,如图6.8所示。 决策表的以下元素存在:
1、输入表达式在列标题中定义。 在自动化过程中,必须在这里引用变量,或者使用复杂的表达式(计算)。 您可以隐藏技术表达式,以使列标题在技术上仍然可读。
2、 输入条目是单个单元格。 通常,您输入具体值(文学)在那里。 根据标准,尽管制造商扩展可能使您无法在单元格中使用计算或函数调用。
3、输出表达式是结果的列标题。 通常,这是结果变量的名称。
4、 输出条目是结果单元格。 它通常包含特定值(文字),但原则上也可以是表达式。 因此允许进行计算或函数调用。
最好是再看一些示例,并专注于决策表中的常见构造。 有关FEEL的更多详细信息(顺便说一句,也可以在决策表之外应用)将在后续文章中介绍。
在上一节中,我们熟悉了简单的比较,但是如果您想为6、7或8位客人烹饪菠菜,会发生什么呢? 您可以使用逗号(6,7,8),尽管在处理较大的值范围时这很烦人。 这就是FEEL识别范围的原因,这使得图6.9中的表格成为可能。
图6.9:使用[..]表示范围。
实际上,我们在这里隐藏了更多的感觉。 NOT功能会否定条件,这意味着我们仅在春季不吃宽面条时才吃。
我们说逗号充当“或”链接;它可以在任意条件下使用。 一个迷信的数学家甚至在春季只有几个客人就可以吃绿芦笋,如图6.10所示。
图6.10:条件之间的复杂OR链接可以用逗号分隔。
您应该特别注意逻辑链接提供的可能性。 决策表中可以表达的内容是有限制的,老实说,我们已经遇到了所有限制。 例如,您可能无法通过AND在一个单元格中链接条件。 相反,您将不得不在列之间拆分条件。图6.11显示了如何拆分范围[6..8]。它还显示了NOT功能的另一个示例。
图6.11:两个条件之间的AND链接只能使用两列。
如果您想找出排除对象,则需要将它们显示在方括号内。 换句话说,您不能写: not(“spring”), not(“summer”)
因为它总是不是春天或夏天。
最后,我们要提到的是,FEEL还可以识别其他类型的数据,例如时间,日期和持续时间。 这意味着您可以轻松地表达自己想要在新年前夜吃火锅的事实。 如图6.12所示。
图6.12:由于使用了日期数据类型,因此我们可以在除夕来品尝火锅!
如您所见,我们需要检查冬季规则,以免除夕。这与点击政策有关。 当前,我们正在使用唯一的匹配策略,该策略由表格最左侧列的标题中的U指示。 该表的确切一条规则(即一行)必须对应。 我们不能吃火锅和炖牛肉。 根本是不允许的。 这似乎不公平,但这显然是表格所表达的。 让我们仔细看看计算策略的使用。
相关教程
- 2020-04-04
- 2020-04-04
- 2020-04-04
- 2020-04-04
- 2020-04-04
- 2020-04-03
- 2020-04-03
- 2020-04-03
- 2020-04-03
- 2020-03-31