公式 2.0:如何搭配現有設定,使用 Notion 全新且升級的公式
如果你之前使用過 Notion 公式,你可能會好奇,有哪裡不一樣?本使用手冊將說明 2.0 新增的內容,以及這對愛用公式的你來說又有什麼義意。

- 公式功能更新
- 對使用者的影響
- 公式更新帶來更豐富的輸出資料類型
- 從屬性呼叫工作空間層級的資訊
- 使用 let 建立你自己的變數
- 參照相關資料庫裡的屬性,而不需要動用匯總!
- 了解現有功能的所有更新與調整
我們改善了使用者體驗,讓公式編寫更加容易,公式的輸出資料可以包含更多的資料類型,且公式語言也可以滿足更多需求。

我目前使用的公式會怎麼樣?
這份使用手冊包含了公式的更新功能,以及對公式使用者的影響。若你完全沒有使用過公式,請參考初學者使用手冊了解如何撰寫 Notion 公式來拓展資料庫功能。
公式 2.0 的更新如下:
公式的撰寫與編輯變得更容易:可以在編輯器裡利用換行與留言功能編寫多行公式,且公式錯誤修正也更易於操作。當你撰寫公式時,畫面會顯示支援多行編輯的延伸編輯框,瀏覽和編輯較長的公式變得更加容易。同時新增拼字錯誤檢查、錯誤標示功能,會直接在編輯框顯示,讓你輕鬆修正你的語法、確保公式有效。
支援多種輸出資料:過去僅有純文字、數字、以及布林屬性的核取方塊輸出資料。現在支援顯示頁面、日期、人員與列表。
直接存取更多資訊:公式現在變得更有智慧,可以存取相關資料庫的屬性,以及成員的電子郵件與姓名等資訊。

全新公式語言
公式更新帶來更豐富的輸出資料類型
過去,公式只能將一堆資料類型化為純文字。新版公式讓資料輸出類型更加多元豐富。
我們知道使用者依賴公式資料輸出的呈現與行為方式,為了維持輸出資料的多元性,目前所有的公式,無論是彙總、人員、檔案、或是多選屬性,都將轉為純文字。
舉例來說,過去是使用prop("Person")
以純文字的方式來回傳人名,但現在你輸入後會看到prop("Person".map(current.format()).join(",")
因為公式 2.0 prop("Person")
回傳的是人名列表,不再只是單純用逗號分隔的純文字值。透過這個功能的轉換,也讓我們可以將「人名」列表的每一項,轉換為用逗號分隔的純文字值,如此一來可以保留原始的輸出資料。
若你想要體驗新的功能,擁有更多元的資料類型,需要先刪除轉換語言。以上述的例子而言,就是只需要直接輸入 prop("Person")
即可。接著你的輸出資料就會回傳一串人名類型物件清單,而不是純文字。

動態屬性提及
從屬性呼叫工作空間層級的資訊
現在你可以存取工作空間層級的資訊,包含在單一或相關資料庫裡,有人名與 email 標記的人員,無須另外建立個別屬性。
舉例來說,你可以使用「建立者」屬性來檢索使用者的全名與電子郵件等資料,然後參照「姓名」為 prop("Created By").name()
或參照「email」為 prop("Created By").email()
。
這樣就可以簡化大型資料庫的屬性,但依然能夠檢索必要的資訊,而無需執行多個步驟。

現已支援點記法
使用 let 建立你自己的變數
公式現在支援使用區域變數。如同傳統的 Javascript 一樣, let
使用第一個引數的名稱與第二個引數的值來建立一個變數。而第三個引數則是你用新設定的變數,來撰寫公式剩餘的部分。
舉例來說,如果你正在寫的公式是參照總值,且總值是幾個屬性的總和,那你可能不會想在作業時,重複相加這些屬性的動作。
這時候你可以考慮輸入 let(SalesTax, (prop("Subtotal")*0.099), prop("Subtotal") + SalesTax)
來建立新的變數。如此一來,每當你輸入 SalesTax
就可以使用事先設定好的小計值,再乘以稅率。

何時應該使用變數?
一旦掌握了使用 let
的訣竅,就可以同時使用let
一次指派多個變數!
比如,用 lets(a, "Hello", b, "world", a + " " + b)
來組合兩個變數。
參照相關資料庫裡的屬性,而不需要動用匯總!
現在,你可以在相關的資料庫中,找到所需要的確切資訊,無須先建立匯總來參照該屬性。編輯公式,同時更改資訊顯示的方式,兩項功能加起來,比一般的匯總功能強大得多。
舉例,如果你有跟任務資料庫相關的專案資料庫,可能會想根據完成度的百分比,來知道任務進度: 「✅ 已完成」
、「⚠️ 進行中」
或是 「❌ 未開始」
。
以前想要知道任務完成的情況,需要透過建立匯總來查看,然後再撰寫一個公式來回傳 「✅ 已完成」
、 「⚠️ 進行中」
或「❌ 未開始」
。
有了新的公式,你現在可以結合這些動作,將「匯總值」定義為變數。
首先,使用
map()
、filter()
和length()
函數來取得已完成任務的數量。
prop("Tasks").map(current.prop("Status")).filter(current== "已完成").length()
2. 然後,在 PercentComplete
變數中定義總值,將已完成的任務數除以總任務數,然後乘以 100 就完成了!現在你可以將函數套用到新的值上。
let(
percentComplete,
prop("Tasks").map(current.prop("Status")).filter(current == "已完成").length()/ prop("Tasks").map(current.prop("Status")).length() * 100),
/ *在此寫下公式剩餘的部分* /
)
以上範例所產出的公式,最終可能顯示如下:
let(percentComplete, round(prop("Tasks").map(current.prop("Status")).filter(current =="已完成").length()/ prop("Tasks").map(current.prop("Status")).length() * 100),
ifs(percentComplete == 100, "✅ AIl tasks complete", percentComplete > 0, "⚠️ In progress (" + percentComplete + ")%","❌ Not started"))
使用展開式清單了解特定函數的調整,但同時也請注意,現有的公式會自動轉換。

屬性引用變更

數學函數變更

日期函數變更

文字函數變更

核取方塊(布林屬性)函數變更
當然,還有幾個新函數,如 match()
、 style()
等等!可點此處查看完整列表。
我們有漏掉什麼嗎?