个人知识管理阅读 12 分钟

Obsidian Dataview:动态仪表盘与查询完全指南 (2026)

Obsidian Dataview 插件 2026 完全指南:TABLE、LIST 和 TASK 查询、内联字段、WHERE/SORT/GROUP BY 以及即插即用的任务和项目仪表盘。

Obsidian Dataview:动态仪表盘与查询完全指南 (2026)

Obsidian Dataview:动态仪表盘与查询完全指南 (2026)

Obsidian 真正的强大之处不在于你编写的笔记,而在于当这些笔记开始相互对话时所发生的一切。Dataview 就是按下这个开关的插件。它将你的库(vault)从一堆静态的 Markdown 文件变成一个可供按需查询、排序和汇总的活数据库。为笔记打上标签、添加截止日期、设置项目状态,Dataview 就会将这些信息整理成表格、列表和仪表盘,并在你每次进行修改时自动更新。

如果你曾经翻阅十几个文件夹寻找“我所有的活跃项目”或“我仍然欠某人的每项任务”,你就会明白 Dataview 所解决的问题。你无需手动维护索引笔记,只需编写一次简短的查询语句,插件就会永远保持其更新。你的阅读日志、任务看板、每周复盘——这一切都可以实现自动化。

以下是我们将要涵盖的内容:Dataview 到底是什么、如何安装它、如何添加它所读取的元数据、四种查询类型、如何选择和筛选来源、内联查询、两个完整的可复制粘贴仪表盘,以及当查询固执地什么也不返回时的故障排除清单。读完本文后,你将能够构建自己的仪表盘——或者完全跳过 DQL,让预设好的模板为你代劳。

什么是 Obsidian Dataview,为什么它很重要?

Dataview 是你库的实时索引以及一种查询语言,它可以读取笔记中的元数据,并将其渲染为表格、列表、任务看板或日历。你不需要移动或复制任何数据。你只需描述你想要的内容——“Projects 文件夹中带 active 标签的每一篇笔记,按截止日期排序”——Dataview 就会构建视图,并在你的库发生变化时自动刷新。

这之所以重要,是因为手动索引在创建的那一刻就开始失效了。下一次你完成一个项目时,手写的“活跃项目”笔记就会过时。而 Dataview 查询永远不会。随着库的增长,收益会不断叠加:今天显示两个项目的同一条三行查询,明年将在无需你付出任何额外努力的情况下显示二十个项目。

将每篇笔记想象成数据库中的一行,将每个属性想象成一列。Dataview 允许你使用平实、易读的语法向该数据库提问。这是良好链接习惯的自然伴侣——如果你仍在建立这些习惯,我们的连接笔记完全指南将与你在本文中学到的内容完美配合,因为笔记之间的相互引用越多,Dataview 可处理的素材就越丰富。

如何安装和启用 Dataview?

你可以在一分钟内通过 Obsidian 的社区插件面板安装 Dataview。具体步骤如下:

  1. 打开 设置 → 社区插件。
  2. 如果看到“受限模式”(Restricted mode)已启用,请将其 关闭(这样才能运行社区插件)。
  3. 点击 浏览(Browse),然后搜索 Dataview。
  4. 点击 安装(Install),然后点击 启用(Enable)。

启用后,Dataview 开始在后台索引你的库。在小型库中,这是瞬间完成的;在大型库中,首次运行可能需要几秒钟。

接下来,打开插件的设置并检查解锁其全部功能的两个开关:

  • 启用内联查询(Enable Inline Queries)——允许你在句中直接展示单个值(稍后介绍)。
  • 启用 JavaScript 查询(Enable JavaScript Queries)——仅当你计划使用 DataviewJS 进行高级自定义逻辑时才需要。初学者请保持关闭状态。

提示:你不需要手动“重新构建”任何内容。当你在编辑、创建和删除笔记时,Dataview 会自动重新索引。唯一的例外情况将在接近结尾的故障排除部分中讨论。

如何添加元数据:Frontmatter 属性 vs 内联字段?

Dataview 读取两种元数据:YAML frontmatter(Obsidian 称之为 属性 / Properties)和在笔记正文中编写的 内联字段。两者都会成为可查询的列;你可以根据数据自然存在的位置进行选择。

Frontmatter(属性) 位于笔记的最顶端,介于两条 --- 线之间,最适合用于结构化的笔记级数据:

---
status: active
due: 2026-07-15
priority: 1
tags: [project, client]
---

内联字段 允许你使用双冒号在笔记中途记录数据。在单独的一行上使用 key:: value,或使用 [key:: value] 将字段嵌入句子中:

Project kicked off today.
status:: in-progress
Budget is [budget:: 4500] for this quarter.

字段类型会自动推断:文本、数字、日期(ISO 格式如 2026-07-15)、列表(tags: [a, b])和 链接([[某篇笔记]])。除了你添加的所有内容外,每篇笔记都附带内置的 file.* 字段,你可以无需定义即可进行查询:

内置字段 返回内容
file.name 笔记的文件名
file.link 指向该笔记的可点击链接
file.ctime / file.mtime 创建时间 / 最后修改时间
file.tags 笔记中的所有标签
file.inlinks / file.outlinks 链入 / 链出的笔记
file.folder 文件夹路径

file.inlinks 字段是一个隐藏的超级功能——它允许你纯粹根据笔记的连接方式来构建视图,这也正是刻意链接能带来回报的原因。

四种查询类型是什么:TABLE、LIST、TASK 和 CALENDAR?

Dataview 提供了四种查询类型,每种类型产生不同形状的输出。你在标记为 dataview 的代码块内编写它们。

LIST 是最简单的形式——笔记的无序列表:

LIST
FROM "Projects"
WHERE status = "active"

TABLE 是日常的主力工具,为你指定的任何字段添加列:

TABLE status, due, file.mtime AS "Last Edited"
FROM "Projects"
SORT due ASC

TASK 从你的笔记中提取单独的复选框事项(- [ ]),并按它们所在的笔记进行分组——非常适合全库范围的待办事项视图:

TASK
WHERE !completed

CALENDAR 使用你选择的日期字段将笔记绘制到月度网格上,这对于直观呈现会议或截止日期非常方便:

CALENDAR due
FROM "Projects"

对于几乎所有需求都可以使用 LIST 和 TABLE;当你想要跨笔记聚合复选框时使用 TASK;而当日期网格视图比行格式更能直观说明问题时使用 CALENDAR。如果任务管理是你的主要目标,我们的Obsidian 任务管理完全指南展示了这些查询类型如何适应实际工作流。

如何使用 FROM 选择数据源?

FROM 子句告诉 Dataview 要考虑哪些笔记,你可以定位文件夹、标签或链接。正确设置它能让你的查询保持快速和聚焦。

  • 按文件夹: FROM "Projects"(始终用引号括起路径;子文件夹使用 "Areas/Health")。
  • 按标签: FROM #active(标签不用加引号)。
  • 按链入链接: FROM [[Project Alpha]] 找到指向该笔记的所有笔记。
  • 按链出链接: FROM outgoing([[Project Alpha]]) 找到 Alpha 所指向的笔记。

使用 AND 和 OR 组合数据源,并使用减号进行排除。这是实践中最有用的模式——提取文件夹,按标签缩小范围,并排除模板:

TABLE status, due
FROM "Projects" AND #active AND -"Templates"
SORT due ASC

该查询会读取 Projects 文件夹中打了 #active 标签的所有内容,同时排除 Templates 文件夹中的任何内容。

注意:使用 FROM 限制范围不仅是为了整洁——这是一种性能习惯。以 FROM "Projects" 开头的查询仅扫描该文件夹,而没有 FROM 的查询每次刷新都会扫描你的整个库。

如何筛选、排序和分组结果?

选择数据源后,WHERE、SORT 和 GROUP BY 可以塑造输出结果。这些是你最常调节的子句。

WHERE 使用比较和函数来筛选行:

  • 比较:WHERE priority >= 2、WHERE status = "active"、WHERE due < date(today)。
  • 函数:contains(file.name, "2026")、length(tags) > 0 以及诸如 due <= date(today) + dur(7 days) 等日期运算。

SORT 对结果进行排序:SORT due ASC 或 SORT file.mtime DESC。LIMIT 限制数量:LIMIT 10。

GROUP BY 将结果折叠在共享值之下——按状态分组任务、按文件夹分组笔记或按作者分组阅读清单:

TABLE rows.file.link AS "Projects"
FROM "Projects"
GROUP BY status

当某个字段包含列表(如多个标签或作者)时,在分组前使用 FLATTEN 将其展开为每个值一行——否则该列表将被视为单个整体。这里有一个结合了其中几个子句的 “最近修改的笔记” 复制粘贴公式:

TABLE file.mtime AS "Modified"
FROM ""
SORT file.mtime DESC
LIMIT 10

以及一个用于保持库整洁的 “无标签笔记” 清理查询:

LIST
WHERE length(file.tags) = 0

如何编写内联 DQL,何时应该使用 DataviewJS?

内联 DQL 允许你将单个计算值直接放入句子中,而不是渲染一整块区域。你使用反引号加等号前缀来编写它。例如,= this.due 可以在句中打印当前笔记的截止日期,而 = dv.current().file.mtime 可以打印此笔记最后一次编辑的时间——两者都会实时更新。

这在模板和每日笔记中非常理想:标题写着“上次复盘:= this.reviewed”,无需你动手即可保持准确。内联查询必须在设置中启用(你在安装时已开启该选项)。

DataviewJS 是进阶选择。它将可读的 DQL 语法替换为 JavaScript 和 dv.* API,为你提供循环、条件语句和任意自定义逻辑——例如 dv.pages("#book").where(p => p.rating > 4)。其代价是更陡峭的学习曲线和开启 JavaScript 查询开关。请将其视为在熟悉 DQL 之后 的下一步,而不是你的起点。绝大多数仪表盘根本不需要它。

提示:如果你发现自己需要借助于 DataviewJS 来完成一件简单的事情,通常都会有纯 DQL 的实现方式。请将 JavaScript 留给真正需要自定义渲染的场景。

如何构建真实的任务和项目仪表盘?

仪表盘只是一篇包含多个查询的笔记,这些查询共同回答了“什么需要我关注?”。这里有两个完整的复制粘贴示例,你可以将其放入笔记中进行编辑。

演练 1 — 任务仪表盘。 这会浮现出整个库中所有未完成的任务,隔离出过期的任务,并按文件分组,以便你查看每个项目所欠的任务:

TASK
WHERE !completed AND due AND due < date(today)
GROUP BY file.link

将 due < date(today) 替换为 due <= date(today) + dur(7 days) 即可改为查看本周到期的所有内容。要获得更丰富的截止日期和循环处理,请将 Dataview 与 Tasks 插件 结合使用:Tasks 负责调度、循环和流畅的复选框 UI,而 Dataview 则在笔记之间进行聚合和汇总报告。我们的Tasks 插件终极指南全面介绍了这一组合,如果你使用的是 GTD 方法,它还可以完美融入GTD 设置。

演练 2 — 项目仪表盘。 单个包含活跃项目的表格,带有状态、下一步行动以及每个项目最后修改的时间:

TABLE status AS "Status", next_action AS "Next Action", file.mtime AS "Last Modified"
FROM "Projects" AND -"Templates"
WHERE status != "done"
SORT file.mtime DESC

从头开始构建这些是学习的绝佳方式——但如果你希望直接拥有配置好的系统,这正是预设模板大放异彩的地方。Obsibrain 开箱即用,内置了由 Dataview 驱动的任务、项目以及每日/每周复盘仪表盘,因此你无需编写一行 DQL 即可获得所有收益。

常见的错误和性能陷阱有哪些?

大多数“损坏的” Dataview 查询都是因为相同的原因而失败。在假设插件有故障之前,请先检查以下清单。

  • 内联字段语法: 使用 双 冒号(status:: active),而不是单冒号。单冒号在 frontmatter 之外不起任何作用。
  • 大小写敏感性: Status 和 status 是不同的字段,并且在 WHERE 中 "Active" 不会匹配 "active"。请保持一致。
  • 为文件夹路径加上引号: FROM "Projects" 可以工作;而 FROM Projects 会被读取为类似标签的数据源从而失败。
  • 缺失字段返回 null: 对 priority 进行筛选的查询会自动默默排除每一篇缺少 priority 字段的笔记。这通常是结果看起来不完整而不是完全空白的原因。
  • 不要混合字段类型: 如果 due 在某些笔记中是日期,而在其他笔记中是纯文本,比较和排序就会失效。请在全库范围内保持某个字段类型一致。

对于 大型库的性能,规则是减少 Dataview 需要扫描的内容:

  1. 使用 FROM "Folder" 或 FROM #tag 限制每个查询的范围,而不是使用 FROM ""。
  2. 为你不会完整阅读的拉长列表添加 LIMIT。
  3. 避免在你频繁打开的笔记中放入沉重的 DataviewJS。
  4. 如果编辑后结果看起来陈旧,请在设置中关闭并重新打开插件(或重启 Obsidian)以强制重新索引。

注意:一个 什么都不返回 的查询,比起 Dataview 漏洞,更频繁的原因是元数据问题(字段缺失、文件夹名称拼写错误、大小写不匹配)。请从字段入手排查,而不是语法。

Dataview vs Obsidian Bases:在 2026 年你该用哪一个?

Obsidian 在 2025 年推出了 Bases 作为核心功能,它与 Dataview 重叠度较高,以至于这种选择现在会让新手感到困惑。Bases 是一个无代码、电子表格风格的数据库视图:你通过图形界面构建表格和筛选器,它是 Obsidian 内置的功能(无需插件),并且在移动设备上运行流畅。Dataview 是一种基于文本的查询语言:表达力更强,作为纯文本 markdown 更具可移植性,并且在提取任务和计算衍生值方面要出色得多。

当你想要一个无需学习语法的快速可视化表格并且主要在移动设备上使用时,请使用 Bases。当你需要 TASK 查询、正文内的内联值、复杂筛选或作为纯文本传输的仪表盘时,请选择 Dataview。许多高级用户两者兼用——Bases 用于可浏览的数据库,Dataview 用于报告和任务聚合。两者都不会消失,因此请根据具体使用场景进行选择,而不是只死磕其中一种。

常见问题解答

Dataview 插件免费吗?在 2026 年它还在维护并且可以安全依赖吗? 是的。Dataview 是免费、开源的,也是 Obsidian 生态系统中安装量最多的社区插件之一。它稳定且广依赖。话虽如此,它是一个社区插件(非核心组件),因此对于关键任务设置,最好将数据保持为纯 Markdown——Dataview 在设计上就是这样做的,因为它只读取你的笔记,绝不会更改它们。

Dataview 和 Tasks 插件之间有什么区别——我需要两者吗? 它们解决不同的问题并且搭配得很好。Tasks 插件 管理单个任务:截止日期、循环、调度和精美的复选框界面。Dataview 进行聚合和汇总报告——在你的整个库中构建表格和列表。对于严肃的任务管理,大多数人两者都运行,让 Tasks 处理任务生命周期,而 Dataview 驱动仪表盘。

为什么我的 Dataview 查询不起作用或没有显示结果? 百分之九十的时间是元数据的问题,而不是查询本身的问题。检查内联字段是否误用了单冒号而非双冒号、大小写不匹配(Status vs status)、文件夹路径未加引号,或者你预期的笔记上根本不存在该字段。筛选缺失字段的 WHERE 子句会默默移除这些笔记。先修复字段,再修复语法。

Dataview 会在大型库中拖慢 Obsidian 吗?查询在移动设备和 Obsidian Publish 上有效吗? 在极大的库中,未限制范围的查询可能会产生延迟——通过添加 FROM 文件夹/标签和 LIMIT 来解决。查询可以在移动设备上运行(尽管重度查询在手机上会慢一些),并且由于它们存在于你的笔记内部,因此可以作为纯文本跨设备同步。请注意,Dataview 不能 在 Obsidian Publish 上渲染,因此发布的页面会显示原始查询,而不是表格。

从小处着手,让其自然成长

你不需要在本周掌握每个子句。在几个项目笔记中添加一个 status 属性,粘贴进最近修改的表格,然后观察它的填充——这单次成功通常就足以让整个系统融会贯通。从那里开始,构建任务仪表盘,然后是项目视图,再然后是每周复盘,根据实际需求出现的情况一次添加一个查询。

如果你喜欢这种效果但讨厌后续维护,你完全不需要自己构建任何东西。Obsibrain 预先配置了这些 Dataview 仪表盘——任务、项目和定期复盘在第一天就准备就绪——这样你就可以将时间花在思考上,而不是编写查询上。无论你是自己构建还是直接引入,目标都是相同的:在一个专注于重要工作的同时能够自我组织的库。

探索 Obsibrain 演示版。

看看 Obsibrain 如何融入您的工作方式。通过电子邮件获取演示库,在 Obsidian 中亲自探索。

包含演示版后续邮件及优惠信息。您可以随时退订。 隐私政策

精心打造 💙 开发者: @pierremouchan

版权所有 © 2026