公式讓你可以在[[資料庫介紹|資料庫]]中使用其他[[屬性]]的資料來建立計算屬性。你可以執行運算、處理文字、操作日期等。 ## 公式能做什麼 公式可以幫助你: - **計算數值**,加總價格、計算總額或執行數學運算。 - **處理文字**,組合字串、更改大小寫或擷取子字串。 - **操作日期**,計算時間差、格式化日期或確定截止日期。 - **套用邏輯**,使用條件判斷式來顯示不同的值。 - **處理清單**,篩選、排序、對應或彙總清單資料。 ## 建立公式屬性 要建立公式屬性: 1. 在你的資料庫中,點選工具列上的**屬性**。 2. 點選選單底部的**添加公式**。 3. 為你的公式屬性輸入名稱。 4. 在**公式**欄位中輸入公式。 5. 關閉對話框。 公式編輯器會在你輸入時自動完成[[函式|函式]]和屬性名稱,以驗證公式語法。當公式有效時,會顯示綠色勾號。 建立後,你可以像使用資料庫中的任何其他屬性一樣使用公式屬性。將其加入[[檢視]]、用於過濾設定、依其排序等。 ## 撰寫公式 在公式編輯器中,使用屬性、運算子和函式輸入運算式。 ### 參照屬性 你可以在公式中參照不同類型的屬性: - **筆記屬性** — 來自筆記[[屬性|前置中繼資料]]的屬性。 - **檔案屬性** — 內建屬性,如 `file.name`、`file.size` 或 `file.mtime`。 - **公式屬性** — 使用 `formula.formula_name` 參照其他公式。 **範例:** - `price * quantity` — 將兩個筆記屬性相乘 - `file.name + " - " + description` — 將檔案名稱與筆記屬性組合 - `formula.price_per_unit * 1.1` — 使用另一個公式屬性 ### 使用運算子 **算術運算子**對數字執行數學運算: - `price + tax` — 加法 - `price - discount` — 減法 - `price * quantity` — 乘法 - `price / quantity` — 除法 - `(part / whole) * 100` — 使用括號控制運算順序 **比較運算子**比較數值: - `price > 100` — 大於 - `age < 18` — 小於 - `status == "Done"` — 等於 - `status != "Done"` — 不等於 - `file.mtime > now() - '7d'` — 比較日期 **布林運算子**組合邏輯條件: - `!completed` — 非 - `price > 0 && quantity > 0` — 且 - `urgent || important` — 或 在[[資料庫語法#運算子|資料庫語法]]中深入了解。 ### 使用函式 函式對值執行操作。可用的函式取決於你正在處理的值的類型。請參閱完整的[[函式]]清單。 **常見函式類別:** - **全域函式** — `if()`、`now()`、`date()`、`link()`、`max()`、`min()` - **字串函式** — `contains()`、`replace()`、`split()`、`lower()`、`title()` - **數字函式** — `round()`、`ceil()`、`floor()`、`abs()`、`toFixed()` - **日期函式** — `format()`、`relative()`、`date()`、`time()` - **清單函式** — `filter()`、`map()`、`sort()`、`join()`、`unique()` **範例:** - `if(price, "quot; + price.toFixed(2), "")` 定義帶有數字格式的條件判斷。 - `file.name.lower()` 轉換為小寫。 - `tags.contains("urgent")` 檢查標籤清單是否包含某個值。 - `due_date.format("YYYY-MM-DD")` 格式化日期。 ## 公式範例 ### 計算截止日期 將專案的到期日設為開始日期後 2 週: ```js start_date + "2w" ``` ### 顯示逾期狀態 如果到期日已過且狀態不是「Done」,則顯示「Overdue」: ```js if(due_date < now() && status != "Done", "Overdue", "") ``` ### 格式化貨幣 以 2 位小數和貨幣符號顯示價格: ```js if(price, "quot; + price.toFixed(2), "") ``` ### 計算清單項目數量 計算清單屬性中的項目數量: ```js tasks.length ``` ### 計算優先順序分數 將多個因素組合為優先順序分數: ```js (impact * urgency) / effort ``` ### 組合文字欄位 從名字和姓氏建立全名: ```js first_name + " " + last_name ``` ### 計算總費用 將月費乘以擁有的月數: ```js monthlyUses * formula.Owned.round() ``` ## 資料類型 公式可處理不同類型的資料: - **字串** — 以引號括住的文字:`"hello"` 或 `'world'` - **數字** — 數值:`42`、`3.14`、`(2 + 2)` - **布林值** — 真或假:`true`、`false` - **日期** — 使用 `date()`、`today()` 或 `now()` 建立 - **清單** — 值的集合:`[1, 2, 3]` - **物件** — 鍵值對:`{"name": "value"}` 公式的輸出類型由使用的資料和函式決定。 ## 參照其他公式 公式可以參照其他公式,建立衍生計算。例如,如果你有一個名為 `price_per_unit` 的公式: ```js price / quantity ``` 你可以在另一個公式中參照它: ```js formula.price_per_unit * 1.1 ``` > [!warning] 避免循環參照 > 公式不能直接或透過其他公式間接參照自身。