WBS with Notion
Notionのサブアイテム機能を使うことで単一のデータベースのみでWBS(Work Breakdown Structure)を構築できます. ここでは、次のようなWBSの構築方法を解説します.
ここでは、英語版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
にならないので手動で行う必要があります.それを自動化することも可能かもしれませんが、ご自身で調べてみてください.
今回のようにロールアップを使って親、または子のプロパティを参照する場合、それがさらにその親、または子のプロパティを参照するといった循環参照をしてしまうとパフォーマンスに大きな影響があるため、制限されているとサポートから聞きました.階層が深くなってしまうとロールアップした値が異常な値になるため、階層レベルは3~4以下にしておくのが無難です.
今 回作成したWBSのテンプレートを公開しています.詳しくはテンプレートにある「はじめにお読みください」を参照してください.
WBS | mebiusbox.notion.siteNotion用 WBS (Work Breakdown Structure)のテンプレートです