Skip to main content

WBS with Notion

· 8 min read
mebiusbox
engineer

Notionのサブアイテム機能を使うことで単一のデータベースのみでWBS(Work Breakdown Structure)を構築できます. ここでは、次のようなWBSの構築方法を解説します.

caution

ここでは、英語版Notionで解説しています.また、CSSで見た目をカスタマイズしているものをスクショしています.ご了承ください.

データベースの作成

まず、データベースを作成します.プロパティは次のようにします:

  • Task: タイトル(Title)
  • 進捗(子): セレクト(Select)
  • 進捗(親): 関数(Formula)

進捗(子)のセレクト項目は次のようにしました.

  • 0% .. 100% (10%刻み)
  • 自動

進捗(親)の関数は後で解説します.

この時点で次のようなプロパティ構成になっています.

サブアイテムの設定

データベースの設定(・・・ボタン)からサブアイテム(Sub-items)の設定を選択します.

設定はデフォルトのままで問題ありません.

次のようなプロパティの構成になっているはずです.

進捗率の計算

子の進捗率を計算して親の進捗率として表示します.そのためにプロパティを2つ作成します. 1つは_進捗Nで関数(Formula)タイプです.先頭の_は計算用を表しています.もう1つは_進捗Rとします.こちらはロールアップ(Rollup)で、リレーション(Relation)にSub-itemを設定します.

次にプロパティ(Property)に_進捗Nを設定します.

計算(Calculate)はオリジナルを表示(Show original)に設定しておきます.

この時点で、プロパティは次のようになっています.

適当にタスクを追加して、タスクの親子関係を設定します.ここで重要なのは、子を持つ親タスクの進捗(子)自動に設定しておいてください.

子タスクの進捗率

_進捗Nは子タスクの進捗(子)のセレクト値を数値に変換します.まず、_進捗Nを数値として扱いたいので、関数(Formula)で1と設定します.

これで、このプロパティが数値として扱われます.数値として扱われると、関数プロパティのオプションに数値の形式(Number format)表示形式(Show as)が追加されます.

数値の形式(Number format)を数値(Number)にし、表示形式(Show as)をリング(Ring)に設定します.

次に、_進捗Nを数値に設定すると、そのプロパティをロールアップしている_進捗Rの計算(Calculate)に項目が追加されますので、合計(Sum)を設定します.そうすると、表示形式(Show as)が選べるようになりますが数値(Number)のままにしておきます.

これで、_進捗N_進捗Rがともに数値となりました.次に_進捗Nの関数を設定します.関数は次の通りです.

if(prop("進捗(子)") == "自動", floor(prop("_進捗R") / max(1, length(replaceAll(prop("Sub-item") + ",", "[^,]", "")))), toNumber(slice(prop("進捗(子)"), 0, -1)))

何をやっているかを説明すると、そのタスクが親タスク(進捗(子)自動を設定しているタスク)であれば、_進捗R(そのタスクの子タスクすべての進捗率の合計)から子タスクの数で割って進捗率を計算しています.また、子タスクであれば、進捗(子)のセレクト値を数値に変換しています.

親タスクの進捗率

あとは、進捗(親)の計算で進捗率を計算します.進捗(親)の関数に以下を設定します.

if(length(prop("Sub-item")) > 0, floor(prop("_進捗R") / max(1, length(replaceAll(prop("Sub-item") + ",", "[^,]", "")))), prop("_進捗N")) / 100

数値の形式はパーセント(Percent)、表示形式はリング(Ring)に設定します.

これで親タスクや子タスクを追加すると自動で計算されるようになります.

最後に不要なプロパティを非表示にすることで完成です.

ステータスプロパティを使った方法

これまでの方法では子タスクの進捗率を計算して親タスクの進捗率を算出しました. もし、そこまで正確な値を求める必要はなく、全体のタスクの進捗が終わったかどうかだけ調べて進捗率に反映させたい場合、ステータスプロパティを使って数式を使わずとも計算できます.

まず、データベースを作成します.

  • Task: タイトル(Title)
  • 進捗(子): ステータス(Status)
  • 進捗(親): ロールアップ(Rollup)

次に、サブアイテムの設定をします.設定はデフォルトのままで問題ありません.

適当にタスクを追加して、タスクの親子関係を設定します.

次に、進捗(親)のロールアップでリレーション(Relation)を Sub-item 、プロパティ(Property)を進捗(子)、計算(Calculate)をグループごとの割合(Percent per group) → Completeに設定します.

そうすると、表示形式(Show as)を設定できるようになりますので、リング(Ring)を設定します.

これで完成です.

ただし、この方法では子タスクがすべて終わっても、その親タスクは自動で Done にならないので手動で行う必要があります.それを自動化することも可能かもしれませんが、ご自身で調べてみてください.

caution

今回のようにロールアップを使って親、または子のプロパティを参照する場合、それがさらにその親、または子のプロパティを参照するといった循環参照をしてしまうとパフォーマンスに大きな影響があるため、制限されているとサポートから聞きました.階層が深くなってしまうとロールアップした値が異常な値になるため、階層レベルは3~4以下にしておくのが無難です.

今回作成したWBSのテンプレートを公開しています.詳しくはテンプレートにある「はじめにお読みください」を参照してください.

WBS | mebiusbox.notion.siteNotion用 WBS (Work Breakdown Structure)のテンプレートです