Notionで月ごとの習慣化チェックを行っている
毎日の振り返りやToDoなどもNotionで管理しているのでおのずと習慣化の管理も毎日見るしNotionでやるかという感じでやろうと試みた
その中で、平日だけこれやるみたいなパターンがあってそういう場合に、Notion内で簡単に達成率を出せなかったので試行錯誤した結果を残しておく
実現したい要件
- 習慣化したい項目が複数ある
- 平日のみ、毎日など特定の日付によって達成率を変えたい
- 「平日のみカウント対象とする」パターンがある
サンプル
適当な値を入れてサンプルを作ってみた
出したいのは達成率と、当日時点の達成率の2つだけだがそれを実現するために項目数*3の列が必要になる
当日までの達成率は当日までを集計対象にしたら高いパーセンテージとなるので毎日見ながらモチベーションを保つために入れてみた
ポイントとしては、チェックリストの表を1行1日分として扱い個別に達成率表とリレーションを貼ることで特定の日付のリストから達成率を割り出すことが可能になる
平日のみの場合は平日の日付分だけ達成率の行でリレーションを設定する
平日のチェックリストは休日分のチェックをしてもリレーションに含まれていないので数値に変動はない
チェックリスト表
- 過ぎた日付か(fomula)
prop("date") < now()
当日分までの達成率も見たいので対象の日がもう過ぎた日か判定する列を用意する
達成率の表
項目ごと(コロコロ、プランクなど)に行を用意し、適切なリレーションを設定する
項目数分だけRollupで対象項目のchecked
、checked percent
をRollupで作成
- 当日分までの達成率(3番)
prop("checked-3") / prop("past-days")
- 各種項目の達成率を行によって出し分け(達成率)
if(contains(prop("Name"), "1."), prop("result-1"), if(contains(prop("Name"), "2."), prop("result-2"), prop("result-3")))
- 各種項目の達成率を行によって出し分け(当日までの達成率)
if(contains(prop("Name"), "1."), prop("result-by-day-1"), if(contains(prop("Name"), "2."), prop("result-by-day-2"), prop("result-by-day-3")))
参照する列名が違うだけでやっていることは達成率と同様
比較に対象文字列が含まれるかを判断に使っているのでNameを変更したことによって動かなくなってしまう可能性があり微妙ではある
APIを使ってスクリプト化してみた
書き捨てだがスクリプト化した
いったん自分はこんな感じで毎月データベースとその月のレコードを作成している
取り組み始めて10ヵ月程経過しているがいまのところ継続できている
NotionAPIできないこと、他困ったこと
一応ここまでやってみたが正直あまりお勧めできる感じではない
理由は2つある
GUI周りの設定をAPIでコントロールできない
データベース、レコードを作るのは楽にできるようになったがデータベースの見た目をいじるのはAPIのからは行えないよう
- propertyの表示非表示の切り替え
- 日付フォーマットの選択
- カラムの順序、幅の指定
などはNotion上でポチポチする必要がある
リレーションで設定した先のデータを使うRollupの計算結果が表示されない
説明が難しいが、次のような設定をしてチェックされたパーセンテージをRollupで計算する場合
APIでスクリーンショットの通りの設定を行っても実際にデータベースを見ると計算結果が反映されていない状態になっている
問い合わせてみたが「現状は制限がかかっていてできない」というような回答で諦めた
なのでこちらもポチポチ設定し直す必要がある…
正直これがとても面倒ではあるがとりあえずNotionに記録だけ取っておけばデータは貯められるので使っている
まとめ
- NotionのAPIを使って習慣化のチェックリストとサマリー表示できるようにした
- データの作成とカラムの設定をスクリプトで自動化した
NotionのAPIを使うよい機会になったので勉強にはなりました
正直そんなにいけてないなーとは思うものの新たにツール入れるのもちょっと面倒だったりして惰性ではあるが使っている