设为首页 | 收藏本站
18515218668

DMN内置函数解析

发表时间:2026-04-01 11:31作者:Together规则引擎
文章附图

根据DMN规范,FEEL语言提供了一系列标准的内置函数库,旨在促进决策模型的可移植性和互操作性。这些函数主要分布在转换、布尔、字符串、列表、数值、日期时间及上下文等多个类别中。

以下是DMN内置函数的详细分类详解:

1.转换函数(Conversion Functions)

用于在不同数据类型之间进行转换,特别是将字符串解析为数值或日期时间。

l   date(from):将日期字符串或日期时间值转换为日期(忽略时间部分)。

示例:date("2012-12-25")。

l   time(from):从字符串、日期时间或具体参数(时、分、秒、偏移量)创建时间。

示例:time("23:59:00z")。

l   number(from,grouping,decimal):将字符串转换为数值。需指定分组分隔符和小数点分隔符以处理特定格式(如1000,0)。

l   string(from):将非空值(如数值、布尔值)转换为字符串。

l   duration(from):将符合ISO8601标准的字符串转换为持续时间。

l   range(from):根据规范将范围字符串转换为范围对象。

2.布尔函数(Boolean Functions)

not(negand):逻辑取反。遵循三值逻辑:not(true)为false,not(null)仍为null。

3.字符串函数(String Functions)

用于文本的处理与匹配。

l   substring(string,start,length?):从指定位置开始截取长度为$n$的子串。位置为1表示首字符,-1表示最后一个字符。

l   string length(string):返回字符串中的字符数或Unicode代码点数量。

l   upper case(string)/lowercase(string):进行大小写转换。

l   contains(string,match):判断字符串是否包含匹配项。

l   start swith/endswith:判断字符串的开头或结尾是否匹配。

l   string join(list,delimiter?):将列表中的字符串元素用分隔符连接。

l   replace(input,pattern,replacement):使用正则表达式进行模式匹配并替换。

4.列表函数(ListFunctions)

列表函数支持对集合数据的聚合、筛选和转换。

l   聚合函数:

count(list):返回列表的大小,空列表返回0。

min(list)/max(list):返回列表中最小或最大的可比较项。

sum(list):计算数值列表的总和。

mean(list):计算数值列表的算术平均值。

all(list)/any(list):对布尔列表进行逻辑“与”或“或”的聚合。

l   结构操作:

append(list,item...):向列表末尾添加元素。

concatenate(list...):连接多个列表。

distinctvalues(list):去除列表中的重复项。

flatten(list):平整嵌套列表。

reverse(list):翻转列表元素顺序。

sort(list,precedes):使用排序函数对列表进行排序。

l   统计函数:包括stddev(标准差)、mode(众数)和median(中位数)。

5.数值函数(NumericFunctions)

l   decimal(n,scale):将数值$n$四舍五入到指定的小数位数。

l   floor(n)/ceiling(n):向下或向上取整。

l   roundup/rounddown/roundhalfup/roundhalfdown:提供多种细分的舍入模式。

l   abs(n):返回绝对值,支持数值、持续时间。

l   modulo(dividend,divisor):计算除法的余数。

l   sqrt/log/exp:开平方、自然对数(以$e$为底)和指数函数。

6.范围与时间属性函数

l   范围函数:受HL7CQL标准启发,提供before、after、overlaps、includes、during、starts、finishes等函数,用于判断点与范围或范围与范围之间的关系。

l   时间分量获取:

dayofyear、dayofweek、monthofyear、weekofyear。

7.上下文函数(ContextFunctions)

l   get value(m,key):从上下文$m$中提取指定键的值。

l   get entries(m):将上下文转换为键值对(Key-ValuePair)列表。

l   context(entries):从键值对列表创建新的上下文。

l   context put(context,key,value):在现有上下文中更新或添加条目。

l   context merge(contexts):合并多个上下文,若键冲突则后者覆盖前者。

8.杂项函数(Miscellaneous)

l   now():返回当前的日期和时间。

l   today():返回当前的日期。

特别注意:B-FEEL的差异

在DMN1.6引入的B-FEEL方言中,为了对业务人员更友好,许多原本在FEEL中返回null(代表错误)的内置函数被修改为返回默认值:

l   数值类:出错时返回0(如sum([]))。

l   布尔类:出错时通常返回false(如matches("badpattern","[0-9"))。

l   字符串类:出错时返回空字符串""(如lowercase(12))。

集合类:出错时返回空集合[]。

文章分类: DMN建模
分享到:
精选文章
公众号
关于我们
联系方式
让您的业务更自动化、智能化!
联系邮箱:   zhangyi@rongtek.com      wangyilong@rongtek.com
咨询热线:185 1521 8668        183 3562 2627
电话:010-8200081