使用高级文字表达式(DMN决策元素中的函数)

如果你已经建模了你的第一个DMN图,那么你已经熟悉了用于决策逻辑的DMN表达式,例如简单的小于陈述。这些表达式在本章中解释模拟决定

您可能会记住您从决策表编辑器的下拉列表中选择了相应的运算符。

在许多情况下,这些基本的操作符是不够的。

一个简单的例子是根据购买对象列表的总价值确定折扣。

为了确定总和,我们需要使用Signavio的高级字面表达式。这些表达是基于感觉, 这足够友好的表达语言作为DMN标准的一部分,你可以下载PDF格式的http://www.omg.org/spec/DMN/1.0/PDF

可以组合使用单个命令,如在以下示例中:

产品((1 - Discountrate)*总和(Listofitemprice))

在该示例中,考虑折扣,我们计算项目列表的总购买金额。这里使用的变量对应于输入数据元素的属性中定义的数据类型,并且可以在模拟DMN图时设置。

所有可用表达式的文档可以在下面找到所有文字表达式的文档

当然,您也可以使用标准操作符(+-*/)。

因此,上面的示例可以更简单地表达:

(1 - Discountrate)*总和(ListofiteMprices)

在决策表中使用文字表达式

在我们的示例中,我们想确定 - 如上所述 - 根据所有购买物品的总价值折扣。

首先,创造购买的物品数据输入元素。输入应该是一个列表数字类型货币。

现在创建一个决定,将其连接到数据输入并标记它确定折扣。点击表格图标,以打开Decision Table Editor。

创建一个Decision,引用Data Input元素并打开决策表编辑器。

要激活文字表达式输入,请单击“标题”并删除表中的输入引用:

删除输入引用以插入文字表达式。

输入=。显示可用变量和功能的概述:

在插入初始'='符号后,将显示可用变量和功能。

建议在您输入时出现。输入总和并选择总和功能。然后,插入变量PurchasedItems作为参数总和

插入文字表达式的总和(购买)'。

现在,决策逻辑的输入数据是所有购买项目的总和。您可以像往常一样定义决策逻辑。

介意我们示例中的第一次命中政策:

基于购买项目的总金额确定折扣的决策逻辑

使用文字表达而不是决策表

您也可以使用文字表达式代替决策表。

例如,您可以将一个决策拆分为两个菊花链元素,一个具有决策表,另一个具有文字表达式逻辑。

“计算总和”和“确定折扣”作为两个单独的决策元素。

  • 第一个元素计算已购买的项目的总和。
  • 第二个元素根据总和确定折扣。

我们可以在不使用决策表的情况下模拟第一个决定。

打开决策表编辑器并切换到字面表达式标签。在那里,插入文字表达式以计算项目的总和:

打开“文字表达式选项卡”并插入文字表达式。

现在,决策元素将物品的总和返回为数据输出,并且可以由以下决策元素引用。

如果我们创建复杂的文字表达式,我们可以定义变量 - 所谓的盒装背景并在我们的决策功能中引用它们:

使用盒装上下文管理复杂表达式。

这提高了我们的文字表达的可读性。

如果一个字面表达式定义,它取代决策逻辑决策表

所有文字表达式的文档

本节列出所有可用的文字表达式,按操作类型分组。

算术运算

ABS.

Abs(数量):数字

返回数字的绝对值。

例子Abs (5)回报5.

数数

count([num1,num2,num3]):数字

返回给定列表的元素数。

例子count([“Item1”,“Item2”,“Item3”))回报3.

圆形(数字,数字):数字

返回舍入的数字到相应数量的数字。

例子圆形(3.44,1)回报3.4

天花板

天花板(数字):数字

返回到下一个整数的数字。

例子天花板(1.3)回报2

地面

地板(数字):数字

返回一个四舍五入到下一个整数的数字。

例子地板(1.6)回报1

整数

整数(数字):数字

返回数字的整数部分。

例子整数(1.34)回报1

modulo.

模(股息、除数):数字

返回除数除以除法的剩余部分。

例子模(4,3)回报1

百分

(数量):百分比数值

返回除以100的数字。

例子百分比(10)回报0.1

力量

权力(基础,指数):数字

返回提升到指数的电源的基础。

例子电力(2,3)回报8.

产品

产品([因子1、factor2 factor3]):数字

返回因子列表的乘积。

例子产品([2,3,4])回报24

往返

RoundDown(数字,数字):数字

返回到相应数量的数字舍入的数字。

例子RoundDown (1.3674, 2)回报1.36

摘要

综写(数字,数字):数字

返回到相应数字数的数字。

例子Abs (1.344, 2)回报1.35

总和

总和([number1,科学number3]):数字

返回值列表的总和。

例子Sum([1,2,3,4,5])回报15

日期和时间操作

日(DateTime):数字

返回日期时间的日期部分。

例子天(2015-12-24T12:15:00.000 + 01:00)回报24

DayAdd

DayAdd(datetime,要添加的天数):DATE

返回日期加上提供的天数。

例子DayAdd (2015 - 12 - 24 - t12:15:00.000 + 01:00, 1)回报2015-12-25T12:15:00.000 + 01:00

Daydiff

DayDiff (datetime1 datetime2):数字

返回金额满的两个日期之间的日子。

例子Daydiff(2015-12-24T12:15:00.000 + 01:00,2015-12-25T12:15:00.000 + 01:00)回报1

日期

日期(年,月,日):日期

使用日期的标准参数返回日期:年,月,日期

例子日期(2015年12日25)回报2015-12-25

约会时间

DateTime(日、月、年、时、分、秒、小时):DATE

使用数据时间的标准参数返回DateTime。最后一个参数'souroffset'是可选的。

例子DateTime(25,12,2015,12,15,0,1)回报2015-12-24T12:15:00.000 + 01:00

小时

小时(日期时间):数字

返回DateTime的小时部分。

例子小时(2015 - 12 - 24 - t12:15:00.000 + 01:00)回报12

豪德

小时(时间):数字

返回金额满的两个日期之间的小时数。

例子Hourdiff(2015-12-24T12:15:00.000 + 01:00,2015-12-24T14:15:00.000 + 01:00)回报2

分钟

分钟(时间):数字

返回DateTime的分钟部分。

例子分钟(2015-12-24T12:15:00.000 + 01:00)回报15

分钟

Comperdiff(Datetimes1,Date2times):数字

返回金额满的两个日期之间的分钟。

例子CIMPTDIFF(2015-12-24T12:15:00.000 + 01:00,2015-12-24T13:15:00.000 + 01:00)回报60.

月(日期时间):数字

返回DateTime的月份部分。

例子月(2015-12-24T12:15:00.000 + 01:00)回报12

暂缓

knowAdd(DateTime,Worne_to_add):日期

返回DateTime加数月。

例子母朗(2015-10-10T12:15:00.000 + 01:00,1)回报2015-11-10T12:15:00.000 + 01:00

一个月

仓Diff(DateTime1,DateTime2):数字

返回金额满的两个日期之间的几个月。

例子仓迪夫(2015-10-10T12:15:00.000 + 01:00,2015-11-10T12:15:00.000 + 01:00)回报1

现在

现在():日期

返回当前日期时间。

例子现在()本来可以返回2015-11-10T12:15:00.000 + 01:00

今天

今天():日期

返回当前日期。

例子今天()本来可以返回2015-11-10

平日

工作日(datetime):数字

返回代表一周日期的数字(1到7)。

例子工作日(2016 - 02 - 09 - t12:15:00.000 + 01:00)回报3.

(datetime):数字

返回DateTime的一年。

例子年(2016 - 02 - 09 - t12:15:00.000 + 01:00)回报2016年

YearAdd (datetime, years_to_add):日期

返回DateTime加数。

例子岁月(2016-02-09T12:15:00.000 + 01:00,1)回报2017-02-09T12:15:00.000 + 01:00

YearDiff

YearDiff (datetime1 datetime2):数字

返回金额满的两个日期之间的年份。

例子YearDiff (2016 - 02 - 09 - t12:15:00.000 + 01:00, 2017 - 02年- 09年- t12:15:00.000 + 01:00)回报1

列表操作

附加

追加(列表、元素):列表

将元素添加到提供的列表的副本。返回被操纵的副本。

例子添加([2.5,5.8,4.3],6.7)回报[2.5, 5.8, 4.3, 6.7]

阑尾

用于AppendAll (list1):列表

将所有元素从第二个提供的列表添加到第一个提供的副本。返回被操纵的副本。

例子AppendAll([2.5,5.8,4.3],[2.1,3.5,7.4])回报[2.5,5.8,4.3,2.1,3.5,7.4]

压缩

邮政编码(属性、values1…, valuesN):列表

组装出列表中的对象列表属性和多个名单价值ZIP([“ID”,“值”,[23A3E98,C45DA1B],[40,120])回报[id: 23a3e98, value: 40},{id: c45da1b, value: 120}]

在决策管理器的10.11.0之前,将值传递给函数作为列表列表,例如:

Zip([“id”、“价值”],[[23 a3e98, c45da1b], [120]])

使用旧的文字表达压缩函数已自动转换为新的语法。

NotContainsAny

NotContainsAny (list1用于):布尔

确定是否list1包含任何元素用于

例子NotContainsany([“Item1”,“Item2”,[“Item2”,“Item3”))回报错误的

包含

ContainsOnly (list1用于):布尔

确定是否list1只包含用于

例子ContainsOnly((“item1”,“第二条”)(“第二条”、“item3”))回报错误的

AreElementsOf

iselementsof(list1,list2):布尔值

确定是否用于包含所有元素list1

例子AreElementsOf([“第二条,item3”],[“item1”,“第二条”,“item3”))回报真正的

去掉

此表达式仅在文字表达式编辑器中可用(不在决策表编辑器中)。

删除(列表,元素):列表

删除指定的元素从指定列表

例子删除([“Item1”,“Item2”,“Item1”)回报(“第二条”)

RemoveAll

此表达式仅在文字表达式编辑器中可用(不在决策表编辑器中)。

removeall(list1,list2):列表

删除用于list1

例子删除([“Item1”,“Item2”,“Item3”],[“Item1”,“Item2”))回报[“item3”]

统计操作

Avg.

Avg ([number1,科学number3]):数字

返回给定列表的值的平均值。

例子AVG([3,5])回报4.

马克斯

马克斯([number1,科学number3]):数字

返回给定列表的最大值。

例子Max([5,4,10])回报10

中位数

中位数([number1,科学number3]):数字

返回给定列表的中位值。

例子中位数([2,5,10,12,34,35])回报11

最小值

min([number1,number2,number3]):数字

返回给定列表的最小值。

例子分钟([5、4、10])回报4.

模式

模式([Number1,Number2,Number3]):数字

返回给定列表的最常发生的值。如果若干值最常发生(例如,每两次,则两个值出现两个值),则返回第一个(最左侧)最常见的值。

例子模式([1,2,4,4,5,6])回报4.

文字处理

Concat ([text1、text2 text3]):文本

返回给定的文本值列表的连接。

例子Concat(“你好”,“世界”,“!”)回报“你好,世界!”

isalpha.

isalpha(文字):布尔值

确定文本是否只包含字母字符(A-Z, A-Z)。umlauts和类似的角色(例如一种一种ß.)不得包括在内。

例子Isalpha(“ABCDEFG5”)回报错误的

insalphanumeric.

insalphanumeric(文字):布尔值

确定文本是否仅包含字母数字字符(A-Z,A-Z,0-9)。umlauts和类似的角色(例如一种一种ß.)不得包括在内。

例子isAlphanumeric(“abcdefg5”)回报真正的

isnumeric.

IsNumeric(文本):布尔

确定文本是否是仅包含加号或减号、数字、逗号和小数点的有效数字。

例子IsNumeric(“2.3.5”)回报错误的

发行

IsSpaces(文本):布尔

确定文本是否只包含空格。

例子ISSPACES(“”)回报真正的

Len

Len(文字):数字

返回文本字符串中的字符数。

例子Len(“五”)回报4.

较低的

较低(文本):文本

返回所有字母转换为小写的文本字符串。

例子小写大写”)回报

修剪

修剪(文字):文本

返回文本字符串,除单词之间的单个空格外,删除所有空格。

例子修剪(“你好世界!”)回报“你好,世界!”

上(文本):文本

返回包含转换为大写的所有字母的文本字符串。

例子上部(“较低”)回报“降低”

数字

号码(文本):数字

返回文本字符串中表示的数值。只有一段时间()被允许作为分隔符。

例子号(“5”)回报5.

数字

号码(text,default_value):数字

返回文本字符串中表示的数值。只有一段时间()被允许作为分隔符。返回默认值如果无法将文本转换成数字。

例子数量(5、5、10)回报10号码(“5.5”,10)回报5.5)。

中期

中期(文本、开始num_chars):文本

返回长度的字符序列num_chars.从文本字符串的相应起始位置开始。

例子中期(“Hello World!”,6,5)回报“世界”

剩下

左(文本,num_chars):文本

返回长度的字符序列num_chars.从文本字符串的开始。

例子左(“Hello World !”,5)回报“你好”

对(文字,num_chars):文本

返回长度的字符序列num_chars.从文本字符串的末尾开始。

例子正确的(“Hello World !”,7)回报“世界!”

文本

文本(num,format_text):文本

以特定格式返回一个数字值作为文本字符串。该格式由占位符指定0.还有一个小数点

例子文字(1,“#.000”)回报“1.000”

TextOccurrences

Textoccurrences(Find_text,In_text):数字

返回出现的次数find_text在_text中

例子TextocCurrences(“可以”,“你可以作为罐头可以罐头可以吗?”)回报6.

包含

包含(文本,子字符串):Boolean

确定是否文本包含子字符串

例子包含("Hello World!", "o World")回报真正的

以。。开始

StartsWith(文本、前缀):布尔

确定是否文本从这一开始就开始字首

例子Startswith(“Hello World!”,“Hello”)回报真正的

以。。结束

endswith(文本,后缀):布尔值

确定是否文本结束后缀

例子endsWith(“Hello World !”、“!”)回报真正的

逻辑运营商

不是

(布尔):布尔

否定输入布尔。

例子不对)回报错误的