可能是早睡早起、每日喝足量水,或是每日閱讀、每日運動,總有過那幾個時候,我們會心血來潮地告訴自己:「我要來養成一些什麼習慣,我要做出改變。」
在我原本的作業流程之中,我把每天的Daily Routine與想要養成的習慣,以Task的形式放在Obsidian中Daily Note的同一個地方,雖然可以每日叮囑自己要做好這些事情,但沒有辦法回顧自己過去的達成狀況,總是有一點遺憾。想到先前還在使用Notion時,Notion可以利用Database生成一個每個禮拜為單位的習慣追蹤器,一眼便可以明白過去一週的習慣達成率,稍微在腦中設想一下原理,覺得用Obsidian的Dataview搞不好也可以做到,所以就生出了這一篇來。
Dataview Functions
為了這件事情,我先去確認Dataview Plugin到底能不能做到,於是我去翻了Dataview的作者出的說明文件(這算是官方嗎?),找到了一個關鍵功能:choice。讓我先列出這個習慣追蹤所需的Dataview功能吧:
- Metadata
- choice
- date(now)
- dur(7days)
原理
我的發想是,Dataview可以檢視並顯示不同頁面的Metadata,那如果我把習慣完成的狀況儲存成Daily Note的Metadata,是否就能利用Dataview將其以表格的形式顯示出來呢?接著我用關鍵字上網搜尋,竟然發現有人跟我的想法一樣,而且已經在Obsidian中實現了,我對自己的遲鈍感到一點羞愧。
實際使用
Choice function
這個功能(或是稱為函式?)的功能是一個簡單的if判斷式,choice(條件,"符合條件會顯示這個", "沒有符合就會顯示這個")但是由於它的功能相當原始,我原本想在裡面再加入一個choice函式,讓習慣完成的狀況可以以程度表示,但似乎不被允許,Dataview的作者有說可以把這功能加上,但似乎還沒實現。
Emoji
Obsidian支援Emoji顯示,甚至可以用Emoji作為Tag,以Windows系統來說可以按win+.來輸入Emoji,在這裡我們用來顯示習慣的完成狀況。
最後成品
在每天的Daily Note中用Metadata的格式記錄習慣達成,單行的inline Metadata寫法如下:
Meditation ::
在後方寫上執行的單位,我是設定分鐘,接著在習慣追蹤的回顧Dataview條件中寫上choice(Meditation > 10,"達成", "沒達成")便可以檢視達成狀況,再利用今日日期減去七天file.day <= date(now) and file.day >= date(now) - dur(30days)就可以檢視過去一個月內的數據了。
這還有一個好處是可以自訂完成的量化標準,超過標準才會變圖,最後會長成這樣:
![]()
接下來下一個給自己的作業是,先設立好想養成的習慣,並且嚴格執行,我想我應該會想試試冥想,等到久一點再來回顧一下有沒有成效。
最後附上Dataview程式碼:
```dataview
table without ID
file.name as Date,
choice(Japanese > 4, "✅", "❌") as Japanese,
choice(Meditation >= 10, "✅", "❌") as Meditation,
choice(Reading > 25, "✅", "❌") as Reading,
choice(Exercise > 1, "✅", "❌") as Exercise,
choice(Coding > 20, "✅", "❌") as Coding,
choice(Writing > 15, "✅", "❌") as Writing
FROM "Daily"
where file.day <= date(now) and file.day >= date(now) - dur(30days)
sort file.day desc