公式函式一覽表¶
函式可以理解為封裝了運算能力的合集,每個函式都有特定的功能。比如 count() 計算個數,sum() 用來求和,string() 用來轉換其他型別為字串型別等等。 具體函式使用案例可參考 。
更新記錄:2026.06 更新
- 新增函式:GETDAY、TOSTARTOFWEEK、TOENDOFWEEK、TOENDOFMONTH、TOENDOFQUARTER、TOENDOFYEAR、WEEKADD、MONTHADD、MAXOF、MINOF
- 函式迭代:CONCAT支援多引數拼接;TIMELINE、TIMESERIES支援與動態時間函式巢狀使用
統計函式¶
| 函式 | 語法 | 示例 |
|---|---|---|
| AVG | AVG(FIELD) 用於對欄位取平均值,僅接受數值型別 |
節點平均交付天數: AVG(FILTER(${流程節點},each.${節點狀態} == $option{已完成}).${節點累計進行時間})/86400 |
| AVGIF | AVGIF(FIELD, CONDITION) 透過條件判斷來獲取欄位的平均值 |
測試節點延期天數: AVGIF(DAYSBETWEEN(${流程節點}.${節點末次結束時間},${流程節點}.${節點排期}.${預計結束日期}),${流程節點}.${節點名稱} == "測試" and ISNULL(${流程節點}.${節點排期}.${預計結束日期}) == false and each > 0) |
| COUNT | COUNT(FIELD) 獲取欄位包含值數量 |
需求關聯 bug 數: COUNT($related{缺陷-關聯需求}) |
| COUNTIF | COUNTIF(FIELD, CONDITION) 透過條件判斷來獲取欄位包含值數量 |
優先順序為 P0 的 需求數: COUNTIF(${工作項id},${優先順序} == $option{P0}) 每日新增需求數: COUNTIF(${工作項id},TOSTARTOFDAY(${提出時間}) == TOSTARTOFDAY(TIMELINECURSOR())) |
| COUNTDISTINCT | COUNTDISTINCT(FIELD) 用於對欄位進行去重計數 |
需求關聯 bug 的型別數: COUNTDISTINCT($related{缺陷-關聯需求}.${缺陷型別}) |
| COUNTDISTINCTIF | COUNTDISTINCTIF(FIELD, CONDITION) 去重計數(帶條件的) |
開發節點數: COUNTDISTINCTIF(${流程節點}.${節點名稱},MATCH(each,"開發")) |
| MAX | MAX(FIELD) 用於對欄位取最大值,可接受數值型別、時間型別 |
最大節點估分: max({流程節點}.{節點估分}) 測試節點完成時間: MAX(FILTER(${流程節點},each.${節點名稱} == "測試").${節點末次結束時間}) |
| MAXIF | MAXIF(FIELD, CONDITION) 透過條件判斷來獲取欄位的最大值 |
開發節點最晚完成時間: MAXIF(${流程節點}.${節點末次結束時間},MATCH(${流程節點}.${節點名稱},"開發")) |
| MIN | MIN(FIELD) 用於對欄位取最小值,可接受數值型別、時間型別 |
最小節點估分: MIN({流程節點}.{節點估分}) |
| MINIF | MINIF(FIELD, CONDITION) 透過條件判斷來獲取欄位的最小值 |
開發節點最早開始時間: MINIF(${流程節點}.${節點末次開始時間},MATCH(${流程節點}.${節點名稱},"開發")) |
| MEDIAN | MEDIAN(FIELD) 用於對欄位取中位數,可接受數值型別、時間型別 |
節點估分中位數: MEDIAN({流程節點}.{節點估分}) |
| MEDIANIF | MEDIANIF(FIELD, CONDITION) 透過條件判斷來獲取欄位的中位數 |
節點估分小於 100 的中位數: MEDIANIF({流程節點}.{節點估分}, each<100) |
| SUM | SUM(FIELD) 用於對欄位取和,僅接受數值型別 |
節點總估分: SUM({流程節點}.{節點估分}) |
| SUMIF | SUMIF(FIELD, CONDITION) 透過條件判斷來對欄位求和 |
開發節點總估分: SUMIF(${流程節點}.${節點{estimatesVar}},MATCH(${流程節點}.${節點名稱},"開發")) |
邏輯函式¶
| 函式 | 語法 | 示例 |
|---|---|---|
| NOT | NOT(CONDITION) 取非,將 true 與 false 之間互相轉換 |
優先順序有值,且不等於P1: NOT({優先順序}!=P1) |
| EMPTY | EMPTY(FIELD) 判斷一個欄位是否為空,空返回 true,非空返回 false |
優先順序為空: EMPTY({優先順序}) |
| ISNULL | ISNULL(FIELD) 判斷一個欄位是否為空,空返回 true,非空返回 false |
優先順序為空: ISNULL({優先順序}) |
時間軸函式¶
瞭解 TIMELINE 和 TIMESERIES 的使用區別:
| 函式 | 語法 | 示例 |
|---|---|---|
| TIMELINE | TIMELINE(STARTTIME, ENDTIME, "DAY") 輸出時間軸,支援 day、workday、week、bi-week、month、bi-month、quarter 與 year 輸出,不能與其他函式混合使用,以GMT+8計算 支援與動態時間函式巢狀使用。 |
每天: TIMELINE(DATE("2025-01-01"),TODAY(),"day") 每月: TIMELINE(DATE("2025-01-01"),TODAY(),"month") 本月第一天到最後一天: TIMELINE(TOSTARTOFMONTH(TODAY()),TOENDOFMONTH(TODAY()),"day") 上週第一天到最後一天: TIMELINE(TOSTARTOFWEEK(WEEKADD(TODAY(),-1)),TOENDOFWEEK(WEEKADD(TODAY(),-1)),"day") |
| TIMESERIES | TIMESERIES(STARTTIME, ENDTIME, "DAY") 輸出獨立的時間序列,支援 day、workday、week、bi-week、month、bi-month、quarter 與 year 輸出,不能與其他函式混合使用,以GMT+8計算,基於當前全量資料統計。生成的時間序列可透過 timelinecursor 函式獲取切片日期,用於對任意時間欄位配置相對時間篩選條件,實現全量資料的動態過濾 支援與動態時間函式巢狀使用。 |
每天: TIMESERIES(DATE("2025-01-01"),TODAY(),"day") 每天(過去 7 天): TIMESERIES(DATEADD(TODAY(),-7),DATEADD(TODAY(),-1),"day") 本月第一天到最後一天: TIMESERIES(TOSTARTOFMONTH(TODAY()),TOENDOFMONTH(TODAY()),"day") |
| TIMELINECURSOR | TIMELINECURSOR() 取當前 timeline 或 timeseries 時間切片日期,以GMT+8計算 |
當前日期往前 60 天: DATEADD(TIMELINECURSOR(),-60) 判斷是否在當前日期提出: TOSTARTOFDAY(${提出時間}) == TOSTARTOFDAY(TIMELINECURSOR()) |
條件函式¶
| 函式 | 語法 | 示例 |
|---|---|---|
| IF | IF(CONDITION, V1, V2) 條件判斷,用於兩個值之間的比較,如 if 的第一個引數為 true,則返回第二個引數的值,否則返回第三個引數的值 |
條件判斷: IF({優先順序} == "P0", "高優", "正常") 條件巢狀: IF(${優先順序} == $option{P0},"高優",IF(${優先順序} == $option{P1},"中優","低優")) |
數值類操作運算¶
| 函式 | 語法 | 示例 |
|---|---|---|
| SQRT | SQRT(NUMBER) 開根號,接受一個數值型別的引數並返回該數值型別的平方根 |
SQRT(9) ➡️ 3 |
| POW | POW(NUMBER1, NUMBER2) 求冪,用於數值的求冪,number1 表示底數,number2 表示冪 |
POW(2,3) ➡️ 8 |
| ROUND | ROUND(NUMBER1, NUMBER2) 保留幾位小數,number1 表示原始數值,number2 表示需保留的小數位數 |
ROUND(3.1415926 , 2) ➡️ 3.14 |
| CEIL | CEIL(NUMBER) 向上取整 |
CEIL(1.2) ➡️ 2 |
| FLOOR | FLOOR(NUMBER) 向下取整 |
FLOOR(2.1) ➡️ 2 |
日期函式¶
| 函式 | 語法 | 示例 |
|---|---|---|
| TOYEAR | TOYEAR(DATE) 提取年 |
所在年: TOYEAR(DATE("2021-05-01 18:25:30")) ➡️ 2021 |
| TOMONTH | TOMONTH(DATE) 提取月份,將輸入的時間提取月份 |
所在月: TOMONTH(DATE("2021-05-01 18:25:30")) ➡️ 5 |
| TOHOUR | TOHOUR(DATE) 提取小時,將輸入的時間提取為 24 小時制式小時。 |
所在小時: TOHOUR(DATE("2021-05-01 18:25:30")) ➡️ 18 |
| TOMINUTE | TOMINUTE(DATE) 提取分鐘,將輸入的時間提取分鐘數 |
所在分鐘: TOMINUTE(DATE("2021-05-01 18:25:30")) ➡️ 25 |
| TOSECOND | TOSECOND(DATE) 提取秒,將輸入的時間提取秒數 |
所在秒: TOSECOND(DATE("2021-05-01 18:25:30")) ➡️ 30 |
| GETYEAR | GETYEAR(DATE) 提取日期所在年 |
GETYEAR(DATE("2021-05-15 18:25:30")) ➡️ 2021 |
| GETMONTH | GETMONTH(DATE) 提取日期所在月份 |
GETMONTH(date("2021-05-15 18:25:30")) ➡️ 5 |
| GETDAY | GETDAY(DATE) 提取日期所在日 |
今天所在日: GETDAY(date("2021-05-15 18:25:30")) ➡️ 15 |
| GETWEEKOFYEAR | GETWEEKOFYEAR(DATE) 提取日期所在周 |
GETWEEKOFYEAR(DATE("2021-05-15 18:25:30")) ➡️ 19 |
| TOSTARTOFYEAR | TOSTARTOFYEAR(DATE) 獲取當前年份的起始時間,向前取整到當前年度的第一天 |
TOSTARTOFYEAR(DATE("2021-05-15 18:25:30")) ➡️ 2021-01-01 00:00:00 |
| TOSTARTOFQUARTER | TOSTARTOFQUARTER(DATE) 獲取當前季度的起始時間,向前取整到當前季度的第一天 |
當季度第一天開始: TOSTARTOFQUARTER(DATE("2021-05-15 18:25:30")) ➡️ 2021-04-01 00:00:00 |
| TOSTARTOFMONTH | TOSTARTOFMONTH(DATE) 獲取當前月份的起始時間,向前取整到當前月份的第一天 |
當月第一天開始: TOSTARTOFMONTH(DATE("2021-05-15 18:25:30")) ➡️ 2021-05-01 00:00:00 |
| TOSTARTOFWEEK | TOSTARTOFWEEK(DATE) 獲取日期當前周的週一 |
TOSTARTOFWEEK(DATE("2026-05-15 18:25:30")) ➡️ 2026-05-11 00:00:00 本週的週一: TOSTARTOFWEEK(TODAY()) 下週的週一: TOSTARTOFWEEK(WEEKADD(TODAY(),1)) 上週的週一: TOSTARTOFWEEK(WEEKADD(TODAY(),-1)) |
| TOSTARTOFDAY | TOSTARTOFDAY(DATE) 獲取當前天的起始時間,向前取整到今天開始 |
當天開始: TOSTARTOFDAY(DATE("2021-05-15 18:25:30")) ➡️ 2021-05-15 00:00:00 |
| TOSTARTOFHOUR | TOSTARTOFHOUR(DATE) 獲取當前小時的起始時間,向前取整到當前小時開始。 |
TOSTARTOFHOUR(DATE("2021-05-15 18:25:30")) ➡️ 2021-05-15 18:00:00 |
| TOSTARTOFMINUTE | TOSTARTOFMINUTE(DATE) 獲取當前分鐘的起始時間,向前取整到當前分鐘開始。 |
TOSTARTOFMINUTE(DATE("2021-05-15 18:25:30")) ➡️ 2021-05-15 18:25:00 |
| TOENDOFWEEK | TOENDOFWEEK(DATE) 獲取日期當前周的最後一天(週日) |
TOENDOFWEEK(DATE("2026-05-15 18:25:30")) ➡️ 2026-05-17 00:00:00 本週最後一天: TOENDOFWEEK(TODAY()) |
| TOENDOFMONTH | TOENDOFMONTH(DATE) 獲取日期當前月的最後一天 |
TOENDOFMONTH(DATE("2026-05-15 18:25:30")) ➡️ 2026-05-31 00:00:00 本月最後一天: TOENDOFMONTH(TODAY()) |
| TOENDOFQUARTER | TOENDOFQUARTER(DATE) 獲取日期當前季度的最後一天 |
TOENDOFQUARTER(DATE("2026-05-15 18:25:30")) ➡️ 2026-06-30 00:00:00 本季度最後一天: TOENDOFQUARTER(TODAY()) |
| TOENDOFYEAR | TOENDOFYEAR(DATE) 獲取日期當前年的最後一天 |
TOENDOFYEAR(DATE("2026-05-15 18:25:30")) ➡️ 2026-12-31 00:00:00 本年最後一天: TOENDOFYEAR(TODAY()) |
| HOUR | HOUR(DATE1, DATE2) 返回兩個日期之間的小時數 |
HOUR(${提出時間},${完成日期}) |
| SECOND | SECOND(DATE1, DATE2) 返回兩個日期之間的秒數 |
SECOND(DATE("2021-08-09 10:00:30"), DATE("2021-08-09 12:00:30")) ➡️ 7200 |
| DAYSBETWEEN | DAYSBETWEEN(DATE1, DATE2) 返回兩個日期之間的天數,值為 date2-date1 的結果 |
兩個日期之間的自然日天數: DAYSBETWEEN(${提出時間},${完成日期}) |
| WORKDAYSBETWEEN | WORKDAYSBETWEEN(DATE1, DATE2) 返回兩個日期之間的工作日天數,值為 date2-date1 的結果 |
兩個節點間隔工作日天數: WORKDAYSBETWEEN(MAX(FILTER(${流程節點},each.${節點名稱} == "評審").${節點末次結束時間}),MAX(FILTER(${流程節點},each.${節點名稱} == "測試").${節點末次結束時間})) |
| NOW | NOW() 返回當前時間 |
NOW() |
| TODAY | TODAY() 返回當前時間 |
TODAY() |
| DATEADD | DATEADD(DATE, NUMBER) 計算日期增減計算後的返回值 |
60 天前: DATEADD(TODAY(),-60) |
| WEEKADD | WEEKADD(DATE, NUMBER) 計算日期按周偏移後的返回值 |
上週: WEEKADD(TODAY(),-1) 下 2 周: WEEKADD(TODAY(),2) |
| MONTHADD | MONTHADD(DATE, NUMBER) 計算日期按月偏移後的返回值;若目標月不存在該日,則返回目標月最後一天。 |
上個月: MONTHADD(TODAY(),-1) 上個月的第一天: TOSTARTOFMONTH(MONTHADD(TODAY(),-1)) |
字串函式¶
| 函式 | 語法 | 示例 |
|---|---|---|
| LENGTH | LENGTH(STRING) 返回字串的長度 |
LENGTH("meego") ➡️ 5 |
| MATCH | MATCH(STRING1,STRING2) 判斷第一個引數是否包含第二個引數,是返回 true,反之返回 false |
MATCH("meego", "go") ➡️ true |
| LOWER | LOWER(STRING) 將字串中的英文字元轉換為小寫。 |
LOWER("MEEGO") ➡️ "meego" |
| UPPER | UPPER(STRING) 將字串中的英文字元轉換為大寫。 |
UPPER("meego") ➡️ "MEEGO" |
| REVERSE | REVERSE(STRING) 反轉字串。 |
REVERSE("meego") ➡️ "ogeem" |
| SUBSTRING | SUBSTRING(STRING,START,LENGTH) 以字元為單位擷取指定位置字串 |
SUBSTRING("meego", 1, 3) ➡️ "mee" |
| CONCAT | CONCAT(STRING,STRING,...) 將引數中的多個欄位/字串拼接。 支援多引數拼接,可一次傳入 2 個以上引數。 |
CONCAT("mee", "go") ➡️ "meego" 一次拼接 4 個字串: CONCAT("a", "b", "c", "d") ➡️ "abcd" |
| MAXOF | MAXOF(VALUE, VALUE, ...) 在同一個工作項例項內對多個欄位或多個值進行最大值對比。 |
取兩個日期中的較大者: MAXOF(DATE("2026-05-20 00:00:00"),DATE("2026-05-10 05:00:00")) 業務場景:比較“承諾完成時間”和“實際上線時間”,取更晚時間作為最終風險日期。 |
| MINOF | MINOF(VALUE, VALUE, ...) 在同一個工作項例項內對多個欄位或多個值進行最小值對比。 |
取兩個日期中的較小者: MINOF(DATE("2026-05-20 00:00:00"),DATE("2026-05-10 05:00:00")) 業務場景:比較“計劃開始時間”和“實際開始時間”,取更早時間做提前量分析。 |
型別轉換函式¶
| 函式 | 語法 | 示例 |
|---|---|---|
| STRING | STRING(FIELD) 將一個值強行轉為 string 型別 |
STRING(1) |
| DATE | DATE(STRING) 將日期型別的字串轉換成日期型別 |
DATE("2025-08-02") |
| BOOL | BOOL(FIELD) 將某值轉換成 bool 型別 |
BOOL(1) |
容器操作函式¶
| 函式 | 語法 | 示例 |
|---|---|---|
| CONTAINS | CONTAINS(ARRAY, ELEM) 判斷陣列是否包含某一個元素,是返回 true,反之返回 false |
CONTAINS([1, 2, 3], 1) == true |
| CONTAINSANY | CONTAINSANY(ARRAY1, ARRAY2) 判斷兩個陣列是否有交集,是返回 true,反之返回 false |
CONTAINSANY([1, 2, 3], [2, 3, 4]) == true |
| FILTER | FILTER(ARRAY, CONDITION) 過濾陣列元素 |
已完成節點: FILTER(${流程節點},each.${節點狀態} == $option{已完成}) |
| JOIN | JOIN(ARRAY 拼接字串陣列 |
JOIN(["1", "2"], ",") == 1,2 |
複合欄位專用函式¶
| 函式 | 語法 | 示例 |
|---|---|---|
| BYROW | BYROW(COMPOSITE FIELD, FIELD) 按組展開指定複合欄位,獲取到各組子欄位的欄位值 |
團隊複合規劃中,獲取各組規劃工作量之和: SUM(BYROW(團隊複合規劃, each.規劃工作量)) |
| BYROWIF | BYROWIF(COMPOSITE FIELD, FIELD, CONDITION) 按組展開指定複合欄位,透過條件判斷獲取各組值,若條件判斷為 true,則返回欄位值,否則返回 null |
團隊複合規劃中,前端團隊的規劃工作量之和: SUM(BYROWIF(團隊複合規劃, each.規劃工作量, each.團隊==前端)) |
| IFANYOF | IFANYOF(COMPOSITE FIELD,CONDITION) 按組展開指定複合欄位,若至少存在一組條件判斷結果為 true,則返回 true,否則返回 false |
團隊迭代規劃中,至少存在一組規劃工作量小於實際工作量: IFANYOF(團隊複合規劃, each.規劃工作量<each.實際工作量)==true |
| IFALLOF | IFALLOF(COMPOSITE FIELD,CONDITION) 按組展開指定複合欄位,若每一組條件判斷結果均為 true,則返回 true,否則返回 false |
判斷是否所有團隊複合規劃中,規劃工作量小於實際工作量 IFALLOF(團隊複合規劃, each.規劃工作量<each.實際工作量)==true |