贴主为电脑弱智,不知天高地厚尝试翻译base文档以填补空白,发现涉及大量计算机知识,结果就是看不懂疯掉。打个比方来说我这些帖子等于影院盗摄的枪版,中文文档相当于蓝光碟,英文文档相当于原胶片,所以一切以官方英文文档为准,稿件已经提交给懂电脑的人审核,以后会有更完备的版本发到官方中文文档,但是写都写了就先发出来,这个帖子看一乐,管杀不管埋
在数据库中,用户可以运用公式对其他属性中的数据进行计算,并创建新的属性,用户可通过公式进行运算、编辑文本、演算日期或其它更多操作。
公式能做什么?
公式能帮助用户:
- 对值进行运算:添加价格、计算总值或进行数学计算
- 操纵文本:合并字符串、变更大小写或提取子字符串
- 演算日期:计算时间差、修改日期格式或规定死线
- 应用逻辑:使用条件语句来展示不同值
- 处理列表:对列表类型的数据进行筛选、排序、转换或集成
生成一个公式属性
要创建一个公式属性:
- 在数据库中点击右上方工具栏的属性按钮
- 在下拉菜单底部点击添加公式
- 为创建的公式属性起名
- 在公式栏里输入公式
- 关闭窗口
在用户输入过程中,公式编辑器会自动补全[数据库文档暂译05-函数]和属性名称。如果公式无误,会出现绿色的勾号。
公式属性创建完成后,用户即可像使用其它属性那样在数据库中使用它,可将其加入视图、应用于筛选器,还是以其为依据进行排序以及更多操作。
如何写公式
在公式编辑器中,输入用属性、运算符和函数组成的表达式
引用属性
用户可以在公式中引用不同种类的属性:
- 笔记属性:位于笔记 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 | 或 |
欲了解更多运算符知识,阅读(数据库语法 - Obsidian 中文帮助 - Obsidian Publish)
应用函数
函数可对属性值进行运算,属性值决定了可用的函数类型,完整的表格见[数据库文档暂译05-函数]
常见函数分类:
| 函数分类 | 具体函数 |
|---|---|
| 全局函数 | 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
[!warning] 避免循环引用
一个公式不能通过其它公式直接或间接地引用自身