Bases-公式(Formulas)

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

公式能做什么?

公式能帮助用户:

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

生成一个公式属性

要创建一个公式属性:

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

在用户输入过程中,公式编辑器会自动补全函数和属性名称。如果公式无误,会出现绿色的勾号。

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

如何写公式

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

引用属性

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

  • 笔记属性:位于笔记 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

欲了解更多运算符知识,阅读数据库语法

应用函数

函数可对属性值进行运算,属性值决定了可用的函数类型,完整的表格见函数

常见函数分类:

函数分类具体函数
全局函数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

避免循环引用

一个公式不能通过其它公式直接或间接地引用自身。

讨论

若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。



反馈交流

其他渠道

版权声明
pkmer forum 论坛相关