夜雨聆风学习资料网

ARTICLE · 1065615

Obsidian必备插件Dataview:12段代码搞定笔记检索|任务汇总|数据看板,覆盖90%日常场景(附代码模板)

Obsidian必备插件Dataview:12段代码搞定笔记检索|任务汇总|数据看板,覆盖90%日常场景(附代码模板)

最近在梳理个人知识管理数据资产过程中,经常会使用到Dataview来进行查询和统计,梳理库的笔记情况,但是,有时候一些查询语法还是会突然忘记,每次再去寻找搜索依旧非常麻烦。

因此,重新整理了一下插件Dataview会用到代码案例,基本可以覆盖90%的日常使用,包含:

  • 笔记检索:各种时间、文件、标签维度的查询代码
  • 任务汇总:各种时间、标签、面板的任务查询统计
  • 数据看板:对于一些数据统计看板经常用到的高阶代码

以后想用直接复制使用即可。

笔记检索

按文件夹查询笔记

代码示例

```dataviewtablefrom "文件夹相对路径"```

按标签查询笔记

代码示例

```dataviewtablefrom 标签(比如:<span class="wxp-tag">#文章</span>```

添加过滤

按照笔记名称包含的关键词过滤,比如:搜索所有笔记包含Dataview

```dataviewtablefrom "文件夹相对路径"where contains(file.name,"Dataview")```

关键词:contains,指包含内容,如果是不包含可以用:!contains

按照笔记创建的时间进行过滤,比如:搜索近3天创建的笔记

```dataviewtablefrom "文件夹相对路径"where dateformat(file.ctime, "yyyy-MM-dd") = "2026-09-05"```

关键词:dateformat,修改时间为固定表达格式

对于时间的过滤还有非常常见的几种需求:

  • 今天:dateformat(file.ctime, "yyyy-MM-dd") = dateformat(date(now), "yyyy-MM-dd")
  • 最近N天:dateformat(file.ctime, "yyyy-MM-dd") <= dateformat(date(now)-dur(N days), "yyyy-MM-dd")
  • 本周:dateformat(file.ctime, "yyyy-W") = dateformat(date(now), "yyyy-W")
  • 本月:dateformat(file.ctime, "yyyy-MM") = dateformat(date(now), "yyyy-MM")
  • 本年:dateformat(file.ctime, "yyyy") = dateformat(date(now), "yyyy")

排序查询

```dataviewtablefile.ctimefrom "文件夹相对路径"where contains(file.name,"Dataview")sort file.ctime desc```

关键词:sort用于排序,顺序用asc,逆序用desc

限制输出行

```dataviewtablefile.ctimefrom "文件夹相对路径"where contains(file.name,"Dataview")limit 3```

任务汇总

任务基础代码如下:

```dataviewTASKWHERE !completed```

关键词:completed代表完成,!completed代表未完成的任务

以上就是对整个笔记库的未完成的任务进行查询输出。

按照文件过滤,查询固定文件的任务

```dataviewTASKfrom "" WHERE !completed and file.name="固定笔记名称"limit 10```

如果要查询固定文件夹的任务,可以直接在from后面的“”中添加文件夹路径。

按照标签进行过滤,查询固定标签未完成任务

```dataviewTASKfrom <span class="wxp-tag">#todo</span>WHERE !completed```

如果要查询已经完成的任务,可以添加WHERE !completed,另外还可以通过icontains(tags,"#todo")来按照标签过滤

按照时间过滤未完成的任务

建立任务的时候要对任务进行标记,开始时间为:start,结束时间为due,日程为:scheduled,以下就是对截止时间在明天,未完成的任务进行查询

```dataviewTASKfrom ""where !completed and due <= date(today)+ dur(1days)```
  • 对于任务时间转换成月为:月(due.month)

按照任务内容过滤未完成的任务

```dataviewtaskFrom ""where !completed and icontains(text,"任务内容关键词")```

数据看板

以下是数据看板经常会用到的一些高阶查询统计分析和任务查询统计分析代码案例

分组统计

按照时间分组统计笔记数

```dataviewtablelength(rows) as "笔记数量"from "04_Product/Projects/01Obsidian知识管理教程"group by dateformat(file.ctime, "yyyy-MM-dd")```
  • length(rows):统计每日创建笔记数量
  • group by:和SQL代码一致,后面添加分组时间或者其他分组维度字段

多个标签拆分行输出

关键字:FLATTEN,用于拆分多标签,然后单独成行输出

```dataviewtabletags,tagfrom "03_Output/Articles"FLATTEN tags as tagwhere contains(tags, "AI实验")limit 10```

输出:

此字段对于分析一篇图文多个标签的情况下,可以进行拆分成一个图文一个标签的明细,方便进一步统计单一维度笔记数,和重合笔记数。

按照kanban分类名称过滤任务

如果下载了kanban插件,可以直接通过看板分类,比如:最重要最紧急、不重要最紧急等不同优先级看板分类来查看任务

```dataviewTaskFrom "" where !completed and (meta(section).subpath = "最重要最紧急" or meta(section).subpath = "今日任务")```

以上的今日任务是看板名称,最重要最紧急未分类名称。

任务进阶查询:任务占比统计

在对任务进行管理的时候,必然要统计固定文件中任务占比,或者整体任务的达成情况,因此,需要涉及高阶查询语法如下:

单一笔记文件任务占比

```dataviewTABLE  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 ""WHERE file.tasks```

如果要统计未完成的任务,语法:length(filter(file.tasks, (t) => !t.completed)) 

所有笔记已完成任务数

```dataviewTablelength(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 ""WHERE file.tasksGROUP BY "任务统计"```

总结

以上每一个代码都是经常会用到的,日常的查询,统计、分析都可以直接用。

从代码使用管理,就会发现,知识管理就是在需要使用或者创作的时候,不用去思考和寻找,可以有历史的积累拿来即用。

未来AI可以给出任何的代码,但是自己熟悉的,经常用的还是需要自己通过AI或者别的渠道进行信息输入、筛选评估和决策,最后留下来对自己最有用的。随着未来不断的积累,再通过AI放大,才是进步最快的方式。

以上代码仅供大家分享参考,有任务问题,随时沟通交流。

关于我

西湖太极熊 | 一人公司实践者

持续研究AI个人数据资产洞察和AI+Obsidian知识管理


📚 更多资源我把 Obsidian、AI、知识管理相关的教程、工具、模板和精选文章,都整理到了资源中心网站。点击左下角「阅读原文」即可进入。

相关学习资料