在数据库中,用户可以通过运用公式(Formulas)对其他属性中的数据进行计算,来创建新的属性,公式还可以实现进行运算、编辑文本、演算日期或其它更多操作。
公式能做什么?
公式能帮助用户:
- 对值进行运算:添加价格、计算总值或进行数学计算
- 操纵文本:合并字符串、变更大小写或提取子字符串
- 演算日期:计算时间差、修改日期格式或规定死线
- 应用逻辑:使用条件语句来展示不同值
- 处理列表:对列表类型的数据进行筛选、排序、转换或集成
生成一个公式属性
要创建一个公式属性:
- 在数据库中点击右上方工具栏的属性按钮
- 在下拉菜单底部点击添加公式
- 为创建的公式属性起名
- 在公式栏里输入公式
- 关闭窗口
在用户输入过程中,公式编辑器会自动补全函数和属性名称。如果公式无误,会出现绿色的勾号。
公式属性创建完成后,用户即可像使用其它属性那样在数据库中使用它,可将其加入视图、应用于筛选器,还是以其为依据进行排序以及更多操作。
如何写公式
在公式编辑器中,输入用属性、运算符和函数组成的表达式。
引用属性
用户可以在公式中引用不同种类的属性:
- 笔记属性:位于笔记 frontmatter 区的属性
- 文件属性:文件自带的,诸如
file.name,file.size或file.mtime等属性 - 公式属性:通过形如
formula.formula_name的格式使用
例:
price * quantity:将price和quantity这两个笔记属性相乘file.name + " - " + description:将文件名和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, "$" + price.toFixed(2), "") | 定义一个带有数字格式的条件语句 |
file.name.lower() | 将文件名转小写 |
tags.contains("urgent") | 检查标签列表是否含有某值 |
due_date.format("YYYY-MM-DD") | 格式化日期 |
公式示例
计算截止日期
将某项计划的截止日期设在开始日期的两周后:
start_date + "2w"
显示超时状态
如果截止日期已过,且项目完成情况为“未完成”,则显示“Overdue”:
if(due_date < now() && status != "Done", "Overdue", "")
对货币进行格式化
显示带有两位小数位且带有货币标志的价格:
if(price, "$" + price.toFixed(2), "")
计算列表项目个数
显示列表项目的个数:
tasks.length
计算加权分
将多个因素合并到一个加权分中:
(impact * urgency) / effort
合并文字项
将姓和名合并成完整的姓名:
first_name + " " + last_name
计算总支出
将月数乘以月支出:
monthlyUses * formula.Owned.round()
数据类型
公式可使用以下类型的数据:
| 数据类型名 | 含义 | 示例 |
|---|---|---|
| 字符串 | 包裹在英文引号里的文本 | "hello"或'world' |
| 数字 | 数值 | 42,3.14或2 + 2 |
| 布尔值 | 是或否 | true或false |
| 日期 | date(),today()或now() | |
| 列表 | 值的集合 | [1,2,3] |
| 对象 | 键值对 | {"name": "value"} |
公式所推出的结果是由所使用的数据和函数所决定的。
引用其它公式
公式可引用其它公式以创建,举例来说,如果用户有一个名为price_per_unit的公式:
price / quantity
用户可像下文这样在其它公式中引用它:
formula.price_per_unit * 1.1
避免循环引用
一个公式不能通过其它公式直接或间接地引用自身。
讨论
若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。
反馈交流
其他渠道
版权声明
版权声明:所有 PKMer 文章如果需要转载,请附上原文出处链接。