Giao diện
Câu hỏi thường gặp
Công thức có hỗ trợ tham chiếu field ở bảng khác (relation) không?
Không. Hiện tại formula chỉ tham chiếu field trong cùng bản ghi (cùng collection). Không hỗ trợ cross-record hay relation lookup.
Thay đổi công thức có tự động cập nhật giá trị cũ không?
Có. Khi sửa expression trong field definition, hook fields.afterUpdate sẽ recompute toàn bộ bản ghi trong collection với công thức mới.
Collection có 100k bản ghi — sửa công thức có mất lâu không?
Có thể mất vài phút. Recompute duyệt và tính lại từng bản ghi. Nên thực hiện vào giờ thấp điểm. Theo dõi log server để biết tiến độ.
Công thức tham chiếu field bị xóa thì sao?
Kết quả tính toán sẽ trả về null hoặc NaN (tùy engine) vì không tìm thấy giá trị cho field đã xóa. Nên sửa lại expression sau khi xóa/đổi tên field.
Nên chọn engine mathjs hay formula (excel-like)?
| Tiêu chí | mathjs | formula (excel-like) |
|---|---|---|
| Tính toán số | Mạnh — hỗ trợ đầy đủ phép toán | Cơ bản |
| Logic điều kiện | Không có IF | Có IF, AND, OR |
| Xử lý chuỗi | Không | Có CONCAT, TRIM... |
| Hàm toán nâng cao | sqrt, abs, log, sin... | Hạn chế |
Quy tắc: dùng mathjs cho phép tính số thuần túy, dùng formula khi cần logic hoặc chuỗi.
Formula field có thể dùng làm input cho formula field khác không?
Có thể nhưng cần cẩn thận thứ tự tính toán. Nếu field A phụ thuộc field B (cũng là formula), field B phải được tính trước. Hệ thống tính theo thứ tự khai báo — field được tạo trước tính trước.
Giá trị formula field có lưu trong DB hay tính on-the-fly?
Giá trị lưu trong DB (persisted). Mỗi lần save/update, hook tính và ghi kết quả vào cột. Đọc bản ghi chỉ cần lấy giá trị đã tính sẵn, không cần tính lại.
Expression Editor có validate cú pháp không?
Editor cung cấp autocomplete tên field nhưng validation cú pháp cơ bản. Nếu expression sai cú pháp, lỗi sẽ xuất hiện khi tính toán (server-side), không phải lúc soạn.