这些函数系列完善了表达式语言。以下各组列出相应函数及其参数、返回类型和示例。
文本和模式函数
正则表达式函数
用于通过正则表达式匹配和替换模式的函数。
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 |
| 另请参阅 | |
(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午夜时的值。
日期周期边界
将日期截断或舍入到周期边界。
startOfDay
(date) 将日期截断到当天开始,即午夜。
| 参数 | |
| 返回值 | 日期 |
| 示例 | startOfDay(StartTime) → 同一天的午夜 |
startOfWeek
(date) 返回本周的开始时间,即星期一。
| 参数 | |
| 返回值 | 日期 |
| 示例 | startOfWeek(StartTime) → 同一周的星期一 |
startOfMonth
(date) 返回当月第一天。
| 参数 | |
| 返回值 | 日期 |
| 示例 | startOfMonth(StartTime) → 当月第一天 |
startOfYear
(date) 返回当年1月1日。
| 参数 | |
| 返回值 | 日期 |
| 示例 | startOfYear(StartTime) → 1月1日 |
endOfWeek
(date) 返回本周结束时间,即星期日23:59:59。
| 参数 | |
| 返回值 | 日期 |
| 示例 | endOfWeek(StartTime) → 星期日结束时间 |
endOfMonth
(date) 返回当月最后一天的23:59:59。
| 参数 | |
| 返回值 | 日期 |
| 示例 | endOfMonth(StartTime) → 当月最后一天结束时间 |
endOfYear
(date) 返回12月31日的23:59:59。
| 参数 | |
| 返回值 | 日期 |
| 示例 | 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。
| 参数 | |
| 返回值 | 日期 |
| 示例 | endOfDay(StartTime) → 同一天的23:59:59 |
startOfQuarter
(date) 返回指定日期所在季度的第一天。
| 参数 | |
| 返回值 | 日期 |
| 示例 | startOfQuarter(StartTime) → 对于6月的日期,返回2024-04-01 |
endOfQuarter
(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(Amount, 100, 1000) → 如果Amount处于100到1000之间,则返回true |
clamp
(value, min, max) 将值限制在[min, max]范围内。
| 参数 | | value | number | 要限制的值 | | min | number | 最小值 | | max | number | 最大值 | |
| 返回值 | 数字 |
| 示例 | 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。
reworkCount
Property 案例中重复活动执行的总次数。
activityOccurrence
Property 该活动在案例中的发生次数:第一次为1,第二次为2,以此类推。
活动查询
查询案例中的活动是否存在及其出现次数。
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) 从当前事件之前指定活动最后一次出现起经过的时间。
| 参数 | |
| 返回值 | 数字 |
| 示例 | timeSinceActivity("Start") → 距上一次Start活动的时间 |
timeToActivity
(activityName) 从当前事件起到指定活动下一次出现之前的时间。
| 参数 | |
| 返回值 | 数字 |
| 示例 | 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 从案例开始到当前时刻经过的时间,以毫秒表示,即从第一个事件到现在的时间。
自循环检测
检测并统计同一活动连续发生的自循环模式。
isSelfLoop
Property 如果当前活动与案例中的上一个活动相同,则返回true。
selfLoopCount
Property 当前案例中同一活动连续重复的次数。
资源分析
检测案例中的资源交接和变更。
isResourceChange
(expr) 如果表达式值与上一个事件相比发生变化,则返回true。
| 参数 | |
| 返回值 | 布尔值 |
| 示例 | isResourceChange(Resource) → 资源与上一个事件不同时返回true |
resourceHandoffCount
(expr) 统计案例中的值变更次数。
| 参数 | |
| 返回值 | 数字 |
| 示例 | resourceHandoffCount(Resource) → 对于Alice→Alice→Bob→Bob→Alice,返回2 |
| 备注 | Athena支持的表达式暂不可用。对于后端查询,请在派生属性中结合使用isResourceChange(expr)和caseCountIf(...)。 |
统计、排名和值变化
排名函数
按表达式值对案例内或所有事件中的事件进行排名。
caseRank
(expr) 当前事件在案例中的排名,按表达式值排序;并列排名之间保留间隔。
| 参数 | |
| 返回值 | 数字 |
| 示例 | caseRank(Amount) → 按案例内的Amount排名 |
caseDenseRank
(expr) 案例内的密集排名,并列排名之间不留间隔。
| 参数 | |
| 返回值 | 数字 |
| 示例 | caseDenseRank(Amount) → 按案例内的Amount进行密集排名 |
allRank
(expr) 在所有事件中进行排名。
| 参数 | |
| 返回值 | 数字 |
| 示例 | allRank(Duration) → 按Duration进行全局排名 |
allPercentRank
(expr) 在所有事件中的百分位排名,范围为0到1。
| 参数 | |
| 返回值 | 数字 |
| 示例 | allPercentRank(Duration) → 百分位排名(0到1) |
值变更检测
检测事件之间的值变化。
changed
(expr) 如果表达式值与上一个事件不同,则返回true。
| 参数 | |
| 返回值 | 布尔值 |
| 示例 | changed(Resource) → 如果Resource与上一个事件相比发生变化,则返回true |
caseChanges
(expr) 统计案例中所有事件的值变化次数。
| 参数 | |
| 返回值 | 数字 |
| 示例 | 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 案例开始后经过的时间,单位为毫秒。
remainingInCase
Property 案例结束前的剩余时间,单位为毫秒。
percentComplete
Property 案例进度,以0到1之间的比例表示。
扩展条件聚合
用于中位数、标准差和去重计数的其他条件聚合函数。
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) 截至当前事件的值的运行中位数。
| 参数 | |
| 返回值 | 数字 |
| 示例 | caseRunningMedian(Amount) → 运行金额中位数 |
caseRunningStdDev
(expr) 截至当前事件的运行标准差。
| 参数 | |
| 返回值 | 数字 |
| 示例 | 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函数
相关主题