下記ページを参照しながら、notionで進捗管理をする仕組みを作ってみました。
バージョンアップで変わっている箇所がありましたので、備忘録として記載します。

▼NotionでWBSを管理する
https://mebiusbox.github.io/blog/2023/01/17/notion-wbs

データベースの作成

まず、データベースを作ります。
プロパティは下記のとおり。

  • タイトル/タイトル
  • 進捗(親)/関数
  • 進捗(子)/セレクト
    • 自動
    • %で進捗をセレクトします
      • 0%
      • 25%
      • 50%
      • 75%
      • 100%
      • ※刻み具合はお好みで調整してください

ここまでつくったら、サブアイテムの設定をします。

データベースの設定(…ボタン)からカスタマイズ>サブアイテム>サブアイテムをオン、で有効化できます。

プロパティをさらに設定します。

  • _進捗N/関数
  • _進捗R/ロールアップ
    • リレーションにサブタスクを設定
    • プロパティに_進捗Nを設定
    • 計算は、この時点ではオリジナルを表示にしてください

進捗(子)の値を集計して進捗(親)に反映する処理

_進捗Nは、進捗(子)で選んだパーセンテージを数値に変換します。

まず、数値として扱うために、_進捗N関数を編集1と入力します。
すると、数値の形式表示方法を選択できるようになります。

  • 数値の形式:数値
  • 表示形式:バー(元サイトではリング。どっちでも好きな方を)

_進捗Nが数値に設定されると、ロールアップしている_進捗R計算(↑でオリジナルを表示にしたところ)に項目が追加されるので、合計を設定します。表示形式数値にしておきます。

_進捗Nの関数

if(prop("進捗(子)") == "自動", floor(prop("_進捗R") / max(1, length(replaceAll(prop("サブアイテム") + ",", "[^,]", "")))), toNumber(substring(prop("進捗(子)"), 0, -1)))

元サイトから変えているのは後半のsubstring関数です。

元サイトはslice(prop("進捗(子)"), 0, -1)としているのですが、関数のアップデートで、slice関数は処理が変わりました。詳しくは下記参照。

▼関数2.0(Formulas 2.0)を徹底解説
https://temp.co.jp/blog/2023-09-10-formula20#関数名は同じで機能が変更された関数

進捗(親)の関数

if(length(prop("サブアイテム")) > 0, floor(prop("_進捗R") / max(1, length(replaceAll(prop("サブアイテム") + ",", "[^,]", "")))), prop("_進捗N")) / 100

完成

_進捗N, _進捗Rは非表示にして、見た目を整えたら完成です。

使い方としては、親アイテムの進捗(子)自動に設定。
子アイテムの進捗(子)を設定してやると、親の進捗を計算して出してくれます。