本页内容

高级函数

这些函数系列完善了表达式语言。以下各组列出相应函数及其参数、返回类型和示例。

文本和模式函数

正则表达式函数

用于通过正则表达式匹配和替换模式的函数。

regexMatch

(text, pattern)

测试字符串是否匹配正则表达式模式。

参数
text string 要测试的字符串
pattern string 正则表达式模式
返回值 boolean
示例
regexMatch("abc123", "[0-9]+") true
regexMatch("hello", "^[0-9]+$") false
另请参阅

regexReplace

(text, pattern, replacement)

替换字符串中正则表达式模式的所有匹配项。

参数
text string 输入字符串
pattern string 要匹配的正则表达式模式
replacement string 替换字符串
返回值 字符串
示例
regexReplace("abc123def456", "[0-9]+", "#") abc#def#
regexReplace("hello world", "\s+", " ") hello world
另请参阅

regexExtract

(text, pattern, group?)

从字符串中提取正则表达式模式的第一个匹配项。也可以选择提取指定的捕获组。

参数
text string 输入字符串
pattern string 正则表达式模式
group (可选) number 捕获组索引,0表示完整匹配 (默认值: 0)
返回值 字符串
示例
regexExtract("abc123def", "[0-9]+") 123
regexExtract("2025-01-15", "(\d{4})-(\d{2})", 1) 2025
另请参阅

字符串工具

其他字符串处理函数。

repeat

(text, count)

按指定次数重复文本。

参数
text string 要重复的文本
count number 重复次数
返回值 字符串
示例
repeat("ab", 3) "ababab"

countOccurrences

(text, search)

统计子字符串不重叠出现的次数。

参数
text string 要搜索的文本
search string 要查找的子字符串
返回值 数字
示例
countOccurrences("abcabc", "abc") 2

split

(text, delimiter, index)

按分隔符拆分文本,并返回第n部分,索引从1开始。

参数
text string 要拆分的文本
delimiter string 用于拆分的分隔符
index number 要返回部分的从1开始的索引
返回值 字符串
示例
split("a-b-c", "-", 2) "b"

exact

(a, b)

区分大小写的字符串比较。如果两个字符串完全相同,则返回true。

参数
a string 第一个字符串
b string 第二个字符串
返回值 布尔值
示例
exact("Hello", "hello") false

日期和时长辅助函数

时长辅助函数

将毫秒Duration转换为常用时间单位。

durationInDays

(ms)

将毫秒转换为天。

参数
ms number 以毫秒为单位的Duration
返回值 数字
示例
durationInDays(86400000) 1
durationInDays(caseThroughputTime) 以天为单位的ThroughputTime

durationInHours

(ms)

将毫秒转换为小时。

参数
ms number 以毫秒为单位的Duration
返回值 数字
示例
durationInHours(3600000) 1
durationInHours(stepDuration) 以小时为单位的StepDuration

durationInMinutes

(ms)

将毫秒转换为分钟。

参数
ms number 以毫秒为单位的Duration
返回值 数字
示例
durationInMinutes(60000) 1
durationInMinutes(waitingTime) 以分钟为单位的WaitingTime

durationInSeconds

(ms)

将毫秒转换为秒。

参数
ms number 以毫秒为单位的Duration
返回值 数字
示例
durationInSeconds(1500) 1.5

日期构造

根据组成部分创建日期,或将字符串解析为日期。

date

(year, month, day)

根据年、月、日创建UTC日期。

参数
year number 年份
month number 月份(1-12)
day number 月份中的日期
返回值 日期
示例
date(2024, 1, 1) 1704067200000
date(2024, 6, 15) 2024年6月15日

toDate

(value, format?)

将值解析为日期。支持数字(如纪元毫秒)或字符串。

参数
value any 要转换为日期的值
format (可选) string 日期格式模式(可选)
返回值 日期
示例
toDate(1704067200000) 1704067200000
toDate("2024-01-15") 2024年1月15日
toDate("31/12/2024 23:45:59", "dd/MM/yyyy HH:mm:ss") 1735688759000
备注

提供格式时,请使用与formatDate相同的受支持标记。解析基于UTC。

today

()

返回当前日期在UTC午夜时的值。

返回值 日期
示例
today() UTC午夜时的当前日期

日期周期边界

将日期截断或舍入到周期边界。

startOfDay

(date)

将日期截断到当天开始,即午夜。

参数
date date 要截断的日期
返回值 日期
示例
startOfDay(StartTime) 同一天的午夜

startOfWeek

(date)

返回本周的开始时间,即星期一。

参数
date date 日期
返回值 日期
示例
startOfWeek(StartTime) 同一周的星期一

startOfMonth

(date)

返回当月第一天。

参数
date date 日期
返回值 日期
示例
startOfMonth(StartTime) 当月第一天

startOfYear

(date)

返回当年1月1日。

参数
date date 日期
返回值 日期
示例
startOfYear(StartTime) 1月1日

endOfWeek

(date)

返回本周结束时间,即星期日23:59:59。

参数
date date 日期
返回值 日期
示例
endOfWeek(StartTime) 星期日结束时间

endOfMonth

(date)

返回当月最后一天的23:59:59。

参数
date date 日期
返回值 日期
示例
endOfMonth(StartTime) 当月最后一天结束时间

endOfYear

(date)

返回12月31日的23:59:59。

参数
date date 日期
返回值 日期
示例
endOfYear(StartTime) 12月31日结束时间

日期快捷函数

用于常见日期差值和日期加法操作的便捷函数。

daysBetween

(date1, date2)

返回两个日期之间相差的天数。

参数
date1 date 开始日期
date2 date 结束日期
返回值 数字
示例
daysBetween(StartTime, EndTime) 两个日期之间的天数

hoursBetween

(date1, date2)

返回两个日期之间相差的小时数。

参数
date1 date 开始日期
date2 date 结束日期
返回值 数字
示例
hoursBetween(StartTime, EndTime) 两个日期之间的小时数

minutesBetween

(date1, date2)

返回两个日期之间相差的分钟数。

参数
date1 date 开始日期
date2 date 结束日期
返回值 数字
示例
minutesBetween(StartTime, EndTime) 两个日期之间的分钟数

secondsBetween

(date1, date2)

返回两个日期之间相差的秒数。

参数
date1 date 开始日期
date2 date 结束日期
返回值 数字
示例
secondsBetween(StartTime, EndTime) 两个日期之间的秒数

addDays

(date, days)

向日期添加天数。

参数
date date 基准日期
days number 要添加的天数
返回值 日期
示例
addDays(StartTime, 5) 5天后的日期

addHours

(date, hours)

向日期添加小时数。

参数
date date 基准日期
hours number 要添加的小时数
返回值 日期
示例
addHours(StartTime, 3) 3小时后的日期

addMinutes

(date, minutes)

向日期添加分钟数。

参数
date date 基准日期
minutes number 要添加的分钟数
返回值 日期
示例
addMinutes(StartTime, 30) 30分钟后的日期

addSeconds

(date, seconds)

向日期添加秒数。

参数
date date 基准日期
seconds number 要添加的秒数
返回值 日期
示例
addSeconds(StartTime, 45) 45秒后的日期

endOfDay

(date)

返回指定日期当天的结束时间23:59:59.999。

参数
date date 输入日期
返回值 日期
示例
endOfDay(StartTime) 同一天的23:59:59

startOfQuarter

(date)

返回指定日期所在季度的第一天。

参数
date date 输入日期
返回值 日期
示例
startOfQuarter(StartTime) 对于6月的日期,返回2024-04-01

endOfQuarter

(date)

返回给定日期所在季度的最后时刻。

参数
date date 输入日期
返回值 日期
示例
endOfQuarter(StartTime) 6月日期对应的2024-06-30T23:59:59Z

逻辑辅助函数

多分支条件

将值与多个条件进行匹配。

switch

(value, match1, result1, ..., default?)

将值与条件列表进行匹配,并返回对应结果。类似于多分支if。

参数
value any 要匹配的值
match1, result1, ... any 匹配值和结果对
default (可选) any 无匹配时的默认结果,可选
返回值 任意
示例
switch("a", "a", 1, "b", 2, 0) 1
switch(Status, "Open", 1, "Closed", 2, 0) Open时返回1,Closed时返回2,否则返回0
备注

接受可变数量的参数:switch(value, match1, result1, match2, result2, ..., default)

范围检查

检查值是否处于指定范围内,或将其限制在范围内。

between

(value, low, high)

如果值处于low和high之间且包含边界,则返回true。

参数
value number 要检查的值
low number 下限
high number 上限
返回值 布尔值
示例
between(5, 1, 10) true
between(Amount, 100, 1000) 如果Amount处于100到1000之间,则返回true

clamp

(value, min, max)

将值限制在[min, max]范围内。

参数
value number 要限制的值
min number 最小值
max number 最大值
返回值 数字
示例
clamp(15, 0, 10) 10
clamp(Score, 0, 100) 将Score限制在0到100之间

Let绑定

将中间值绑定到名称,以便在复杂表达式中使用。

let

(name, value, body)

将值绑定到名称,并使用该绑定计算主体表达式。

参数
name string 变量名、字符串字面量
value any 要绑定的表达式
body any 使用已绑定变量的表达式
返回值 任意
示例
let("avg", caseAvg(Amount), Amount - avg) 与案例平均值的偏差
let("x", Amount * 2, let("y", x + 3, x * y)) 嵌套let绑定

流程、活动和SLA函数

前置条件谓词

检查案例中的活动是否由其他活动先发生。

directlyPrecededBy

(activity, predecessor)

如果第一个活动在案例中紧接着由第二个活动发生,则返回true。

参数
activity string 要检查的活动
predecessor string 预期的前置活动
返回值 布尔值
示例
directlyPrecededBy("Approve", "Review") 如果Review紧接在Approve之前,则返回true
另请参阅

eventuallyPrecededBy

(activity, predecessor)

如果第一个活动在案例中最终由第二个活动先发生,则返回true。

参数
activity string 要检查的活动
predecessor string 预期的前置活动
返回值 布尔值
示例
eventuallyPrecededBy("Ship", "Order") 如果Order在案例中出现在Ship之前,则返回true
另请参阅

返工检测

识别同一案例中活动重复执行的返工模式。

isRework

Property

如果当前活动此前已在该案例中发生,则返回true。

Type boolean

reworkCount

Property

案例中重复活动执行的总次数。

Type number

activityOccurrence

Property

该活动在案例中的发生次数:第一次为1,第二次为2,以此类推。

Type number

活动查询

查询案例中的活动是否存在及其出现次数。

hasActivity

(activityName)

如果指定活动在案例中的任意位置出现,则返回true。

参数
activityName string 要检查的活动名称
返回值 布尔值
示例
hasActivity("Approve") 如果案例包含Approve活动,则返回true

activityCount

(activityName)

返回指定活动在案例中出现的次数。

参数
activityName string 要统计的活动名称
返回值 数字
示例
activityCount("Review") 案例中Review活动的数量

活动间计时

测量案例中特定活动之间的时间。

timeBetween

(activityA, activityB)

返回活动A首次出现与活动B首次出现之间的时间。

参数
activityA string 第一个活动
activityB string 第二个活动
返回值 数字
示例
timeBetween("Submit", "Approve") 从Submit到Approve的毫秒数

timeSinceActivity

(activityName)

从当前事件之前指定活动最后一次出现起经过的时间。

参数
activityName string 活动名称
返回值 数字
示例
timeSinceActivity("Start") 距上一次Start活动的时间

timeToActivity

(activityName)

从当前事件起到指定活动下一次出现之前的时间。

参数
activityName string 活动名称
返回值 数字
示例
timeToActivity("Complete") 距下一次Complete活动的时间

SLA函数

服务级别协议监控和违约检测。

slaBreached

(duration, threshold)

如果持续时间超过SLA阈值,则返回true。

参数
duration number 实际持续时间
threshold number SLA阈值
返回值 布尔值
示例
slaBreached(100000, 86400000) false
slaBreached(caseThroughputTime, 86400000) 如果案例超过24小时SLA,则返回true

slaRemaining

(startDate, slaDuration)

返回SLA违约前的剩余时间,违约后返回负值。

参数
startDate date 开始时间戳
slaDuration number 以毫秒为单位的SLA时长
返回值 数字
示例
slaRemaining(caseStartTime, 172800000) 48小时SLA的剩余时间

caseAge

Property

从案例开始到当前时刻经过的时间,以毫秒表示,即从第一个事件到现在的时间。

Type number

自循环检测

检测并统计同一活动连续发生的自循环模式。

isSelfLoop

Property

如果当前活动与案例中的上一个活动相同,则返回true。

Type boolean

selfLoopCount

Property

当前案例中同一活动连续重复的次数。

Type number

资源分析

检测案例中的资源交接和变更。

isResourceChange

(expr)

如果表达式值与上一个事件相比发生变化,则返回true。

参数
expr any 用于检查变更的列表达式
返回值 布尔值
示例
isResourceChange(Resource) 资源与上一个事件不同时返回true

resourceHandoffCount

(expr)

统计案例中的值变更次数。

参数
expr any 要统计其变更的列表达式
返回值 数字
示例
resourceHandoffCount(Resource) 对于Alice→Alice→Bob→Bob→Alice,返回2
备注

Athena支持的表达式暂不可用。对于后端查询,请在派生属性中结合使用isResourceChange(expr)和caseCountIf(...)。

统计、排名和值变化

排名函数

按表达式值对案例内或所有事件中的事件进行排名。

caseRank

(expr)

当前事件在案例中的排名,按表达式值排序;并列排名之间保留间隔。

参数
expr number 用于排名的表达式
返回值 数字
示例
caseRank(Amount) 按案例内的Amount排名

caseDenseRank

(expr)

案例内的密集排名,并列排名之间不留间隔。

参数
expr number 用于排名的表达式
返回值 数字
示例
caseDenseRank(Amount) 按案例内的Amount进行密集排名

allRank

(expr)

在所有事件中进行排名。

参数
expr number 用于排名的表达式
返回值 数字
示例
allRank(Duration) 按Duration进行全局排名

allPercentRank

(expr)

在所有事件中的百分位排名,范围为0到1。

参数
expr number 用于排名的表达式
返回值 数字
示例
allPercentRank(Duration) 百分位排名(0到1)

值变更检测

检测事件之间的值变化。

changed

(expr)

如果表达式值与上一个事件不同,则返回true。

参数
expr any 要检查变化的表达式
返回值 布尔值
示例
changed(Resource) 如果Resource与上一个事件相比发生变化,则返回true

caseChanges

(expr)

统计案例中所有事件的值变化次数。

参数
expr any 要检查变化的表达式
返回值 数字
示例
caseChanges(Resource) 案例中的资源交接次数
备注

Athena支持的表达式暂不可用。对于后端查询,请在派生属性中结合使用changed(expr)和caseCountIf(...)。

条件运行聚合

计算截至当前事件的带条件累计聚合值。

caseRunningSumIf

(expr, condition)

计算截至当前事件的带条件累计总和。

参数
expr number 要汇总的表达式
condition boolean 用于筛选事件的条件
返回值 数字
示例
caseRunningSumIf(Amount, Status == "Paid") Status为Paid时的Amount累计总和

caseRunningCountIf

(condition)

计算截至当前事件的带条件累计计数。

参数
condition boolean 用于计数的条件
返回值 数字
示例
caseRunningCountIf(Activity == "Error") Error活动的累计数量

caseRunningAvgIf

(expr, condition)

计算截至当前事件的带条件累计平均值。

参数
expr number 要求平均值的表达式
condition boolean 用于筛选事件的条件
返回值 数字
示例
caseRunningAvgIf(Duration, Priority == "High") 高优先级事件的累计平均持续时间

已用时间属性

用于衡量案例内进度和已用时间的属性。

elapsedSinceStart

Property

案例开始后经过的时间,单位为毫秒。

Type number

remainingInCase

Property

案例结束前的剩余时间,单位为毫秒。

Type number

percentComplete

Property

案例进度,以0到1之间的比例表示。

Type number

扩展条件聚合

用于中位数、标准差和去重计数的其他条件聚合函数。

caseMedianIf

(expr, condition)

在条件为true的案例事件中计算条件中位数。

参数
expr number 值表达式
condition boolean 筛选条件
返回值 数字
示例
caseMedianIf(Amount, Activity == "Review") Review活动的金额中位数

allMedianIf

(expr, condition)

在条件为true的所有事件中计算条件中位数。

参数
expr number 值表达式
condition boolean 筛选条件
返回值 数字
示例
allMedianIf(Amount, Status == "Complete") 已完成事件的全局中位数

caseStdDevIf

(expr, condition)

在案例事件中计算条件标准差。

参数
expr number 值表达式
condition boolean 筛选条件
返回值 数字
示例
caseStdDevIf(Duration, Activity == "Review") 案例中Review持续时间的标准差

allStdDevIf

(expr, condition)

在所有事件中计算条件标准差。

参数
expr number 值表达式
condition boolean 筛选条件
返回值 数字
示例
allStdDevIf(Amount, Priority == "High") 高优先级事件的全局标准差

caseCountDistinctIf

(expr, condition)

在案例事件中按条件统计去重值的数量。

参数
expr any 值表达式
condition boolean 筛选条件
返回值 数字
示例
caseCountDistinctIf(Category, Amount > 100) 金额较大的去重类别数

allCountDistinctIf

(expr, condition)

在所有事件中按条件统计去重值的数量。

参数
expr any 值表达式
condition boolean 筛选条件
返回值 数字
示例
allCountDistinctIf(User, Department == "Sales") Sales部门的去重用户数

扩展运行聚合

用于中位数、标准差以及条件最小值和最大值的其他运行聚合函数。

caseRunningMedian

(expr)

截至当前事件的值的运行中位数。

参数
expr number 值表达式
返回值 数字
示例
caseRunningMedian(Amount) 运行金额中位数

caseRunningStdDev

(expr)

截至当前事件的运行标准差。

参数
expr number 值表达式
返回值 数字
示例
caseRunningStdDev(Amount) 运行标准差

caseRunningMinIf

(expr, condition)

截至当前事件的运行条件最小值。

参数
expr number 值表达式
condition boolean 筛选条件
返回值 数字
示例
caseRunningMinIf(Amount, Activity == "Review") Review金额的运行最小值

caseRunningMaxIf

(expr, condition)

截至当前事件的运行条件最大值。

参数
expr number 值表达式
condition boolean 筛选条件
返回值 数字
示例
caseRunningMaxIf(Amount, Priority == "High") 高优先级事件的运行最大值

JSON函数

JSON提取

使用路径表达式从JSON字符串中提取值。

jsonExtract

(json, path)

使用JSONPath表达式从JSON字符串中提取值。

参数
json string JSON字符串
path string JSONPath表达式,例如"$.field"
返回值 任意
示例
jsonExtract("{\"name\":\"John\"}", "$.name") John

jsonValue

(json, path)

将JSON字符串中的标量值提取为字符串。

参数
json string JSON字符串
path string JSONPath表达式
返回值 字符串
示例
jsonValue("{\"age\":30}", "$.age") "30"

jsonArrayLength

(json)

返回JSON数组的长度。

参数
json string JSON数组字符串
返回值 数字
示例
jsonArrayLength("[1,2,3]") 3

相关主题