常見問題與報錯¶
常見報錯¶
第一原則:檢查你的所有標點符號! 公式中所有的
( )[ ]{ },"都必須是 半形 符號。從別處複製的文字很可能包含中文全形標點,這是 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可以返回小數
計算欄位不滿足有效性,依舊可以計算:¶
計算欄位配置了有效性且不滿足有效性,修改計算公式中使用的欄位值,操作記錄依舊可以正常展示重新計算,符合預期的產品邏輯:計算欄位有效性不影響計算欄位的計算。
自增編號是否可以修改?¶
不可以,自增編號按照例項的建立順序生成,並且匯入的例項由於無法調整提出時間也可以定義自增編號。
在計算欄位中,可以計算關聯工作項的數量上限是多少?¶
在計算欄位中,關聯工作項的數量上限根據關聯方式不同分為兩種情況:
- 手動關聯場景:當A工作項例項a透過手動方式關聯B工作項例項時,該計算欄位可統計的關聯例項數量上限為10,000個。
- 批次匯入場景:當A工作項例項a透過批次匯入功能關聯B工作項例項時,該計算欄位可統計的關聯例項數量上限為4,000個。
find()和filter()的區別¶
| 函式 | 返回結果型別 | 適用場景 |
|---|---|---|
find() |
單個物件 | 當你只需要找到第一個符合特定條件的元素時,應該使用 find()。 例如: 在一個使用者列表中查詢第一個年齡大於 30 的使用者。 在一個商品列表中查詢第一個價格低於 50 元的商品。 find() 函式會返回一個單個物件,如果找不到,則返回 undefined。 |
filter() |
陣列 | 需要找到所有匹配的元素,並將其收集起來 當你需要找到所有符合特定條件的元素時,應該使用 filter()。 例如: 從一個部落格文章列表中找出所有標籤為“技術”的文章。 在一個學生成績單中找出所有分數高於 90 分的學生。 filter() 函式會返回一個包含所有符合條件元素的新陣列,即使只有一個元素符合條件,它也會被放入一個陣列中。如果沒有任何元素符合條件,則返回一個空陣列 []。 |