Obsidian插件Dataview,最基础常用可验证应用场景代码

在使用了这么久Obsidian后,发现最好用的插件也最常用,最有必要安装和使用的插件就是dataview插件,它以最简单的结构化语法代码,可以安装文件、标签、时间、关键字等等各种方式进行笔记汇总统计,即使可视化也可以直接用到它。
基于高阶的语法可能非常复杂,但是覆盖90%日常使用场景的dataview其实都非常简单,主要就是文件查询统计和任务查询统计,下面详细分享一下经过长久使用和验证的几个dataivew必备场景和代码。
Table常用基础查询
Dataview提供了一种灵活且强大的方式来查询和展示Obsidian中的数据。通过基础的表格查询语法,你可以快速提取、组织和展示笔记内容,提高你的知识管理效率。
1 创建基本查询表格
以下是一个简单的表格查询示例,展示所有笔记的标题和创建日期:
table
file.name, file.ctime
from "笔记文件夹路径" // 这里替换为你的文件夹路径
2 使用过滤器
你可以像SQL一样使用where语句来过滤数据。例如,查询所有标签为“Obsidian”的笔记:
table
file.name, file.ctime
from ""
where contains(tags, "Obsidian")
limit 3
-
多条件过滤:可以结合多个条件进行复杂查询。
table -
file.name, file.ctime -
from "" -
where contains(tags, "Obsidian") and dateformat(file.ctime,"yyyy") >= 2025
3 排序结果
使用sort子句可以对结果进行排序。例如,按日期降序排列:
table
file.name, file.ctime
from "笔记文件夹路径"
where contains(tags, "Obsidian")
sort file.ctime desc
4 统计数量查询
Dataview还支持聚合函数,比如计数:
table
length(rows) as "笔记数量"
from ""
group by "总笔记数"
渲染:

5 注意事项
-
文件夹路径:from后面可以指定文件夹,使用引号包围文件夹路径。
-
YAML格式:确保笔记中的YAML格式正确,以便Dataview能够正确解析数据。
-
插件启用:确保Dataview插件已经启用,否则查询不会生效。
Task任务基础查询及高阶统计
基于对日常笔记的任务管理需要,必须要了解最基本的Dataview任务查询和统计语法,才能更好的利用Obsidian来管理笔记中对应的任务。
首先,先要了解最基本的任务查询,语法结构如下:
TASK
WHERE !completed
以上就是对整个笔记库的未完成的任务进行查询输出。
如果要增加更多的查询细节,需要补充查询范围和条件,如下:
TASK
from ""
WHERE !completed and file.name=""
limit 10
以上就是通过from来设定查询文件范围,file.name来确定任务所在文件,limit来限制查询条数。当然也可以按照标签来进行查询如下:
TASK
from #todo
WHERE !completed
limit 10
1 任务查询
1.1 查询未完成的任务(限制显示5条记录)
语法:
TASK
from ""
WHERE !completed
limit 5
1.2 查询固定路径文件夹任务
语法:
TASK
from "文件夹路径"
where !completed
limit 3
1.3 文件中任务按时间查询
建立任务的时候要对任务进行标记,开始时间为:start,结束时间为due,日程为:scheduled,以下就是对截止时间在明天,未完成的任务进行查询
-
测试 📅 2025-07-23 ✅ 2025-07-22
TASK
from "002领域"
where !completed and due <= date(today)+ dur(1days)
limit 3
备注:对于任务时间转换成月为:月(due.month)
1.4 标签中任务按时间过滤
建立任务的时候要对任务进行标记,开始时间为:start,结束时间为due,日程为:scheduled
-
测试3🛫 2025-07-22
TASK
from #todo
where !completed and start >= date(today)+ dur(0days)
limit 10
1.5 按照标签过滤任务
where后面要按照标签过滤,可以通过icontains对tags进行过滤,如下对包含#todo的标签进行过滤
task
From ""
where !completed and icontains(tags,"#todo")
1.6 按照任务内容过滤任务
-
牛津英语词汇 ✅ 2026-03-20
task
From ""
where completed and icontains(text,"牛津英语词汇")
1.7 按照kanban分类名称过滤任务
对于插件kanban中的任务,也可以进行过滤查询,语法如下:
Task
From ""
where !completed and (meta(section).subpath = "知识管理" or meta(section).subpath = "今日任务")
2 任务统计
如果是要对任务进行分组统计,需要通过length(rows)来进行统计:
2.1 按照文件页来统计任务分布数量
TABLE
length(file.tasks) AS "总数"
FROM "002领域/200-卡片"
WHERE file.tasks
SORT file.name
2.2 按照任务状态统计任务数量
TABLE
length(rows) AS "数量"
FROM "002领域/200-卡片"
WHERE file.tasks
FLATTEN file.tasks AS t
GROUP BY t.completed
2.3 按照截止时间进行任务统计
TABLE
length(rows) AS "数量"
FROM "002领域/200-卡片"
WHERE file.tasks
FLATTEN file.tasks AS t
GROUP BY t.due
2.4 总任务统计
TABLE
length(rows) AS "数量"
FROM "002领域/200-卡片"
WHERE file.tasks
FLATTEN file.tasks AS t
GROUP BY 测试
2.5 任务进阶查询:任务占比统计
在对任务进行管理的时候,必然要统计固定文件中任务占比,或者整体任务的达成情况,因此,需要涉及高阶查询语法如下:
单一笔记文件任务占比
TABLE
length(filter(file.tasks, (t) => t.completed)) AS "已完成任务数",
length(filter(file.tasks, (t) => !t.completed)) AS "未完成任务数",
length(file.tasks) as "总任务数",
round(length(filter(file.tasks, (t) => t.completed))/length(file.tasks)*100 )+"%" as "完成任务占比"
FROM "002领域/200-卡片"
WHERE file.tasks
如果要统计未完成的任务,语法:length(filter(file.tasks, (t) => !t.completed))
所有笔记已完成任务数
Table
length(filter(flat(rows.file.tasks), (t) => t.completed)) AS "已完成任务数",
length(filter(flat(rows.file.tasks), (t) => !t.completed)) AS "未已完成任务数",
length(flat(rows.file.tasks)) AS "总已完成任务数"
FROM "002领域/200-卡片"
WHERE file.tasks
GROUP BY "任务统计"

以上这些常用的场景和语法,基本可以能覆盖90%的日常知识管理使用场景,拿来即用,当你不需要,或者不过于探索高阶用法的时候,只是为了更好的管理笔记和记录和写作输出,其实熟练掌握最基础的用法,可以很好的帮你更专注在管理写作中。
–END–
夜雨聆风