数据库文档暂译06-公式

贴主为电脑弱智,不知天高地厚尝试翻译base文档以填补空白,发现涉及大量计算机知识,结果就是看不懂疯掉。打个比方来说我这些帖子等于影院盗摄的枪版,中文文档相当于蓝光碟,英文文档相当于原胶片,所以一切以官方英文文档为准,稿件已经提交给懂电脑的人审核,以后会有更完备的版本发到官方中文文档,但是写都写了就先发出来,这个帖子看一乐,管杀不管埋

在数据库中,用户可以运用公式对其他属性中的数据进行计算,并创建新的属性,用户可通过公式进行运算、编辑文本、演算日期或其它更多操作。

公式能做什么?

公式能帮助用户:

  • 对值进行运算:添加价格、计算总值或进行数学计算
  • 操纵文本:合并字符串、变更大小写或提取子字符串
  • 演算日期:计算时间差、修改日期格式或规定死线
  • 应用逻辑:使用条件语句来展示不同值
  • 处理列表:对列表类型的数据进行筛选、排序、转换或集成

生成一个公式属性

要创建一个公式属性:

  1. 在数据库中点击右上方工具栏的属性按钮
  2. 在下拉菜单底部点击添加公式
  3. 为创建的公式属性起名
  4. 公式栏里输入公式
  5. 关闭窗口

在用户输入过程中,公式编辑器会自动补全[数据库文档暂译05-函数]和属性名称。如果公式无误,会出现绿色的勾号。

公式属性创建完成后,用户即可像使用其它属性那样在数据库中使用它,可将其加入视图、应用于筛选器,还是以其为依据进行排序以及更多操作。

如何写公式

在公式编辑器中,输入用属性、运算符和函数组成的表达式

引用属性

用户可以在公式中引用不同种类的属性:

  • 笔记属性:位于笔记 frontmatter 区的属性
  • 文件属性:文件自带的,诸如file.namefile.sizefile.mtime等属性
  • 公式属性:其它使用formula.formula_name格式的属性

例:

  • price * quantity:将pricequantity这两个笔记属性相乘
  • 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'
数字 数值 423.142 + 2
布尔值 是或否 truefalse
日期 date()today()now()
列表 值的集合 [1,2,3]
对象 键值对 {"name": "value"}

公式所推出的结果是由所使用的数据和函数所决定的

引用其它公式

公式可引用其它公式以创建,举例来说,如果用户有一个名为price_per_unit的公式:

price / quantity

用户可像下文这样在其它公式中引用它:

formula.price_per_unit * 1.1

[!warning] 避免循环引用
一个公式不能通过其它公式直接或间接地引用自身

1 个赞