使用高级文字表达式(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。

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

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

在插入初始'='符号后,将显示可用变量和功能。
建议在您输入时出现。输入总和并选择总和功能。然后,插入变量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 !”、“!”)回报真正的。
逻辑运营商
不是
(布尔):布尔
否定输入布尔。
例子:不对)回报错误的。
这个页面有用吗?
- 是的
- 没有