教學

NocoDB 公式與關聯教學:讓資料自己算出來

手動維護的欄位遲早會對不起來。這篇說明關聯、Lookup、Rollup 與公式的分工,以及為什麼「現有庫存」不該是一個讓人手動填的欄位。

E
Eric 浪花科技創辦人 ·

🚀 想直接開始?60 秒部署你的 NocoDB

智慧電子表格 — Airtable 的開源替代品。月付 NT$499 起,

立即訂閱 NocoDB

自組系統最後失敗的原因,多半不是功能不夠,是有些數字要靠人記得更新

訂單金額改了、庫存出了一批、客戶的累計消費要重算——只要這些是手動填的,遲早會有一格忘了改,然後整份資料就不能信了。

關聯與公式就是把這些「應該自動算出來」的欄位交給系統。

30 秒總覽

功能做什麼典型用途
關聯 Link把兩張表連起來訂單 ↔ 客戶
Lookup把關聯那邊的欄位拉過來顯示在訂單看到客戶電話
Rollup對關聯的多筆做彙總客戶的累計消費金額
公式 Formula依同一列的欄位計算單價 × 數量 = 小計

四個裡面關聯是地基——Lookup 和 Rollup 都依賴它,沒先建好關聯,那兩個一定是空的。

關聯:先想清楚是哪一種

一對多

最常見。一個客戶有多筆訂單、一個專案有多個任務、一個品項有多筆進出貨紀錄。

多對多

一篇文章有多個標籤,一個標籤也對應多篇文章。

建關聯之前先問一句

「這個欄位會不會重複出現在很多列?」會的話它就該獨立成一張表,用關聯連過去。

把客戶名稱直接打在每一筆訂單裡,是試算表的做法。客戶改名的時候你要改一百列,而且一定會漏。

Lookup:把資料拉過來看,不是複製過來

在訂單表想看到客戶的電話,不需要再開一個電話欄位手動填。用 Lookup 從關聯的客戶那邊拉過來就好。

重點是它是即時的——客戶改了電話,所有訂單看到的都是新的。這正是手動複製做不到的事。

Rollup:多筆變一個數字

Rollup 對關聯的所有紀錄做彙總。常用的有加總、計數、平均、最大最小。

想知道怎麼設
這個客戶總共買了多少錢對訂單金額做 SUM
這個客戶下過幾次單對訂單做 COUNT
這個品項現在還有多少對異動數量做 SUM(出貨記負數)
最後一次聯絡是什麼時候對聯絡日期做 MAX

第三列是關鍵設計:庫存不該是一個欄位,應該是異動紀錄的加總。這樣任何時候數字有疑問,都能往回追是哪一筆造成的。做法在當庫存管理那篇有完整說明。

公式:同一列的計算

公式處理的是同一列裡欄位之間的運算,跟 Rollup 的跨表彙總不一樣。

常見用途:

  • 單價 × 數量 = 小計
  • 小計 × 稅率 = 含稅金額
  • 結束日期 − 開始日期 = 天數
  • 依金額判斷等級,回傳「A 級」「B 級」

公式欄位不能手動改

這是它的特性不是限制——不能改才不會被改壞。如果某個數字你希望「通常自動算,但偶爾要能手動蓋過」,那它就不該用公式,該用一般欄位加上檢查機制。

建立順序:這個弄反了會很痛

  1. 先把資料表建好,欄位型別設對
  2. 再建關聯
  3. 然後才是 Lookup 與 Rollup
  4. 最後補公式

順序反了的典型症狀是:Rollup 欄位一直是空的,因為關聯還沒接。這是新手最常卡住的地方,而且畫面上不會告訴你原因。

什麼時候不該用這些

誠實講:如果你的資料就是一張清單,沒有跨表的關係,那關聯與 Rollup 都用不上。硬拆成三張表只是把簡單的事變複雜。

判斷標準很簡單:你有沒有同一個東西被重複輸入在很多列。沒有的話,一張表就夠了。

一個完整的例子:訂單系統

把四種功能組在一起看,會比分開講清楚:

三張表

  • 客戶——姓名、聯絡方式
  • 訂單——日期、客戶(關聯)、狀態
  • 訂單明細——訂單(關聯)、品項、單價、數量

四個自動算出來的欄位

在哪張表欄位用什麼
訂單明細小計公式:單價 × 數量
訂單訂單金額Rollup:對明細的小計做 SUM
訂單客戶電話Lookup:從客戶表拉過來
客戶累計消費Rollup:對訂單金額做 SUM

這四個欄位沒有任何一個需要人手動維護。改了一筆明細的數量,小計、訂單金額、客戶累計消費會一路更新上去。

對照試算表的做法

同樣的需求在試算表裡,多半是一張大表,客戶名稱重複打在每一列,金額用 SUMIF 跨頁抓。能動,但客戶改名要改一百列,而且沒有人知道哪一列漏改了。

差別不在功能,在「錯了看不看得出來」。

常見問題

Q:Rollup 欄位是空的?

九成是關聯還沒建好,或關聯的那一側沒有資料。先確認關聯欄位裡真的有連到紀錄。

Q:公式可以引用別張表的欄位嗎?

不行。公式的範圍是同一列。要用別張表的資料,先用 Lookup 拉過來,再讓公式引用那個 Lookup 欄位。

Q:資料很多的時候 Rollup 會不會很慢?

關聯筆數大的時候會有感。如果某個 Rollup 要彙總上萬筆,考慮改成定期計算後存進一般欄位,而不是每次即時算。

Q:可以在公式裡用條件判斷嗎?

可以,這是最常用的功能之一——依金額分級、依狀態顯示不同文字都靠它。語法細節看官方文件,版本之間偶有差異。

效能:什麼時候該停止即時計算

Rollup 與公式都是即時算的,資料量小的時候感覺不出來。

會開始有感的情況:單一 Rollup 要彙總上萬筆關聯紀錄,或一張表裡疊了很多層(公式引用 Lookup、Lookup 又來自 Rollup)。

兩個處理方向:

  • 減少層數——中間結果先存成一般欄位,不要一路串下去
  • 改成定期計算——用自動化流程每天算一次寫進一般欄位,而不是每次開啟都重算

第二種要權衡:數字會有延遲。「昨天的正確數字」跟「即時但很慢」哪個比較能用,看你的實際場景。

資料來源與延伸連結

延伸閱讀

準備好開始使用 NocoDB 了嗎?

完成訂閱後 60 秒,系統自動幫你裝好 NocoDB——獨立容器、資源硬性上限不與他人共用、HTTPS 開箱即用。

立即訂閱 NocoDB

月付訂閱、不綁約、隨時取消

嗨,我是小浪!有任何問題都歡迎點我詢問,我來幫你解答。

小浪

小浪 - AI小助手

在線中
小浪

有任何問題都歡迎隨時詢問我,我會盡力為你解答!

Powered by RoamerHost AI