在我个人看来,如果你想用好 Notion,那么公式函数将不是必须的,因为学习 Formula 的难度可能比较大,但 Relation 和 Rollup 是我无论如何都推荐你一定要适当学习、或者至少有所了解的两个字段。这两个字段入门几乎没有难度,但学会之后它们的应用场景又非常广。
Relation(关联、关系) 这个字段将赋予数据库链接彼此的能力,能够让你将「数据库 1」的 A 页面与「数据库 2」的 B、C、D 页面创建双向关联,而 Rollup(汇总、集合) 则能够让你在 A 页面中统计 B、C、D 页面的字段数据。
上面这段描述可能缺失了一点画面感,也不容易直观看出这两个字段到底能起到什么具体作用,所以接下来我会举很多个例子帮助你理解、应用并进阶掌握这两个重要功能。
Relation
基础用法
在下图中存在三个看似互相独立,但是内里存在关联的数据库,分别是:
- 部门数据库
- 职工数据库
- 项目数据库

同时我们又知道几个基本情况:
- 一个部门会包含多名员工
- 一个员工通常只分属于一个部门
- 一个员工将可能同时执行多个项目
所以现在我们可以尝试使用 Relation 这个字段来为各个数据库之间的页面(Page)建立关联,具体操作方法如下:
在「部门数据库」中新增一个 Relation 字段,然后将这个字段指向我们需要关联的「职工数据库」

这个时候它就会弹出一个提示框,其中的选项解释可见下图:

此处我们勾选「Show on 职工数据库」选项,其他保持默认,然后点击
Add relation 即可,如此一来两个数据库就建立了双向关联:
建立关联之后,我们就可以为各个部门分配员工,或者将员工划分到他所属的部门中了:

关联创建完毕后,我们就可以实现在部门、员工以及项目页中快速跳转,并查看它们之间的关联或者从属关系:

当然我们最好手动修改一下 Relation 的字段名称,让它在关联之上还能凸显因什么而关联,或者关联的目的是什么:

设置 Relation 字段的显示方式
当我们为某个页面建立了 Relation 关联后,所有被关联的页面都会成为这个 Relation 字段的「值」:

接下来你可以点击 Relation 字段的编辑按钮,然后在
Show as 中选择 As page section ,那么这些页面就会被放到数据库字段的下方,同时我们还能够为这些关联的页面开启字段显示:
你也可以继续在
Show as 中选择 Minimal ,这样所有的关联页面就会被收缩起来,能够节省页面空间。但这时如果你想从
Minimal 改回 page section 或者 property 的话,则需要点击页面右上角三个小点,然后在 Customize page 的选项中修改:
基于 Relation 的数据库分组
本质上 Relation 字段是让数据库中的页面能够与其他页面建立「一对多」的关联,例如:
- 一种食材可以用于不同的菜肴食谱中
- 一个导演会指导拍摄多部不同的电影
- 一个演员会在不同的电影剧集中出演
- 一个客户会产生不同的需求或者订单
- 一个项目会衍生出多个不同的子项目
所以某种程度上,这里的「食材」、「导演」、「演员」、「客户」或者「项目」就像标签(Select)一样,让我们能够「标记」页面所具备的一些属性:

在上图案例中,主项目数据库里有 3 个营销计划,然后这三个项目又通过 Relation 字段,关联了多个子任务。
而在下图的子任务数据库中,我们除了为每个子任务标记了任务状态(Status)、负责人、以及任务时间等内容,还可以看到子任务所属的主项目是谁:

所以接下来我们就可以像对标签(Select)进行分组一样,同样对 Relation 这个字段进行分组:

分组之后你就可以看到,子任务数据库中的「主项目」就成了分组的标签:

接下来我们还可以为这个数据库添加一个看板视图(Board),然后在看板中构建二级分组功能:

这样一来,不仅仅是分组中的「任务卡片」可以点击并展开为页面,就连二级分组的「标签」也是可以点击展开的:

进阶用法 - 基于数据库模板的自动关联
前面我们介绍的 Relation 虽然好用,但仍有一处痛点就是每次都需要手动关联,这样就显得不是那么便利。所以接下来我会介绍一种办法,让你在创建主页面的时候,能够让它与子页面自动产生关联。
需要注意的是,接下来的方法会比较烦琐,细节也很多,可以算是数据库模板的一种大型应用,所以请适当做好心理准备,但是学会之后,你将能看懂很多非常玄妙的高级模板的底层方法。
适用场景
我们以「项目与流水」这个场景为例。
在项目表中有若干个项目,每个项目都会通过 Relation 关联到若干笔流水记录:

在流水表中,每一条流水都有自己的编号、金额,并且通过 Relation 也关联到了对应的项目中:

如果以一般的 Relation 用法,每当我们新增一笔流水,就必须手动将这笔流水关联到对应的项目上:

如果是直接在项目表中创建流水的话,又必须再跳转到流水页面,然后再输入相应的流水金额,同样还是很麻烦:

但是现在,通过一系列 ABCDE 的操作之后,当我在项目表中创建一个新的项目,它将自动关联到流水表中:

并且当我在这个关联的流水表中创建一笔新的记录,这笔记录又将自动关联到当前这个项目上:

下面就让我来具体演示这种自动化关联的设置方法,建议大家可以边看边实际操作,有助于你更好地理解它的原理。
操作方法
为项目表设置数据库模板, 并在模板中创建流水表的镜像视图,这样一来每次新建项目时,都将自动在这个项目页中创建一个流水表的镜像数据库:

对这个流水表设置过滤选项,过滤的字段设置为 Relation,对 Relation 的过滤内容为这个项目模板的标题(本案例中的标题是
新的项目)
这样一来,当我们在这个流水表中新建页面的时候,这笔流水就将自动关联到这个项目上:


完成模板设置,并将这个模板设置成项目表的默认页面,这样一来只要我们在这个项目表中新建页面,这个页面就将自动应用这个模板

更多参考
我们可以在「客户数据库」中创建一个模板, 让这个模板自动关联到「案例数据库」中,如此一来我们就可以直接在客户详情页中直接创建新的广告案例:

也可以在对接到新的客户时,创建新的自动化关联:

并且除了能够自动将客户与广告案例创建关联,还能自动计算出这个客户给我们带来的总收入是多少:

要实现这种自动统计,这就需要用到今天要介绍的第二个重要字段:Rollup
Rollup
Rollup(汇总)这个字段必须在 Relation 的基础上才能生效,它的本质是对 Relation 所关联的页面进行统计。
我们以下面这张装修计划表为例,逐步带你学会使用 Rollup 这个功能。

在这份装修计划中,每个房间都需要置办不同的家具,所以我在房间数据库中用 Relation 字段关联了提前收集好的待买家具:

而在待买家具数据库中,我则为这些家具标注好了各自的价格。这样一来两个本是互相独立的数据库,就通过 Relation 这个字段就建立了联系。

现在我的需求是,计算出每个房间所需购买的家具的总价格,并最终得出所有房间的家具总价格是多少,具体操作步骤如下
在房间表中新建一个 Rollup(汇总) 字段,然后在 Rollup 的 Relation 选项中,选择需要统计、汇总的那一个 Relation 字段:

注:因为一个数据库中可能存在多个 Relation,所以这里才需要先为 Rollup 指定我们要统计的 Relation 字段是哪一个。
此时在默认状态下,你会发现 Rollup 中显示的结果和 Relation 关联的内容是一模一样的,这是为什么呢?

我们可以这么理解,Rollup 是把 Relation 关联到的页面都装进了一个容器内,那么在默认情况下, Rollup 会对这些页面的标题(Title)字段进行计算(Calculate),但默认的计算方式是
Show original,即标题是什么 Rollup 就显示出什么:
所以如果我们将统计的 Property 修改成
价格,则这里的 Show original 将显示出每一项家具的价格:
如果将 Calculate 改为
Sum ,就可以统计每个房间所需家具的总价格了:
并且这个时候数据库最底下的那一行原生计算功能,也能够对 Rollup 所得结果进行二次计算,这样一来我们既可以用 Rollup 分别求得每间房间的家具总价格,还能够计算出所有房间的家具总价格:

如果你选择的是
Max,则它显示的会是这个房间中最贵的那个家具的价格:
如果你选择的是
Average ,则它显示的将会是这个房间中家具的平均价格:
当我们把 Property 设置为日期,那么 Calculate 将允许计算日期的最早时间、最晚时间,以及日期范围:

如果把 Property 的选项设置为 Checkbox,那么我们还能够计算这些勾选框的打勾百分比:

我想看到这里你应该能察觉到,Rollup 的计算方式其实跟数据库最底下那一行
Calculate 是一样的,都是针对不同的字段(Property)提供不同的计算选项:
所以这个功能非常依赖动手操作,也需要大家结合自己的实际需求多多尝试,才能让它真正发挥作用。你也可以观看去年我制作的这期视频,10 分 50 秒到 12 分 10 秒是关于 Relation 与 Rollup 的视频介绍。
最后,如果你还有更多关于 Relation 与 Rollup 的应用方式,也欢迎你分享到评论区和大家一起交流。







