NocoDB 公式與關聯教學:讓資料自己算出來
手動維護的欄位遲早會對不起來。這篇說明關聯、Lookup、Rollup 與公式的分工,以及為什麼「現有庫存」不該是一個讓人手動填的欄位。
🚀 想直接開始?60 秒部署你的 NocoDB
智慧電子表格 — Airtable 的開源替代品。月付 NT$499 起,
自組系統最後失敗的原因,多半不是功能不夠,是有些數字要靠人記得更新。
訂單金額改了、庫存出了一批、客戶的累計消費要重算——只要這些是手動填的,遲早會有一格忘了改,然後整份資料就不能信了。
關聯與公式就是把這些「應該自動算出來」的欄位交給系統。
30 秒總覽
| 功能 | 做什麼 | 典型用途 |
|---|---|---|
| 關聯 Link | 把兩張表連起來 | 訂單 ↔ 客戶 |
| Lookup | 把關聯那邊的欄位拉過來顯示 | 在訂單看到客戶電話 |
| Rollup | 對關聯的多筆做彙總 | 客戶的累計消費金額 |
| 公式 Formula | 依同一列的欄位計算 | 單價 × 數量 = 小計 |
四個裡面關聯是地基——Lookup 和 Rollup 都依賴它,沒先建好關聯,那兩個一定是空的。
關聯:先想清楚是哪一種
一對多
最常見。一個客戶有多筆訂單、一個專案有多個任務、一個品項有多筆進出貨紀錄。
多對多
一篇文章有多個標籤,一個標籤也對應多篇文章。
建關聯之前先問一句
「這個欄位會不會重複出現在很多列?」會的話它就該獨立成一張表,用關聯連過去。
把客戶名稱直接打在每一筆訂單裡,是試算表的做法。客戶改名的時候你要改一百列,而且一定會漏。
Lookup:把資料拉過來看,不是複製過來
在訂單表想看到客戶的電話,不需要再開一個電話欄位手動填。用 Lookup 從關聯的客戶那邊拉過來就好。
重點是它是即時的——客戶改了電話,所有訂單看到的都是新的。這正是手動複製做不到的事。
Rollup:多筆變一個數字
Rollup 對關聯的所有紀錄做彙總。常用的有加總、計數、平均、最大最小。
| 想知道 | 怎麼設 |
|---|---|
| 這個客戶總共買了多少錢 | 對訂單金額做 SUM |
| 這個客戶下過幾次單 | 對訂單做 COUNT |
| 這個品項現在還有多少 | 對異動數量做 SUM(出貨記負數) |
| 最後一次聯絡是什麼時候 | 對聯絡日期做 MAX |
第三列是關鍵設計:庫存不該是一個欄位,應該是異動紀錄的加總。這樣任何時候數字有疑問,都能往回追是哪一筆造成的。做法在當庫存管理那篇有完整說明。
公式:同一列的計算
公式處理的是同一列裡欄位之間的運算,跟 Rollup 的跨表彙總不一樣。
常見用途:
- 單價 × 數量 = 小計
- 小計 × 稅率 = 含稅金額
- 結束日期 − 開始日期 = 天數
- 依金額判斷等級,回傳「A 級」「B 級」
公式欄位不能手動改
這是它的特性不是限制——不能改才不會被改壞。如果某個數字你希望「通常自動算,但偶爾要能手動蓋過」,那它就不該用公式,該用一般欄位加上檢查機制。
建立順序:這個弄反了會很痛
- 先把資料表建好,欄位型別設對
- 再建關聯
- 然後才是 Lookup 與 Rollup
- 最後補公式
順序反了的典型症狀是:Rollup 欄位一直是空的,因為關聯還沒接。這是新手最常卡住的地方,而且畫面上不會告訴你原因。
什麼時候不該用這些
誠實講:如果你的資料就是一張清單,沒有跨表的關係,那關聯與 Rollup 都用不上。硬拆成三張表只是把簡單的事變複雜。
判斷標準很簡單:你有沒有同一個東西被重複輸入在很多列。沒有的話,一張表就夠了。
一個完整的例子:訂單系統
把四種功能組在一起看,會比分開講清楚:
三張表
- 客戶——姓名、聯絡方式
- 訂單——日期、客戶(關聯)、狀態
- 訂單明細——訂單(關聯)、品項、單價、數量
四個自動算出來的欄位
| 在哪張表 | 欄位 | 用什麼 |
|---|---|---|
| 訂單明細 | 小計 | 公式:單價 × 數量 |
| 訂單 | 訂單金額 | Rollup:對明細的小計做 SUM |
| 訂單 | 客戶電話 | Lookup:從客戶表拉過來 |
| 客戶 | 累計消費 | Rollup:對訂單金額做 SUM |
這四個欄位沒有任何一個需要人手動維護。改了一筆明細的數量,小計、訂單金額、客戶累計消費會一路更新上去。
對照試算表的做法
同樣的需求在試算表裡,多半是一張大表,客戶名稱重複打在每一列,金額用 SUMIF 跨頁抓。能動,但客戶改名要改一百列,而且沒有人知道哪一列漏改了。
差別不在功能,在「錯了看不看得出來」。
常見問題
Q:Rollup 欄位是空的?
九成是關聯還沒建好,或關聯的那一側沒有資料。先確認關聯欄位裡真的有連到紀錄。
Q:公式可以引用別張表的欄位嗎?
不行。公式的範圍是同一列。要用別張表的資料,先用 Lookup 拉過來,再讓公式引用那個 Lookup 欄位。
Q:資料很多的時候 Rollup 會不會很慢?
關聯筆數大的時候會有感。如果某個 Rollup 要彙總上萬筆,考慮改成定期計算後存進一般欄位,而不是每次即時算。
Q:可以在公式裡用條件判斷嗎?
可以,這是最常用的功能之一——依金額分級、依狀態顯示不同文字都靠它。語法細節看官方文件,版本之間偶有差異。
效能:什麼時候該停止即時計算
Rollup 與公式都是即時算的,資料量小的時候感覺不出來。
會開始有感的情況:單一 Rollup 要彙總上萬筆關聯紀錄,或一張表裡疊了很多層(公式引用 Lookup、Lookup 又來自 Rollup)。
兩個處理方向:
- 減少層數——中間結果先存成一般欄位,不要一路串下去
- 改成定期計算——用自動化流程每天算一次寫進一般欄位,而不是每次開啟都重算
第二種要權衡:數字會有延遲。「昨天的正確數字」跟「即時但很慢」哪個比較能用,看你的實際場景。
資料來源與延伸連結
- NocoDB 官方文件——公式函式清單與欄位型別說明
- NocoDB 原始碼與版本紀錄
延伸閱讀
準備好開始使用 NocoDB 了嗎?
完成訂閱後 60 秒,系統自動幫你裝好 NocoDB——獨立容器、資源硬性上限不與他人共用、HTTPS 開箱即用。
立即訂閱 NocoDB月付訂閱、不綁約、隨時取消