跳至主要内容

[Obsidian] Dataview Plugin

Dataview 是 Obsidian 中最強大的數據查詢插件,可以將你的筆記庫視為數據庫,動態查詢和顯示筆記內容。

功能特色​

📊 數據查詢​

  • SQL 風格查詢: 使用類似 SQL 的語法查詢筆記
  • 動態內容: 查詢結果會隨筆記變化自動更新
  • 多種顯示格式: 列表、表格、任務、日曆等
  • JavaScript 支援: 使用 DataviewJS 進行複雜查詢

🔍 查詢類型​

  • LIST: 顯示檔案列表
  • TABLE: 顯示表格格式數據
  • TASK: 顯示任務列表
  • CALENDAR: 顯示日曆視圖

📝 數據來源​

  • Frontmatter: YAML 前置資料
  • 內聯欄位: 文件內的 key:: value 格式
  • 檔案屬性: 創建時間、修改時間、大小等
  • 標籤和連結: 自動索引的標籤和連結關係

基本語法​

LIST 查詢​

LIST
FROM "folder"
WHERE condition
SORT field ASC/DESC

TABLE 查詢​

TABLE field1, field2, field3
FROM "folder"
WHERE condition
SORT field ASC/DESC

TASK 查詢​

TASK
FROM "folder"
WHERE condition

實用範例​

最近創建的檔案​

LIST
FROM ""
WHERE file.ctime >= date(today) - dur(7 days)
SORT file.ctime DESC
LIMIT 10

專案進度表格​

TABLE status, priority, due_date
FROM "projects"
WHERE status != "completed"
SORT priority DESC, due_date ASC

待辦任務統計​

TASK
FROM ""
WHERE !completed
GROUP BY file.folder

標籤統計​

TABLE length(file.tags) as "標籤數量"
FROM ""
WHERE file.tags
SORT length(file.tags) DESC

本專案中的應用​

日記模板中的查詢​

當日任務查詢​

LIST
FROM ""
WHERE file.tasks.due = date({{date:YYYY-MM-DD}})
AND !file.tasks.completed

當日創建檔案​

List
FROM -"node_modules"
WHERE file.cday = date("{{date:YYYY-MM-DD}}")
SORT file.ctime ASC

當日修改檔案​

List
FROM -"node_modules"
WHERE file.mday = date("{{date:YYYY-MM-DD}}")
SORT file.mtime ASC

專案管理查詢​

專案狀態總覽​

TABLE status, priority, team, progress
FROM "projects"
WHERE type = "project"
SORT status ASC, priority DESC

團隊任務分配​

TABLE file.name as "任務", assignee, status, due_date
FROM ""
WHERE assignee
GROUP BY assignee

DataviewJS 進階應用​

自訂統計圖表​

let pages = dv.pages('"daily"')
let data = pages.map(p => ({
date: p.file.name,
steps: p.steps || 0,
reading: p.reading || 0
}))

dv.table(["日期", "步數", "閱讀時間"],
data.map(d => [d.date, d.steps, d.reading]))

動態內容生成​

let today = moment().format('YYYY-MM-DD')
let tasks = dv.pages().file.tasks
.where(t => t.due && t.due.toString() === today)
.where(t => !t.completed)

dv.header(2, `今日待辦 (${tasks.length} 項)`)
dv.taskList(tasks)

配置設定​

基本配置​

  • 刷新間隔: 5000ms(5秒)
  • 任務完成追蹤: 關閉
  • HTML 支援: 啟用
  • DataviewJS: 啟用
  • 內聯查詢: 啟用(前綴 =)

日期格式​

  • 預設日期格式: MMMM dd, yyyy
  • 日期時間格式: h:mm a - MMMM dd, yyyy

表格設定​

  • ID 欄位名稱: File
  • 群組欄位名稱: Group

效能優化​

查詢優化​

  • 使用具體的資料夾路徑而非全域搜尋
  • 適當使用 LIMIT 限制結果數量
  • 避免過於複雜的 WHERE 條件

刷新控制​

  • 調整刷新間隔避免效能問題
  • 對於靜態內容可以關閉自動刷新
  • 使用 dv.current() 獲取當前頁面資訊

常見問題​

Q: 查詢結果不更新?​

A: 檢查刷新設定,確保啟用自動刷新功能。

Q: DataviewJS 無法執行?​

A: 確認已在設定中啟用 DataviewJS 功能。

Q: 日期查詢格式錯誤?​

A: 使用 date() 函數包裝日期字串,確保格式正確。

Q: 中文檔名查詢問題?​

A: 使用雙引號包裹中文路徑和檔名。

使用場景​

📊 數據分析​

  • 筆記統計和分析
  • 習慣追蹤數據彙總
  • 專案進度監控

📋 任務管理​

  • 待辦事項彙總
  • 截止日期提醒
  • 任務分配統計

📚 知識管理​

  • 相關筆記推薦
  • 標籤使用統計
  • 連結關係分析

📅 時間管理​

  • 日記內容彙總
  • 週期性回顧
  • 時間分配分析

相關插件​