在 Ragic 中使用公式時,你可能會遇到以下情況:
「為什麼第一次設定公式時有計算出結果,但後來修改公式後欄位卻沒有更新?」
「為什麼透過匯入資料、更新其他表單欄位值,或使用拋轉功能後,公式沒有被觸發?」
這是因為 Ragic 公式的運作有一項基本原則:公式只會在輸入的地方觸發。也就是說,在沒有額外設定的情況下,公式只會在你手動輸入或編輯資料時,且是在輸入資料位置的同一個表單(介面)上才會被觸發。
當你在表單中新增資料後,若之後才在設計模式中新增或修改欄位的公式,回到資料查看時可能會發現該欄位沒有依照新設定的公式計算出新的欄位值。
這就是因為「公式只會在輸入資料的當下觸發」。也就是說,如果資料已經填寫完成才修改公式,新的公式將不會自動套用在既有資料上。只有重新編輯該筆資料,公式才會被重新觸發並更新欄位值。
這除了考量公式運算的效能,也是因為許多狀況下公式的修改不應該套用在舊資料上,比較詳細的舉例可以參考公式文件這部分的詳細說明。
如果希望調整公式之後的結果套用在所有現有資料上,除了手動重新編輯資料以觸發公式,也可以執行一次公式重算(屬於利用程式在後端觸發的情況,非手動自然觸發公式運算)。
即便資料有變動,若不是在公式所套用的表單中進行修改,就不會觸發該表單的公式。
以「訂單」為例,即使在其他表單(例如「商品」)中編輯了價格資料,也不會自動觸發「訂單」上的公式。必須直接在「訂單」表單中編輯資料(例如輸入新的訂購數量),才會觸發該表單上的公式計算。
此外,若你並非直接在「訂單」中手動編輯資料,而是透過 Ragic 的其他功能從其他地方更新「訂單」的資料,那麼公式並不一定會自動觸發,需要進行額外設定。以下分別說明:
透過更新別張表單欄位值、資料拋轉動作按鈕、或匯入資料來修改欄位時,若沒有勾選進階設定中的「重新計算公式」,則該表單公式不會自動觸發。
由於表單頁和列表頁在設計上屬於不同的介面,在公式觸發上不被視為「同一個地方」,因此可分別設定各自的公式。若你只在表單頁套用了公式,在列表頁修改資料時將不會觸發該公式;反之亦然。
若你經常需要在列表頁直接輸入或修改資料,建議除了在表單頁設計模式中套用公式外,也應將相關欄位加入列表頁,並在列表頁的設計模式中設定相同的公式,以確保公式能正確運作。
多版本工作表中的每個版本在公式設定上是彼此獨立的,因此若有需要,應分別在各版本中設定公式。
若同一個欄位在不同版本中使用不同的公式,請務必確保計算結果一致,以避免欄位值在不同版本間被覆蓋。
建議可透過欄位資訊功能,一次檢視同一個欄位在所有不同版本表單的公式設定。
針對子表格產生的新表單、參照子表格(顯示從其他表單的連結)的情況,可在表單頁設計模式 > 左側工具列中的表單設定中勾選儲存時觸發「原始表單(預設已勾選)」或「相關表單」的全部公式重算。相關說明請參考此連結。
1. 公式語法錯誤
請先確認公式是否設定正確,並特別留意使用條件公式(IF 公式)時要注意以下事項:
(1) 參考這篇說明,確認是否需要在公式內容中加入 .RAW。
(2) 若條件公式中搭配使用 TODAY() 或 NOW(),需注意目前系統尚不支援將這兩個函數直接加入 IF() 中進行運算。請先另外新增一個欄位計算 TODAY() 或 NOW(),再於條件公式中引用該欄位。相關說明與範例可參考這裡。
2. 欄位格式與公式不相符
有些公式的設定跟欄位種類有關係,例如加減運算、比大小這些只適用於數值、金額、日期等欄位。
3. 自動產生欄位導致的公式重算錯誤
自動產生欄位最後存檔的值並不一定是新增資料時顯示在該欄位上的值,因為可能有兩個人同時在同一張表單新增資料,這時候兩個人的自動產生值會是相同的,但其中一人先存檔,另一個人存檔後就會跳為下一個序號, 以避免重複。
但如果有別的欄位套用公式參照這個自動產生欄位,存檔前看起來前端公式重算正確,但存檔後就會發現前端公式重算錯誤了。
所以建議如果表單中有別的欄位套用公式參照自動產生欄位,要自行寫 post workflow 在存檔時自動執行後端公式重算。
4. 使用 TODAY 公式遇到每日公式重算問題
可參考此篇說明來排除。
若希望修改舊資料後可以觸發相關公式,除了進入設計模式執行整張表單的公式重算,也可以新增一個套用表單上所有公式到此筆資料的動作按鈕。
若有需求讓系統每天自動重算一次表單上的公式(例如使用 TODAYTZ() 判斷當日日期),則可以設定每日公式重算的工作流程。