Formulas allow you to create calculated properties in [[Introduction to Bases|Bases]] using data from other [[Properties|properties]]. You can perform calculations, manipulate text, work with dates, and more. ## What formulas can do Formulas can help you: - **Calculate values**, add prices, compute totals, or perform math operations. - **Manipulate text**, combine strings, change case, or extract substrings. - **Work with dates**, calculate time differences, format dates, or determine deadlines. - **Apply logic**, use conditional statements to display different values. - **Process lists**, filter, sort, map, or aggregate list data. ## Create a formula property To create a formula property: 1. In your base, click **Properties** in the toolbar. 2. Click **Add formula** at the bottom of the menu. 3. Enter a name for your formula property. 4. Type your formula in the **Formula** field. 5. Close the dialog. The formula editor will autocomplete [[Functions|function]] and property names as you type to validate your formula syntax. A green checkmark appears when your formula is valid. Once created, you can use a formula property like any other property in your base. Add it to [[Views|views]], use it in filters, sort by it, and more. ## Write a formula In the formula editor, type an expression using properties, operators, and functions. ### Reference properties You can reference different types of properties in your formulas: - **Note properties** — Properties from a note's [[Properties|frontmatter]]. - **File properties** — Built-in properties like `file.name`, `file.size`, or `file.mtime`. - **Formula properties** — Other formulas using `formula.formula_name`. **Examples:** - `price * quantity` — multiply two note properties - `file.name + " - " + description` — combine file name with a note property - `formula.price_per_unit * 1.1` — use another formula property ### Use operators **Arithmetic operators** perform math on numbers: - `price + tax` — add - `price - discount` — subtract - `price * quantity` — multiply - `price / quantity` — divide - `(part / whole) * 100` — use parentheses for order of operations **Comparison operators** compare values: - `price > 100` — greater than - `age < 18` — less than - `status == "Done"` — equals - `status != "Done"` — not equals - `file.mtime > now() - '7d'` — compare dates **Boolean operators** combine logical conditions: - `!completed` — not - `price > 0 && quantity > 0` — and - `urgent || important` — or Learn more in [[Bases syntax#Operators|Bases syntax]]. ### Use functions Functions perform operations on values. The available functions depend on the type of value you're working with. See the complete list of [[Functions]]. **Common function categories:** - **Global functions** — `if()`, `now()`, `date()`, `link()`, `max()`, `min()` - **String functions** — `contains()`, `replace()`, `split()`, `lower()`, `title()` - **Number functions** — `round()`, `ceil()`, `floor()`, `abs()`, `toFixed()` - **Date functions** — `format()`, `relative()`, `date()`, `time()` - **List functions** — `filter()`, `map()`, `sort()`, `join()`, `unique()` **Examples:** - `if(price, "quot; + price.toFixed(2), "")` to define a conditional with number formatting. - `file.name.lower()` to convert to lowercase. - `tags.contains("urgent")` to check if the tags list contains a value. - `due_date.format("YYYY-MM-DD")` to format a date. ## Formula examples ### Calculate a deadline Set a project's due date as 2 weeks after the start date: ```js start_date + "2w" ``` ### Display overdue status Show "Overdue" if the due date has passed and status is not "Done": ```js if(due_date < now() && status != "Done", "Overdue", "") ``` ### Format currency Display a price with 2 decimal places and currency symbol: ```js if(price, "quot; + price.toFixed(2), "") ``` ### Count list items Count the number of items in a list property: ```js tasks.length ``` ### Calculate priority score Combine multiple factors into a priority score: ```js (impact * urgency) / effort ``` ### Combine text fields Create a full name from first and last name: ```js first_name + " " + last_name ``` ### Calculate total cost Multiply monthly cost by number of months owned: ```js monthlyUses * formula.Owned.round() ``` ## Data types Formulas work with different types of data: - **Strings** — Text enclosed in quotes: `"hello"` or `'world'` - **Numbers** — Numeric values: `42`, `3.14`, `(2 + 2)` - **Booleans** — True or false: `true`, `false` - **Dates** — Created with `date()`, `today()`, or `now()` - **Lists** — Collections of values: `[1, 2, 3]` - **Objects** — Key-value pairs: `{"name": "value"}` The output type of a formula is determined by the data and functions used. ## Reference other formulas Formulas can reference other formulas, creating derived calculations. For example, if you have a formula called `price_per_unit`: ```js price / quantity ``` You can reference it in another formula: ```js formula.price_per_unit * 1.1 ``` > [!warning] Avoid circular references > A formula cannot reference itself directly or indirectly through other formulas.