はじめに
Notion Tips の第163回目はタスクの日付範囲を週ごとに集計しチャート表示する方法を解説します。これはもともとアンバサダーの Slack で以下のように質問されたものでした。
Charts: Is there a way to display a total count of items in progress by each week based on status and date range? Not just by start date, but also to count in anything in progress for all weeks between start and end date. If not, how would you solve this to display information on how many are in progress for each week?
作成したデータベース
今回は最初に答えを作成して、それを実現するための仕組みを設計することにしました。チャートではフォーミュラで計算した値を表示することができないので、横軸はマルチセレクトにして、日付範囲が含まれる週を選ぶことにしています。当然手動でやればできるのですが、そこは自動化したいところです。そこで、weeks という数式を作成することにします。

作成した数式
作成した数式は以下のようになります。
prop("Date").empty() ? [""].slice(1) : lets( sd, prop("Date").dateStart(), ed, prop("Date").dateEnd(), db1, ed.dateBetween(sd, "weeks"), edw, ed.formatDate("WW"), ed2w, sd.dateAdd(db1, "weeks").formatDate("WW"), db2, edw == ed2w ? db1 : db1 + 1, "." .repeat(db2+1) .split("") .map( sd.dateAdd(index, "weeks") .formatDate("GGGG-WW") ) )
意外と細かいテクニック満載なので、少しずつ分解して解説します。まず日付が空の場合に空の文字列リストを返す必要があります。単に [] としてしまうと不明な型のリストとなってしまうので、 [""] で文字列のリストを作成した後で slice により最初の空文字を外します。これによって、この空のリストが文字列のリストであることがシステムに伝わります。
prop("Date").empty() ? [""].slice(1) :
次に日付が存在するときは開始日から順に GGGG-WW の形で週のリストを作成します。Notion Formula には任意回数の繰り返しが存在しないので、いつもの repeat の登場です。ここで開始日と終了日の週の差分を計算します。ただし、日曜日に開始し、月曜日に終了した場合週の差分は0ですが、曜日をまたいでいるので週差分は 1 にしなければなりません。それらを計算しているのが、lets の変数部分です。まず、sd と ed は日付プロパティの開始日と終了日が入ります。その後、db1 でそれらの間の週差分を計算します。
sd, prop("Date").dateStart(), ed, prop("Date").dateEnd(), db1, ed.dateBetween(sd, "weeks"),
この週差分を使った先の日付での週文字列 (edw2) と実際の週文字列 (edw) を比較します。これらが一致した時には、db2 は週差分として計算した db1 と同じ数字にしますが、一致しない場合にはさらに 1 追加します。この db2 に 1 を加えた数字が繰り返し回数になります。
edw, ed.formatDate("WW"), ed2w, sd.dateAdd(db1, "weeks").formatDate("WW"), db2, edw == ed2w ? db1 : db1 + 1,
繰り返し回数が決まれば、いつものように repeat, split, index による map によって可変長の数値リストを作成します。そのリストに従い、週を追加しながら formatDate で文字列を作成します。
"." .repeat(db2+1) .split("") .map( sd.dateAdd(index, "weeks") .formatDate("GGGG-WW") ) )
オートメーションの作成
最後に Formula で計算した週文字列をマルチセレクトに設定します。オートメーションは以下のように作成しました。週文字列が変化するのは、日付を編集した時なのでトリガーはそれにします。

自分の値は当然ながら先ほど作成した weeks Formula です。

動作確認
朝の時点でこのようなポストをしました。動作結果を示しています。
海外のアンバサダーさんからの相談で、週ごとに動いているタスクをチャート化したいとのことでした。チャートは開始日しか見てくれないので、数式で計算して、オートメーションでマルチセレクトにコピー、そしてチャートに描画しました。明日のブログネタにします。#Notion #NotionFormula pic.twitter.com/F2ZAR89JQn
— hkob|Notion Ambassador (@hkob) 2024年12月1日
また、帰宅後に動画も作成してみました。チャートが変化する様子がみられます。
朝、動画を撮っている時間がなかったので、今作成しました。こんな感じで日付範囲に相当する週のタスク数がカウントされます。#Notion #NotionFormula pic.twitter.com/M8zWTLZJmM
— hkob|Notion Ambassador (@hkob) 2024年12月2日
おわりに
今朝、アンバサダー Slack で質問を見つけたので、急ぎ対応して作成してみました。作ってみると意外と考慮する事項が多く、Formula の学習にちょうどいいと思って記事化しています。こちらにテンプレートを用意したので、是非試してみてください。