【Obsidian 使用教學】插件篇 02 — 如何在 Obsidian 中自動彙整筆記?使用 Dataview 查詢與呈現符合條件的筆記
一、介紹
這是 Obsidian 使用教學 — 插件篇的第 2 篇文章。
在上一篇文章中,我介紹了 Note Refactor 插件,可以快速幫我們拆分筆記。你可以在下方的文章複習內容:
這篇文章想介紹另一款 Obsidian 中的神器 — Dataview,一款類似 SQL 語法 (資料庫的結構化查詢語言, Structured Query Language) 的查詢語言。
Dataview 可以快速查詢特定條件的筆記,並且用 table (表格), list (清單), task (待辦事項) 呈現這些筆記條目。
二、如何使用 Obsidian Dataview 插件?
1. Dataview 簡介
參考 Dataview 插件文件 ,目前 Dataview 提供 2 種查詢方式:預設語法 和 Dataview Javascript 語法。由於後者需要一定的技術知識,因此本篇只會介紹前者。
查詢結果範例如下:
備註:若想要了解 Dataview Javascript 的應用,可參考 這篇文章
2. 在筆記中建立查詢欄位
(1) 自行建立
Dataview 能夠查詢的欄位是由我們自己建立的,因此在使用 Dataview 之前,我們必須在每一則筆記中建立需要的資料欄位,以利未來查詢。
目前建立欄位的方法有 2 種:
▶︎ 在 YAML 區加入欄位
YAML 是一種描述設定的文字格式,通常使用人性化的語言來撰寫,以便讓閱讀者可以直接明白它要表達的意思。
在 Obsidian 中,我們可以用上下 ---
包住一段文字,這段文字就稱為 YAML。而在 YAML 區中,我們會用 <欄位名稱> : <值> 來格式來定義欄位的值。
例如下方的 YAML 區域包含了 date 和 aliases (筆記別名)。
如果 YAML 文字寫得正確,在切換成 Preview Mode 時就會看到 Metadata 的文字。
如果寫的不正確,就會出現 INVALID YAML 的文字。
在 YAML 區域定義的欄位都可以在後續被 Dataview 當作欄位搜尋到。想要了解更 YAML 格式如何寫,可以參考 Obsidian 的官方文件。
▶︎ 使用 inline field 加入欄位
另外一種在筆記中建立欄位的方式,稱為 inline field。它是由 Dataview 開發者自行定義的格式,必須寫在 YAML 區塊 (即 ---
外面),並且用 <欄位名稱> :: <值> 的格式。
inline filed 相較於 YAML,在欄位值的定義上更有彈性。因為在 YAML 區中,合法欄位值是不能包含 [[]]
的 (雖然你硬要寫 obsidian 也不會報錯,但在程式世界中這樣定義 YAML 欄位是不正確的觀念)。
我建議如果要建立的筆記欄位值需要寫 [[]]
,一律使用 inline field 的格式較好。範例如下圖:
你可能會好奇說:「那我到底需要建立哪些欄位呢?」
這個答案完全依據你個人需求而定,如果你參考我的 Metadata 格式,基本上會有以下欄位:
- Status : 顯示筆記狀態,可參考 筆記篇 04 — 寫筆記就像是在種樹,在 Obsidian 中實作 Evergreen Note 的概念
- Note Type : 顯示這則筆記的來源性質,可參考 筆記篇 05 — 結合資訊處理流程,讓筆記的 Metadata 變得更詳細
- Source Url : 顯示這則筆記的出處
- Topics : 這則筆記跟什麼主題有關,用
[[主題筆記]]
格式
在剛使用 Obsidian 初期,你不需要一次增加這麼多欄位,可以依照自己的筆記需求慢慢增加就好。
(2) Dataview 內建欄位
除了自行建立欄位,Dataview 也提供許多內建的欄位可以使用。參考 官方文件 如下,由於解釋已經蠻淺白的我就不翻譯了:
file.name
: The file title (a string).file.folder
: The path of the folder this file belongs to.file.path
: The full file path (a string).file.link
: A link to the file (a link).file.size
: The size (in bytes) of the file (a number).file.ctime
: The date that the file was created (a date + time).file.cday
: The date that the file was created (just a date).file.mtime
: The date that the file was last modified (a date + time).file.mday
: The date that the file was last modified (just a date).file.tags
: An array of all tags in the note. Subtags are broken down by each level, so#Tag/1/A
will be stored in the array as[#Tag, #Tag/1, #Tag/1/A]
.file.etags
: An array of all explicit tags in the note; unlikefile.tags
, does not include subtags.file.inlinks
: An array of all incoming links to this file.file.outlinks
: An array of all outgoing links from this file.file.aliases
: An array of all aliases for the note.file.day
: An explicit date associated with the file
這裡的 file 指的是筆記檔案 (.md) 的意思。
3. 基本查詢格式
Dataview 的基本查詢格式如下:
```dataview
[TABLE|LIST|TASK] field1, field2, ..., fieldN FROM #tag or "folder" or [[link]]
WHERE somefield = somevalue
COMMAND argument
```
用 ```dataview 當作開頭,最後用 ``` 將指令包住。
這樣看可能太複雜了,我們換另一種比較好理解的格式:
```dataview
輸出格式(Table/List/Task) 欄位名稱
from [#tag 或 資料夾 或 [[筆記]] ]
where 條件
sort 欄位 [排序]
```
下面我們逐行拆解說明。
▶︎ 決定呈現樣式 — Table, List, Task
Dataview 支援 3 種形式呈現查詢結果:
- Table : 表格
- List : 清單
- Task : 待辦任務
其中 Table 和 List 是我最常使用的,Task 幾乎沒有用到。
下方是範例。請留意表格、清單、待辦事項的呈現都是依據內建的主題樣式 CSS 決定。
▶︎ 要查詢哪裡
決定了樣式之後,接下來我們要告訴 Dataview 資料來源是什麼。目前 Dataview 支援 3 種形式的資料來源:
- tag : 可指定 #tag 當作資料來源
- folder : 可指定特定資料夾中的筆記
- [[筆記]] : 可指定連結到「筆記」的其他筆記當作來源
例如指定 #🌲,抓出含有 🌲 標籤的筆記。
例如指定 [[product strategy MOC]],抓出連結到 product strategy MOC 的筆記。
▶︎ 加入篩選條件
Where 的意思代表篩選資料,也就是將資料源的資料依據特定條件呈現。
我常用的篩選條件有:
- 24 小時內修改的筆記
where file.mtime >= date(today) - dur(1 day)
2. 筆記檔案名稱不包含特定文字 (如果要包含把 ! 拿掉即可)
where !contains(file.name,"不包含的文字")
如果要看更多範例,可以看 官方文件的這一頁。
▶︎ 決定如何排序資料
最後我們可依據個人需求調整查詢結果的排列順序,使用的是 sort 這個關鍵字。
你可以依據日期 (date)、檔案修改時間 (file.mtime)、檔案建立時間 (file.ctime)…來做排序。如果要正序就用 asc 這個關鍵字,倒序就用 desc 這個關鍵字。
例如依據檔案建立日期倒序排列 (即最新到最舊),可以寫成
sort file.ctime desc
三、實戰案例 — 看看 Obsidian Dataview 可以用在哪裡
1. 寫作靈感提示
我在《如何透過寫筆記幫助自己深度思考 ? 使用 HQ&A 筆記法,結合「費曼學習法」與「間隔重複」幫自己學得更好》介紹了 HQ&A 的筆記格式,其中 Question 和 Answer 非常適合當作寫作靈感的提示。
例如今天我的寫作主題是「產品策略」,我可以搜尋「product strategy MOC (即產品策略主題)」筆記,利用 Dataview 將所有連結到此主題的 HQ&A Note 用表格呈現出來。
▶︎ 欄位設計
我在每一則筆記中,都有加入 Question
和 Answer
兩個欄位。
▶︎ Dataview 語法
```dataview
table question, answer
from [[product strategy MOC]]
where !contains(file.name,"daily note")
sort status desc, file.mtime desc
```
▶︎ 呈現結果
2. 每日復盤
在每一天傍晚,我會用 Dataview 查詢今天有對哪些筆記做修改,當作今日個人筆記的復盤。
▶︎ Dataview 語法
```dataview
list from ""
WHERE file.ctime >= date(today) - dur(1 day)
```
▶︎呈現結果
3. 自動化彙整名詞的相關文章
我在 Obsidian 中會別針對「名詞」做筆記,紀錄我對每一個新名詞的理解,並且用 Dataview 彙整所有使用到此名詞 (有連結) 的筆記。
例如 PARA 分類系統 筆記中,目前有 2 篇筆記都有使用 PARA 這個名詞。這個用法特別適合拿來整理某則筆記的參考文獻。
▶︎ Dataview 語法
```dataview
table parent-link as "父連結", file.mtime as "更新時間", file.ctime as "建立時間", status as "筆記狀態", file.inlinks as "相關連結"
from [[PARA system]]
sort status desc, file.mtime desc
```
▶︎ 呈現結果
4. 自動化彙整書籍筆記
閱讀完一本書籍後,我會利用 Note Refactor 這款插件將書籍中的筆記全部拆分出去,並且透過 Dataview 將這本書籍的相關筆記自動彙整。
這個案例的 Dataview 語法跟「自動化彙整名詞的相關文章」其實是一樣的,只是是用在書籍筆記中。例如下方是《讀懂一本書》的筆記整理。
▶︎ Dataview 語法
```dataview
table parent-link as "父連結", file.mtime as "更新時間", file.ctime as "建立時間", status as "筆記狀態", file.inlinks as "相關連結"
from [[{讀懂一本書]]
where !contains(file.name, "MOC")
sort status desc, file.mtime desc
```
▶︎ 呈現結果
四、使用 Obsidian Dataview 的建議
Dataview 相對於其他 Obsidian 插件是比較難上手的,在踩過無數雷坑後我有以下 3 點建議。
1. 注意 Emoji Tag 的使用
如果你要像我一樣使用 Emoji 當作 Tag,請注意不要使用 Obsidian Community Plugin — Emoji Toolbar 來插入。
使用 Emoji Toolbar 插入的 Emoji 是無法被 Dataview 讀取的,這點要特別注意。
2. 學會自己查詢文件
目前網路上關於 Dataview 的學習資源還沒有很多,加上每個人筆記欄位設計的格式都不相同,可能你遭遇的問題是別人從來沒碰過的,因此未必都能獲得解答。
此時官方文件會是你最好的幫手,雖然文件的詳細程度還有待加強…但搜尋一遍官方文件後幾乎都可以想得的查詢語法。
如果不幸地你還是無法自己排除問題,以下有 2 個管道可以碰碰運氣 (不保證有人回應):
- Obsidian Forum : Obsidian 官方論壇,使用 Dataview 當作關鍵字查詢是否有類似問題貼文
- Obsidian Discord : Obsidian 官方 Discord 討論頻道,有非常多大神常駐,可以在 #plugin-general, #plugin-advanced, #中文…等頻道發問。
3. 結合模板快速插入指令
當你學會 Dataview 的基本操作後,可以嘗試和 Template 搭配一起使用。
例如實戰案例中的「自動化彙整筆記」功能,都可以用以下模板快速插入。因為我們的需求都是找到「連結到目前這則筆記」的其他筆記,因此可以用 [[{{title}}]] 當作變數快速插入筆記中。
```dataview
table parent-link as "父連結", file.mtime as "更新時間", file.ctime as "建立時間", status as "筆記狀態"
from [[{{title}}]]
sort status desc, file.mtime desc
```
五、結論
這篇文章介紹了 Obsidian 神器 — Dataview 的使用方式,包含:
- 基礎的查詢語法
- 實戰應用
- 使用建議
希望大家閱讀完畢後都可以試用看看這款插件。若有不清楚的地方,歡迎在下方留言與我討論。
目前我推出了「Obsidian 學習包」課程,我設計了 21 堂課程來解說 Obsidian 的核心功能,並且舉一個實際流程 (怎麼寫日記) 來結合 21 堂課的內容。
👉 有興趣購買 Obsidian 學習包的朋友,歡迎點擊 表單購買
目前我也有提供 1 對 1 的 Obsidian 付費個人諮詢,幫助學員從 0 到 1 打造自己的網狀筆記系統,提升自己的創作產出。
其他 Obsidian 文章
1. 基礎篇 | Obsidian 全新手從這裡開始讀
- 【Obsidian 使用教學】基礎篇 01 — 認識預設介面與基礎功能
- 【Obsidian 使用教學】基礎篇 02 — 認識「設定選單」與我的設定建議
- 【Obsidian 使用教學】基礎篇 03 — 認識「主題」與 CSS 客製化設定
- 【Obsidian 使用教學】基礎篇 04 — 做好筆記備份 ,使用 iCloud 和 Google Drive 進行雙重備份
- 【Obsidian 使用教學】基礎篇 05 — 如何調整 Obsidian App 設定檔? 讓 Obsidian App 擁有自己的外觀主題與插件
2. 觀念篇 | 要讓 Obsidian 變得好用,先來了解背後的方法論
- Zettelkasten卡片盒筆記法,建立知識連結網路來活用筆記
- 如何正確使用 Zettelkasten 筆記法?了解 4 種筆記形式的功能,以利後續筆記連結
- 什麼是 Evergreen Note (長青筆記)?
- 如何寫出有效的筆記?問自己 4 個問題,幫助提取曾經學習過的知識. 問自己 4 個問題,幫助提取曾經學習過的知識
- 知識是如何形成的?使用 Obsidian 將形成知識的過程變得視覺化
- 你所知道的「筆記工具」,早就演化成不同的物種
3. 筆記篇 | 開始在 Obsidian 中建立個人的網狀連結筆記系統
- 【Obsidian 使用教學】筆記篇 01 — 了解 Obsidian 的 Metadata,建立一套可持續迭代的筆記系統
- 【Obsidian 使用教學】筆記篇 02 — 使用「漸進式總結」來寫筆記,逐步萃取出高含金量的知識內容
- 【Obsidian 使用教學】筆記篇 03 — 讓Obsidian 變得更好用!分享我的 Obsidian 筆記版面配置
- 【Obsidian 使用教學】筆記篇 04 — 寫筆記就像是在種樹,在 Obsidian 中實作 Evergreen Note 的概念
- 【Obsidian 使用教學】筆記篇 05 — 結合資訊處理流程,讓筆記的 Metadata 變得更詳細
- 【Obsidian 使用教學】筆記篇 06 — 在筆記的 Metadata 使用 [[內部連結]] ,在無形之中累積對某一主題的認識
- 【Obsidian 使用教學】筆記篇 07 — 使用 Workspaces 功能,快速取用不同的版面配置
- 【Obsidian 使用教學】筆記篇 08 — 倍速提升你的操作速度,14 個 Obsidian 快捷鍵設定建議
- 【Obsidian 使用教學】筆記篇 09 — Markdown 沒有想像中那麼難,只需要學會這 3 個語法就能上手 Markdown
4. 插件篇 | 增強 Obsidian 功能的秘密武器
- 【Obsidian 使用教學】插件篇 — 10個使用Obsidian 必裝的插件 (上)
- 【Obsidian 使用教學】插件篇 — 10個使用Obsidian 必裝的插件 (下)
- 【Obsidian 使用教學】插件篇 01 — 如何在 Obsidian 中快速拆分筆記?使用 Note Refactor 讓你彈指之間完成
- 【Obsidian 使用教學】插件篇 02 — 如何在 Obsidian 中自動彙整筆記?使用 Dataview 查詢與呈現符合條件的筆記
- 【Obsidian 使用教學】插件篇 03 — 如何讓 Obsidian 自動推薦關聯筆記?使用 Breadcrumbs 查看有哪些相關筆記可以連結
- 【Obsidian 使用教學】插件篇 04 — 做好筆記備份,使用 Obsidian Git自動備份筆記到 Github
- 【Obsidian 使用教學】插件篇 05 — 用機器學習演算法幫助自己寫筆記!
5. 整理篇 | Obsidian 資源彙整
6. 問答篇 | Obsidian 常見問題與答案
▶︎ 關於文章1/ 歡迎訂閱 我的電子報 獲得實用的生活與工作技巧,每週二中午 12:00 準時發刊2/ 想要掌握最新文章,可以點擊下方「Follow」我~3/ 如果你覺得文章寫的不錯,可以對文章拍手讓我知道 👏🏻▶ 關於我我是朱騏,一個組織能力超強的軟體產品經理,喜歡研究各種生產力工具、時間管理方法。1/ 我可以提供產品管理、時間管理、生產力工具的「個人問題諮詢」與「講座邀約」。2/ 若是個人諮詢,可以請我喝杯咖啡、吃頓晚餐,可透過 Email/ Facebook 跟我約時間,請參考「聯繫方式」。 (由於疫情期間無法實體碰面,可以幫我分享一篇你最喜歡的文章到個人社群平台上,分享後透過 Email/Facebook 告訴我即可)3/ 若是講座邀約,請直接使用 Email 聯繫。︎▶︎ 聯繫方式- 📪 Email:muhenry608@gmail.com- 💬 Facebook:請先加我個人好友並簡短說明想要諮詢的主題▶︎ 建立人脈歡迎使用 LinkedIn 與我交流,你可以「加我為好友」建立連結| LinkedIn @ Chi Chu 歡迎交流