公式計算欄位使用指南¶
| 版本 | 商業版 | 企業版 | 旗艦版 | 行業專版 |
|---|---|---|---|---|
| 是否可用 | ❌ | ❌ | ✅ | ✅ |
“公式計算欄位”和“度量”的區別是什麼? 在Meegle中,“公式計算欄位”和“度量”都是幫我們自動算數、減少人工統計的工具。 最核心的區別是:“公式計算欄位”計算的是“單個具體例項”的相關資料,而“度量”計算的是“整個專案或團隊”的相關資料。
更多公式案例:
功能更新:AI 生成公式計算欄位¶
在Meegle計算欄位中,你可以透過 AI 快速生成公式。只需用自然語言描述想要的計算邏輯,AI 會基於當前工作項資料來源自動生成對應公式,幫助你減少手寫複雜公式的成本。
例如,過去你可能需要理解 filter、each、sum 等函式巢狀邏輯,才能完成工時彙總、數量統計、進度計算等配置。現在,你只需要描述業務目標,AI 會幫你生成可用公式,你確認後點選“採納”即可填入公式編輯器。
瞭解更多:

介紹¶
日常工作中,我們經常需要處理繁瑣的資料統計。例如:計算距離專案上線還有多少個工作日、統計某個需求下關聯了多少個缺陷、或者彙總各個業務線的總成本。 如果純人工統計,不僅耗時耗力,而且一旦源頭資料發生變化,所有的結果都需要重新計算,極易出錯。 公式計算欄位,就是幫你實現“自動統計”的工具。 你只需要在系統裡把計算規則設定好一次(例如:將“總成本”定義為“成本一”加上“成本二”),系統就會嚴格按照這個規則自動計算。無論原始資料怎麼變,結果都會瞬間、準確地自動更新。掌握公式,能把你從機械的算數中解放出來,把更多精力投入到更有價值的業務管理中。
一、瞭解核心概念與規則¶
在編寫第一行公式前,我們需要先認識幾個最基礎的概念,它們是構成公式的“基本零件”。
一個案例認識計算公式¶
在正式學習寫公式之前,我們先透過一個日常場景來理解它的基本原理。假設你想知道“今天距離今年春節還有多少天”。如果是人工計算,邏輯很簡單:
在Meegle中,你不需要自己去翻日曆做減法,系統為你提供了一個專門用來計算日期差的工具(我們稱之為函式),叫作 daysBetween()。你只需要按照固定的格式把兩個日期填進去:
進一步思考:如果我想排除週末,只算“工作日”呢?
人工計算會非常繁瑣,你需要一天天去核對並扣除週末。但在Meegle裡,這只需要換一個函式就能自動完成。系統提供了一個叫 workdaysBetween() 的函式:
這就是函式的作用——代替人工完成繁瑣的計算。以此類推,當你的需求變化時,只需要換上對應的函式即可。比如:想數一數有多少個數就用 COUNT(),想把數字加起來就用 SUM(),想算個平均值就用 AVG()。
理解計算公式¶
不論多複雜的計算公式,在Meegle裡的執行邏輯都是一致的,嚴格遵循以下三個步驟:獲取資料 ➡️ 處理資料 ➡️ 輸出結果。

第一步:獲取資料(知道要算什麼)¶
公式不能憑空計算,你首先要告訴系統去拿哪些資料。比如:提取某個專案的“開始時間”和“結束時間”欄位,或者提取專案的“估分”和“銷售額”欄位。
第二步:處理資料(告訴系統怎麼算)¶
拿到資料後,你需要用函式告訴系統怎麼處理這些原始資料。日常工作中最常用的處理方式有以下幾種:
- 篩選:按條件挑出特定的資料。比如:只獲取“已完成”狀態的需求的完成時間。
- 求和:把一組數字加起來。比如:計算當前專案下所有子任務的“估分之和”或“金額之和”。
- 求差:算兩個資料的差值。比如:用實際完成時間減去計劃完成時間,算出“延期天數”。
- 數量:數一數有幾條資料。比如:統計當前需求一共關聯了多少個“缺陷”。
- 平均:算平均水平。比如:計算過去一個月處理缺陷的“平均週期”。
- 佔比:算百分比。比如:已完成的節點數佔總節點數的比例。
- 大小值:找極值。在一堆日期或數字中,找出“最大日期(最晚截止時間)”或“最小日期(最早開始時間)”。
- 組合:把兩段內容拼在一起。比如:把“需求編號”和“需求標題”組合成一個新的文字內容。
第三步:輸出結果(得到最終答案並展示)¶
系統處理完資料後,一定會吐出一個最終結果。根據你計算的內容不同,輸出的結果通常分為以下四種格式:
- 數字:比如求和、計數的結果(如:15天、8個缺陷)。
- 日期:比如在某個時間上加3天的結果(如:2026年5月20日)。
- 字串(文字):比如把幾段文字組合在一起的結果。
- 布林值(是/否):通常用於判斷。比如公式是“金額是否大於1萬”,如果是,輸出結果就是“是(True)”,否則就是“否(False)”。 最終效果:算出來的這些結果,Meegle會自動將它們展示在你的表格檢視、任務詳情頁或者節點表單上,讓你和你的團隊能直觀地看到自動計算出的業務資料。
二、開始第一個公式¶
假設你的工作項中有【成本一】和【成本二】兩個數值欄位,我們需要建立一個名為**【總成本】**的公式欄位,實現資料的實時自動彙總。
注意: 文中欄位名僅為演示,實際操作時請替換為你空間內的真實欄位。 第一步:進入配置後臺 作為管理員,進入 【空間配置】 -> 【工作項管理】,選擇目標工作項型別(如“需求”或“任務”)。

第二步:新建公式欄位
- 切換至 【欄位管理】 頁籤,點選 【新建欄位】。
- 在彈出視窗中,選擇欄位型別:【其他】 -> 【公式計算】。
- 給這個新欄位取個名字,比如“總成本”。

第三步:編寫計算邏輯 在公式編輯器中,透過左側欄位列表選擇你的成本欄位,輸入簡單的加法公式:

第四步:預覽結果並儲存 此時,觀察下方的“結果預覽”區域。選擇一個已經填寫了【成本一】和【成本二】的例項進行試執行。如果一切正常,你會立刻看到計算出的總和。 確認無誤後,點選【確認】,儲存你的第一個公式欄位!

完成以上步驟後,你已經建立了一個可以自動計算的欄位。之後只要【成本一】或【成本二】的值發生變化,【總成本】都會自動更新,無需手動修改。
三、公式編輯器¶
在計算公式介面,有三個區域:公式編輯區、欄位與函式選擇區、欄位與函式示例區和輸出結果設定區。

- 計算公式編輯區:書寫計算公式的區域,可以使用類似count(filter({流程節點},each.{節點狀態}=="進行中").{KEY})來表示進行中節點的數量。
- 欄位函式選擇區:選擇如拉群方式、名稱與業務線等欄位,也可以選擇如參與人員、流程節點、終止原因等物件陣列;還可以手動選擇計數count()、求和 sum() 等函式。
- 欄位與函式示例區:在本區域內可以瞭解欄位與函式的介紹與使用示例,方便快速上手使用。
- 計算結果顯示區:根據欄位輸出的結果型別提示展示型別,一般有:字串、數字、布林、日期等。注意,欄位型別一旦輸出確認後,不能做變更,需要變更請重新新建一個公式計算欄位。
| 功能點 | 新版 |
|---|---|
| 工作項完成後凍結計算結果 啟用該功能後,系統將鎖定“已完成”狀態例項的欄位值,使其不再隨公式更新而變更。 預設策略: 存量公式:預設為關閉狀態,保持原有邏輯(即對所有例項進行重算)。 新增公式:預設為開啟狀態(即跳過已完成例項的計算),並支援按需手動切換。 |
![]() |
| 選擇例項進行除錯,驗證更高效 實時預覽結果: 除錯時支援選擇具體例項進行“試執行”。系統將代入該例項資料並自動計算結果,在撰寫或修改公式時,能即時校驗邏輯準確性,大幅降低驗證與排錯成本。 便捷查詢例項:預設展示前 6 項,可透過名稱模糊搜尋快速定位目標例項。 |
![]() |
| 選擇關係時,支援選擇 父項 或 子項 在 @語法 的關聯關係Tab中,當關系型別為「父子關係」時,可以選擇父項 或 子項,或者「不指定父子」,精確獲取特定方向的資料: 父項: 僅獲取當前工作項關聯的父級工作項。 子項: 僅獲取當前工作項關聯的子級工作項。 不指定父子: 獲取當前工作項關聯的所有父子層級工作項(即包含父項和子項)。 |
![]() |
| 調整佈局與樣式,支援編輯器全屏放大 | ![]() ![]() |
| 公式輸入支援原地搜尋 在公式輸入區輸入欄位、函式名稱時,在聯動下方資源庫進行結果查詢的基礎上,可原地喚起搜尋結果下拉選單 |
![]() |
| 支援@選擇器 透過@可喚起選擇器(選項/人員/日期/關聯工作項),且支援輸入搜尋 |
![]() |
| 支援計算關聯工作項資料 | ![]() |
| 支援站外文字公式複製 支援站外公式複製,即按格式要求帶有字首資訊的公式,可從文件、聊天框等位置,複製到【度量-計算欄位編輯區】並自動匹配相關欄位。 |
公式: 複製後: ![]() 具體複製規則請參考複製公式 |
| 支援公式格式美化 一鍵對公式結構進行換行和縮排 |
![]() |
| 支援快捷鍵 | 上鍵、下鍵、左鍵、右鍵:移動游標 回車鍵:確認選擇/換行 TAB 鍵:公式縮排 Ctrl+Z:取消上一步操作 |
四、基礎語法與規則¶
資料結構¶
理解資料結構在計算公式中至關重要。資料結構本質對資料型別的分類,分類為數值、字串、布林、日期、陣列以及物件型別。具體清單可以參考下方表格。
| 基礎資料結構 | 數值型別 | -1、789、99.99、0.000035、30% |
|---|---|---|
| 字串型別 | "this is a string"、"你好"、"" | |
| 布林型別 | true、false | |
| 日期時間型別 | 日期:date("2022-03-03")、date("2022/3/3")、date("2/28/2021") 時間:time("2022-03-03 18:02:53")、time("2022/3/3 18:02:53" )、time("2/28/2021 18:02:53" ) |
|
| 陣列型別 | [1,2,3,4,5,6]、[789,99.99,-1]、["P0","P1","P2","P3"] | |
| 物件型別 | ||
| 高階資料結構 | 物件陣列 | |
| 人員 | 人員:物件型別,無法被構造,系統預置,可以透過函式獲取,並用於入參。透過 @ 取得資料。 | |
| 欄位 | 欄位 :物件型別,無法被構造,系統預置,可以透過函式獲取,並用於入參。常見如流程節點、業務線等。 |
運算子¶
運算子與小時候學習數學一致,適用於數值型別的欄位使用。而比較運算子適用於數字與日期之間的比較。
| 算術運算子 | + | 加:數值求和 P1+P2+...+Pn Px:數值型別 return:數值型別 |
|
|---|---|---|---|
| - | 減:數值相減,或表示數字的負值 P1-P2-...-Pn Px:數值型別 return:數值型別 |
||
| 乘:數值相乘 P1*P2*...*Pn Px:數值型別 return:數值型別 |
|||
| / | 除:數值相除 P1/P2 Px:數值型別 return:數值型別 |
||
| 比較運算子 | < | 小於:小於2個數值、日期小於比較 P1<P2 Px:數值型別/日期型別(型別相同才能對比) return:布林型別 |
|
| <= | 小於等於:2 個數值、日期間大於比較 P1>P2 Px:數值型別/日期型別(型別相同才能對比) return:布林型別 |
||
| > | 大於:2 個數值、日期間大於比較 P1>P2 Px:數值型別/日期型別(型別相同才能對比) return:布林型別 |
||
| >= | 大於等於:2 個數值、日期間大於等於比較 P1>=P2 P:數值型別/日期型別(型別相同才能對比) return:布林型別 |
||
| == | 等於:2 個數值、日期間等於比較 P1==P2 P:數值型別/日期型別(型別相同才能對比) return:布林型別 |
||
| != | 不等於:2 個數值、日期間不等於比較 P1 != P2 p:數值型別/日期型別(型別相同才能對比) return:布林型別 |
函式¶
函式可以理解為封裝了運算能力的合集,每個函式都有特定的功能。比如 COUNT() 計算個數,SUM() 用來求和,string() 用來轉換其他型別為字串型別等等。
| 統計函式 | COUNT() | 計數:獲取陣列中元素個數 count(P1) P1:陣列 return:數值型別 |
|
|---|---|---|---|
| COUNTDISTINCT() | 去重計數:獲取陣列中去重後的元素個數 countdistinct(P1) P1:陣列 return:數值型別 |
||
| COUNTIF() | 條件計數:按條件獲取陣列中元素個數 countif(P1,P2) P1:數值陣列 P2:條件表示式 return:數值型別 |
||
| COUNTDISTINCIF() | 條件去重計數:按條件獲取陣列中去重後的元素個數- countdistictif(P1,P2) P1:陣列 P2:條件表示式 return:數值型別 |
||
| SUM() | 求和:陣列求和 SUM(P1) P1:數值陣列,[1,2,3] return:數值型別 |
||
| SUMIF() | 條件求和:按條件求陣列總和 SUMIF(P1,P2) P1: 數值陣列 P2:條件表示式 return:數值型別 | ||
| AVG() | 求平均:陣列求平均值 avg(P1) P1:數值陣列 return:數值型別 |
||
| AVGIF() | 條件求平均:按條件求陣列平均值 avgif(P1,P2) P1:數值陣列 P2:條件表示式 return:數值型別 |
||
| MAX() | 求最大值:陣列求最大值 max(P1) P1:數值陣列/日期陣列 return:數值/日期 |
||
| MAXIF() | 求條件最大值:按條件求陣列最大值 maxif(P1,P2) P1:數值陣列/日期陣列 P2:條件表示式 return:數值/日期 |
||
| MIN() | 求最小值:陣列求最小值 min(P1) P1:數值陣列/日期陣列 return:數值/日期 |
||
| MINIF() | 求條件最小值:按條件求陣列最小值 minif(P1,P2) P1 :數值陣列/日期陣列 P2:條件表示式 return:數值/日期 |
||
| 邏輯函式 | AND 可簡寫為:&& |
判讀全部引數值是否均為真 P1 and P2 P:條件表示式 return:布林型別 |
|
| OR 可簡寫為:|| |
判讀全部引數值是否任一為真 P1 or P2 P:條件表示式 return:布林型別 |
||
| IF() | 根據提供的條件引數,條件計算結果為 TRUE 時,返回一個值;條件計算結果為 FALSE 時,返回另一個值 if(P1,P2,P3) P1:條件表示式 P2:基礎資料型別,為真時的返回值,可以為null或計算公式返回值 P3:基礎資料型別,為假時的返回值,可以為null或計算公式返回值 return:基礎資料型別 |
||
| NOT() | 對提供的引數值求反 not(P1) P1:布林,包括計算結果為 TRUE 或 FALSE 的任何或表示式 return:布林 |
||
| 比較函式 | valid() VALID() |
判斷欄位是否有效 valid(P1) P1:欄位 return:布林 |
|
| empty() | 判斷欄位是否為空(如果無效則會判斷為false) empty(P1) P1:欄位 return:布林 |
||
| 數值類操作運算 | round() | 按指定位數進行四捨五入的取值 round(P1,P2) P1:數值型別 //源資料 P2:數值型別位數 return:數值型別 P2 省略則預設為0(保留整數) |
|
| ceil() | 保持位數不變,捨棄小數值,向上取整展示 ceil(P) P:數值型別 return:數值型別 |
||
| floor() | 保持位數不變,捨棄小數值,向下取整展示 floor(P) P:數值型別 return:數值型別 |
||
| sqrt() | 開根號 sqrt(P) P:數值型別(正數) return:數值型別 |
||
| 日期函式 | workdaysBetween() | 計算日期範圍包含的工作日天數 workdaysBetween(P1,P2) P1:日期型別 P2:日期型別 return:數值型別 |
|
| daysBetween() | 計算日期範圍包含的自然日天數 daysBetween(P1,P2) P1:日期型別 P2:日期型別 return:數值型別 |
||
| date_add() | 計算日期增減計算後的返回值 date_add(P1,P2) P1:日期型別(date) P2:數值型別 return:數值型別 |
||
| getYear() | 提取日期所在年 getYear(P) P:日期型別 return:數值型別 |
||
| getMonth() | 提取日期所在月份 getMonth(P) P:日期型別 return:數值型別 |
||
| getWeekOfYear() | 提取日期所在周(今天第幾周) getWeekOfYear(P) P:日期型別 return:數值型別 |
||
| 字串操作 | join() | 字串元素拼接 join([P1,P2,...],"P") Px:字串 P:字串作為拼接符,例如 - 作為拼接符 return:字串型別(string) |
|
| match() | 字串匹配 match(P1,P2) p:字串型別 return:布林型別 |
||
| length() | 計算字串的字元個數 length(p) p:字串型別 return:數值型別 |
||
| 容器操作函式 | . each. |
點語法 P1.P2.P3.. P:資料結構中的資料型別構成,在 filter 中,流程節點, each.名稱=xxx,這裡 each 等價流程節點 |
|
| filter() | 篩取物件陣列值 filter() P1:物件陣列源範圍 P2: 條件表示式對源範圍的條件過濾 return:陣列對源範圍中按條件過濾形成一個數物件陣列 |
||
| find() | 查詢第一個物件值 find() P1:物件陣列源範圍 P2: 條件表示式對源範圍的條件過濾 return:陣列對源範圍中按條件過濾輸出第一個物件 |
||
| contains() | 判斷陣列中是否包含值/物件 contains(P1,P2) P1:陣列型別 P2:所有資料結構 return:布林型別 |
||
| containsAny() | 判斷兩個陣列是否有交集 containsAny(P1,P2) P1:陣列型別(目標資料來源) P2:陣列型別(被匹配資料) return:布林型別 |
||
| MAP(,) | 遍歷陣列中的全部物件,經過表示式分別處理後,返回結果陣列 MAP(P1, P2) P1:陣列物件型別(目標資料來源) P2:計算表示式 return:表示式中計算出來的任意物件 |
遍歷陣列中的全部數字相加= 將陣列中奇數序號下的內容相加= |
|
| SPLIT(,) | 使用指定的分割符分割單行文字,返回陣列 SPLIT(P1, P2) P1:待分割的字串 P2:分隔符(字串型別) return:由分割後的子字串組成的陣列 |
字串分割= | |
| REGEXP(,) | 用正規表示式匹配字串,返回指定匹配組的匹配內容 REGEXP(P1, P2) P1:目標字串 P2:正規表示式 return:匹配到的內容陣列 |
字串從前往後匹配第 1 個數字= | |
| INDEX(,) | 根據下標從陣列中獲取結果 INDEX(P1, P2) P1:陣列 P2:下標(整數型別) return:陣列中對應下標的元素 |
從陣列裡取下標為 1 的結果= | |
| ORD() | 字元轉 ASCII 碼 ORD(P1) P1:字串 return:數字 |
將字元轉化為ASCII 碼= | |
| 型別轉換函式 | date() | 轉換為日期型別 date(P) P:基礎資料結構型別(字串、日期型別(精確到秒)、數字時間戳、布林) return:日期型別(date) |
|
| string() | 轉換為字串型別 string(P) P:基礎資料結構型別 return:字串型別 |
||
| bool() | 轉布林型別 bool(P) P:基礎資料結構型別 return:布林型別 |
||
| format() | 按指定格式轉換為所需的字串 (field, string) field:需要被格式化的資料 string:格式程式碼 return:字串型別 |
五、重點函式解析¶
以下是新手常用的核心函式,幫助你快速理解每個函式的含義與使用場景。
點語法¶
在Meegle裡,很多資料不是單一的,而是一個包含多項資訊的集合。比如一個“任務”,它包含了負責人、截止時間、狀態、估分等好幾項資訊。
當你想要精準拿到這個“任務”裡的某一項具體資訊時,就可以用 .。你可以直接把 . 唸作“的”。
| 實際場景 | 圖示 |
|---|---|
| 你可以這樣理解: 流程節點 的 節點估分。 作用: 告訴系統,我不要這個節點的所有資訊,我只要它的“估分”這個具體數字。 |
![]() |
Each¶
each 是專門用在列表裡的。當系統面對一長串資料(比如 10 個子任務),需要挨個去檢查它們時,each 就代表系統當前正在看的“這一個”子任務。它幾乎不會單獨存在,通常都是配合下面的 FILTER(篩選)函式一起使用的。
| 實際場景 | 圖示 |
|---|---|
| 你可以這樣理解: 當前這個節點 的 節點狀態 是不是 “已完成”。 作用: 給系統定下一個檢查標準,讓系統拿著這個標準去列表裡挨個核對每一個專案。 |
![]() |
FILTER()¶
它的作用就是“過濾”或“篩選”。你需要明確告訴這個函式兩件事情:第一,去哪裡挑(原始資料範圍);第二,挑什麼樣的(篩選條件)。最後它會把挑出來的東西組成一個新的列表給你。
| 實際場景 | 圖示 |
|---|---|
引數1(去哪挑): ${流程節點}(所有的節點)引數2(挑什麼): each.${節點狀態} == $option{進行中}(當前這個節點的狀態是“進行中”的)作用: 系統會把所有狀態為“進行中”的節點單獨拎出來,過濾掉那些未開始或已完成的節點。 |
![]() |
SUM()¶
這個很好理解,就是做加法。你給它一組數字,它幫你算出總和。需要注意的是,它括號裡的內容必須是數字,不能是文字。
| 實際場景 | 圖示 |
|---|---|
| 你想計算所有“進行中”任務的總估分,該怎麼寫? 第一步:用 FILTER 挑出進行中的任務。第二步:用 . 提取出這些任務的“估分”。第三步:用 SUM() 把這些估分加起來。總結: SUM( 篩選出來的進行中節點.${節點估分} )作用: 把列表裡每一項的估分數值拿出來,相加得到一個總分。 |
![]() |
COUNT()¶
SUM 是算數字相加的總和,而 COUNT 是數個數。不管列表裡裝的是數字、名字還是長篇大論,COUNT 只負責清點數量(有幾條資料)。
| 實際場景 | 圖示 |
|---|---|
| 作用: 系統不去管這些缺陷是誰提的、嚴不嚴重,它只負責去數一數當前這個需求下面,一共繫結了多少個缺陷。如果繫結了 3 個缺陷,這個函式的計算結果就是 3。 | ![]() |
IF()¶
if 函式就像一個“分岔路口”,根據你設定的條件,自動決定顯示哪種結果。你需要給它提供三個“零件”,並用英文逗號 , 隔開:
IF ( 判斷條件 , 滿足條件時輸出的結果 , 不滿足條件時輸出的結果 )
| 實際場景 | 圖示 |
|---|---|
第一部分(判斷):SUM(${流程節點}.${節點估分}) > 50。系統會先計算當前所有節點的估分總和,並判斷是否大於 50。第二部分(成立): "大需求"。如果總估分確實大於 50,系統就會在該欄位顯示“大需求”。第三部分(不成立): "小需求"。如果總估分不大於 50(例如計算結果為 30),系統則會顯示“小需求”。 |
![]() |
六、實戰解析¶
前面介紹了基礎概念和常用函式,本章透過幾個典型場景,演示如何把業務需求逐步轉化為系統公式。
更多場景檢視:
場景一:統計關聯缺陷數量¶
需求分析¶
我們希望在“需求”工作項上,能實時看到兩項關鍵資料:
- 這個需求總共關聯了多少個缺陷。
- 在這些關聯的缺陷中,有多少個是最高優先順序(P0)的。
公式拆解¶
- 統計總數:需要統計“需求-關聯缺陷”關聯欄位中包含多少個缺陷例項,使用
COUNT()函式即可。 - 公式片段:
COUNT($related{需求-關聯缺陷}) - 統計 P0 缺陷數:需要先在“需求-關聯缺陷”關聯資料中篩選出優先順序為 P0 的缺陷,再對篩選結果進行計數。
- 篩選 P0 缺陷:
FILTER($related{需求-關聯缺陷}, each.${優先順序} == $option{P0}) - 對篩選結果計數:
COUNT(...)
完整公式與結果解釋¶
- 公式 1:關聯缺陷總數
- 公式 2:P0 級缺陷數量
場景二:計算研發投入的工作量¶
需求分析¶
我們想統計一個需求中,所有和“開發”相關的流程節點,它們的“節點估分”總和是多少。這可以幫助我們快速評估研發側投入的工作量。
公式拆解¶
- 篩選出研發相關節點:需求流程中可能有很多節點(如“設計”、“評審”、“測試”),我們只關心和“開發”相關的。因為節點名稱可能是“前端開發”、“後端開發”等,所以我們需要用“包含”的邏輯來查詢,
MATCH()函式是最佳選擇。 - 公式片段:
FILTER(${流程節點}, MATCH(each.${名稱}, "開發")) - 獲取這些節點的估分:篩選後得到的是隻包含開發節點的陣列,此時可以透過點語法
.取出每個節點的“節點估分”。 - 公式片段:
... .${節點估分} - 求和:最後,把所有拿到的估分數字加起來,得到總和。
- 公式片段:
SUM(...)
完整公式與結果解釋¶
結果解釋:這個公式會精確地計算出所有名稱中帶有“開發”字樣的流程節點的估分總和,並返回一個數字。例如,如果“前端開發”估分是 10,“後端開發”估分是 20,那麼結果就是 30。
舉一反三:如果我想統計“埋點設計”和“AB方案設計”這兩個特定節點的估分總和呢? 這時就不需要模糊匹配了,直接用
==和||(或) 來精確指定:
場景三:計算需求完成進度¶
需求分析¶
我們想用一個百分比來直觀地展示當前需求的完成進度,進度等於“已完成的節點數”除以“總節點數”。
公式拆解¶
- 計算已完成節點數:我們需要按條件計數,
COUNTIF()函式非常適合。 - 公式片段:
COUNTIF(${流程節點}, each.${節點狀態} == "已完成") - 計算總節點數:直接用
COUNT()函式數一下流程節點這個籃子裡有多少個節點就行。為了確保計數的準確性,我們通常會數節點的 ID。 - 公式片段:
COUNT(${流程節點}.${節點ID}) - 計算比例:用“已完成數”除以“總數”。
完整公式與結果解釋¶
結果解釋:這個公式會得出一個小數(例如 0.5)。你需要在公式欄位的【計算結果顯示】設定中,將顯示格式選為“百分比”,這樣它就會自動顯示為“50%”,非常直觀。
七、公式計算欄位應用¶
新增至詳情頁¶
空間管理員前往對應工作項“詳情頁佈局”選項中,點選左側“欄位管理”,拖拽相關公式欄位至詳情頁。

新增至表格檢視¶
公式欄位也可以配置在表格檢視上,方便快捷檢視需求進度、關聯缺陷數量等欄位資訊。滑鼠移動至表格列中間,點選 +,選擇對應計算欄位即可。

新增至列表檢視¶
公式欄位也可以配置在列表檢視上,方便快捷檢視關聯事項的進度統計。

新增至節點表單¶
你可以將結果為布林值的公式計算欄位新增至節點表單並設為必填,以此作為工作項的節點流轉條件(准入/準出規則)。 場景示例: 在需求工作項的“測試”節點,設定“只有當其關聯的所有 P0 級別缺陷均已修復時,才允許流轉到下一節點”。 步驟一:新建公式計算欄位 建立一個新的公式計算欄位,用於校驗流轉條件。 步驟二:編寫校驗公式 將寫好的公式填入計算欄位。以下提供上述示例的公式及通用模板: 📄 示例公式(可直接複製): 📄 通用模板(更簡潔的寫法,直接返回布林值): 步驟三:新增至節點表單並設為必填 將配置好的公式計算欄位新增至目標節點(如“測試”節點)的表單中,並勾選為必填項,即可生效。

💡 配置注意事項
- 必須返回布林值:作為流轉條件的公式,最終計算結果必須是
true(允許流轉)或false(禁止流轉)。 - 邏輯嚴密性:需準確反向定義“允許流轉”的條件。如上例中,允許流轉的底層邏輯是“不存在未關閉的 P0 缺陷”,因此公式為判斷該類缺陷數量是否為 0。
新增至訊息通知卡片¶
在自動化中,支援將公式計算欄位配置到訊息通知卡片中,直觀呈現關鍵指標或資料。瞭解自動化通知:

計算欄位參與度量¶
計算欄位也可以參與實際度量,比如統計的金額計算。

八、場景案例庫¶
更多場景檢視:
春節日期 - 今天日期 = 相差天數 daysBetween(今天日期,春節日期) //等價春節日期 - 今天日期 = 天數 workdaysBetween(今天日期,春節日期) //等價春節日期 - 今天日期且去除非工作日的天數。 COUNT($related{需求-關聯缺陷}) //結果解釋:這個公式會返回一個數字,即當前需求下關聯的所有缺陷的總個數。 COUNT(FILTER($related{需求-關聯缺陷}, each.${優先順序} == $option{P0})) //結果解釋:這個公式會返回一個數字,它代表在所有關聯的缺陷中,優先順序被標記為“P0”的缺陷數量。 SUM(FILTER(${流程節點}, MATCH(each.${名稱}, "開發")).${節點估分}) SUM(FILTER(${流程節點}, each.${名稱} == "埋點設計" || each.${名稱} == "AB方案設計").${節點估分}) COUNTIF(${流程節點}, each.${節點狀態} == "已完成") / COUNT(${流程節點}.${節點ID}) // 當狀態為“開啟”或“重新開啟”的 P0 缺陷數量為 0 時,返回 true IF( COUNT( FILTER( {缺陷關聯需求}, each.{優先順序} == $option{P0} && (each.{當前狀態} == $option{OPEN} || each.{當前狀態} == $option{REOPEN}) ) ) == 0, true, false ) COUNT(FILTER({關聯關係欄位}, {不允許流轉的條件})) == 0 SUM(FILTER(${流程節點},each.${節點狀態} == $option{已完成}).${節點估分}) {"產品經理":"飛小小"} { "產品經理":"飛小小", "身高":160, "合作方":["書大大","專案目"], "產品技能": { "溝通": 100, "邏輯": 100, } } [{"姓名":"飛小小"}, {"姓名":"書大大"}, {"姓名":"專案目"}] 1+2+3 -> 6 1-2-3 -> -4 123 -> 6 1/2/2 -> 0.25 1<2 -> true 1<=1 -> true 1 > 2 -> false 3 >= 1 -> true 1 == 1 -> true 1 != 2 -> true count([1,2,3]) -> 3 count(關聯缺陷) countdistinct( [1,2,3] ) -> 3 countdistinct(關聯缺陷) countif(關聯缺陷,each.優先順序 == P0) countdistinctif(關聯缺陷,each.優先順序 == P0) sum([1,2,3]) sumif(filter(關聯缺陷, each.優先順序 == "P0").估分), 需求狀態 == "已完成") avg([1,2,3]) avg(filter(關聯缺陷, each.優先順序 == "P0").時間)) avgif(filter(關聯缺陷, each.優先順序 == "P0").時間), 需求狀態 == "已完成") max([1,2,3]) max(filter(關聯缺陷, each.優先順序 == "P0").估分)) maxif(filter(關聯缺陷, each.優先順序 == "P0").估分), 需求狀態== "已完成") min([1,2,3]) min(filter(關聯缺陷, each.優先順序 == "P0").時間)) MINIF(filter({需求-缺陷關聯}, each.${優先順序} == {P0}).${估分}, ${當前狀態}==$option{已結束})//P0缺陷的最小估分 filter(關聯缺陷, each.優先順序 == "P0" && 狀態== "已完成") filter(關聯缺陷, each.優先順序 == "P0" || 狀態== "已完成") if(sum(filter({流程節點},match(each.{名稱},"開發")).{節點估分}) > 50,"大需求","小需求") not(優先順序 == P0) valid(優先順序) empty(優先順序) round(2.15,0) -> 2 ceil(2.15) -> 3.00 ceil(-1.3) -> -1.0 floor(2.15) -> 2.00 floor(-1.3) -> -2.0 sqrt(16) -> 4 sqrt(-16) -> N/A workdaysBetween(date("2022-3-20"),date("2022-3-27")) //輸出結果 5 daysBetween(date("2021-1-1"),date("2021-1-10")) //輸出結果 9 date_add(預計開始時間,-10) getyear(today()) -> 2022 GETMONTH(TODAY()) ->11 GETWEEKOFYEAR(TODAY()) ->45 join([{名稱},{當前狀態}],"-") // "計算欄位-開發中" match({名稱},"開發") // 匹配 iOS 開發、前端開發 length({終止原因}.{原因}) // 20 filter({流程節點},each.{名稱}=="埋點設計" || each.{名稱}=="AB方案設計").{節點估分} filter({流程節點},each.{節點狀態}=="進行中").{節點估分} //["{iOS 開發}.節點估分"," {Android 開發}.節點估分",....] find({流程節點},each.{節點狀態}=="進行中").{節點估分} //{iOS 開發}.節點估分,輸出第一個 contains({關聯缺陷},each.缺陷.優先順序=P0)) containsAny({關聯缺陷},each.缺陷.優先順序=P0,缺陷名)) SUM(MAP(["1","2","3"],NUMBER(each))) // 6 SUM(MAP([1,2,3,4],IF(each_index%2!=0,each,0))) // 4 SPLIT("arr1_arr2","_") // ["arr1","arr2"] REGEXP("123abc", "^\d+") // 123 INDEX([1,2,3],1) // 2 ORD("c") // 99 date("2021-10-31") string(3) -> "3" string(預計開始日期) -> "2022-03-03 18:02:53" bool(3) -> true bool(0) -> false bool("") -> false FORMAT(123,"0000") == "0123" FORMAT(完成日期,"YYYY-MM-DD HH:mm:ss")=="2023-01-02 15:03:29" FORMAT(完成日期,"DDDDD")=="1~7" ${流程節點}.${節點估分} each.${節點狀態} == $option{已完成} FILTER(${流程節點}, each.${節點狀態} == $option{進行中}) SUM(FILTER(${流程節點}, each.${節點狀態} == $option{進行中}).${節點估分}) COUNT($related{需求-關聯缺陷}) IF(SUM(${流程節點}.${節點估分}) > 50, "大需求", "小需求")















