跳轉至

常見問題與報錯

常見報錯

第一原則:檢查你的所有標點符號! 公式中所有的 ( ) [ ] { } , " 都必須是 半形 符號。從別處複製的文字很可能包含中文全形標點,這是 90% 公式錯誤的根源。

錯誤:欄位型別不匹配

  • 現象sum() daysBetween() min() 等函式報錯。
  • 原因:這些函式對輸入的欄位型別有嚴格要求。例如 sum() 只能計算數值型別,你卻餵給它一個文字欄位。
  • 排查:確認你傳入的每個欄位,在Meegle的欄位管理中,其型別是否正確。{建立時間} 必須是“日期”型別,{估分} 必須是“數字”型別。

錯誤:each 使用錯誤

  • 現象:公式報錯,提示 each 上下文不存在或類似資訊。
  • 原因each 只能在迭代函式(如 filter, map 等)的內部使用,用於指代當前正在被遍歷的列表中的一項。
  • 排查:檢查你的 each 是不是用在了 filter({列表}, each.{判斷條件}) 這樣的結構裡。你不能在一個普通公式裡直接寫 each.{欄位名}

錯誤:空值(null)導致

  • 現象find() 返回的結果再進行 . {欄位名} 操作時報錯。
  • 原因find() 在沒有找到任何滿足條件的項時,會返回 null。對 null 進行任何操作(如 null.{欄位名})都會導致錯誤。
  • 排查:在執行 find() 之後,最好先用 if(count(...) > 0, ...) 來確保至少有一個匹配項存在。

錯誤:字串與數值運算

  • 現象:拼接文字時數字格式怪異,或數學運算報錯。
  • 原因join() 需要的是字串列表,而 {工作項id} 是數值。反之,+ - * / 需要的是數值。
  • 排查:使用 string() 將數值轉為字串,使用 number() 將字串(如果內容是數字)轉為數值。

錯誤:結果不正確

  • 現象:公式不報錯,但結果不符合預期。例如,進度條永遠是 0% 或 100%。
  • 原因:可能是除零錯誤(總數為0),或是閾值判斷邏輯寫反了 (> 寫成 <),或是小數的精度問題 (0.5 寫成了 0.05)。
  • 排查:分段除錯。將一個複雜的公式拆成幾部分,分別用單獨的公式欄位看中間結果是否正確。例如,先看 分子 的計算結果,再看 分母,最後再看 分子/分母

常見問題

計算公式欄位能否應用到度量?

支援。

計算公式欄位能否在表格中進行編輯?

不支援,需要前往後臺工作項編輯配置。

計算公式欄位能否設定隱藏?

支援設定,請前往空間配置 - 使用者組管理中設定。

如果數量出現重複資料如何處理?

請使用 countdistinct() 或者帶有條件使用 countdistinctif() 函式。

計算公式欄位是否支援數值匯出?

支援,目前僅支援管理員在表格檢視中匯出。

計算公式欄位是否支援內嵌飛書文件中展示?

支援。

計算公式計算關聯需求資料有問題原因是什麼?

計算了已經終止的需求數量,需排出,使用 && =! 已終止

判斷公式裡欄位為空的幾種寫法

普通欄位判斷為空:empty(欄位)==true 數字欄位判斷為空:欄位==0 下鑽欄位判斷為空:e.g.:${業務線}.${二級選項}=="" 普通節點排期不為空:each.{節點排期}.{週期時長}!=0 里程碑節點排期不為空:STRING(FORMAT(each.${節點排期}.${預計結束日期},"YYYY-MM-DD"))!="1970-01-01"

計算欄位結果為暫無/空:

-看一下公式是否使用了find、max、min函式,max、min函式中,第一個引數為空陣列的時候公式會無效;find 只要找到一次空陣列,計算結果就為空。 -看一下公式是否存在workdaysBetween/daysBetween函式。在計算欄位workdaysBetween/daysBetween函式計算邏輯中只要有引數為空的,欄位就會無效。 -公式新建/配置修改會觸發當前計算欄位所在工作項下的例項全量重新計算,如果當前工作項例項資料比較多,需要等待。

workdaysBetween/daysBetween函式計算結果不一致:

workdaysbetween:工作日的演算法是:起止時間按完整天數計算(如果引數中date1和date2為同一天,計算結果為:1),只能返回整數 daysbetween:自然日演算法是按:起止時間差值/24小時(日期存的值都是時間戳),daysbetween可以返回小數

計算欄位不滿足有效性,依舊可以計算:

計算欄位配置了有效性且不滿足有效性,修改計算公式中使用的欄位值,操作記錄依舊可以正常展示重新計算,符合預期的產品邏輯:計算欄位有效性不影響計算欄位的計算。

自增編號是否可以修改?

不可以,自增編號按照例項的建立順序生成,並且匯入的例項由於無法調整提出時間也可以定義自增編號。

在計算欄位中,可以計算關聯工作項的數量上限是多少?

在計算欄位中,關聯工作項的數量上限根據關聯方式不同分為兩種情況:

  1. 手動關聯場景:當A工作項例項a透過手動方式關聯B工作項例項時,該計算欄位可統計的關聯例項數量上限為10,000個。
  2. 批次匯入場景:當A工作項例項a透過批次匯入功能關聯B工作項例項時,該計算欄位可統計的關聯例項數量上限為4,000個。

find()filter()的區別

函式 返回結果型別 適用場景
find() 單個物件 當你只需要找到第一個符合特定條件的元素時,應該使用 find()。
例如:
在一個使用者列表中查詢第一個年齡大於 30 的使用者。
在一個商品列表中查詢第一個價格低於 50 元的商品。
find() 函式會返回一個單個物件,如果找不到,則返回 undefined。
filter() 陣列 需要找到所有匹配的元素,並將其收集起來
當你需要找到所有符合特定條件的元素時,應該使用 filter()。
例如:
從一個部落格文章列表中找出所有標籤為“技術”的文章。
在一個學生成績單中找出所有分數高於 90 分的學生。
filter() 函式會返回一個包含所有符合條件元素的新陣列,即使只有一個元素符合條件,它也會被放入一個陣列中。如果沒有任何元素符合條件,則返回一個空陣列 []。