前回はNotionを使って、Webページ、ToDoリスト、ガントチャートを作ってみました。今回はテーブルを使った集計と進捗率を視覚的に表示する進捗率グラフ(プログレスバー)を作ってみることにします。
テーブルを使った割合の計算と、計算結果を文字列によるグラフで表示。
Notionのテーブルでは、プロパティがカラム(列)として扱われます。そして、関数を用いることにより、プロパティ間の計算が可能になってます。数値計算、文字列計算の両方が可能です。
プロパティ間で計算を行うには、関数タイプの新しいプロパティを追加し、プロパティ名以外のセルをクリックしてウィンドウを開き、数式記入欄に数式やコードを記述します。
計算に使用するプロパティを指定する場合は、
prop("プロパティ名")
のように記述します。
プロパティ1とプロパティ2で四則計算を行う場合は、次のようになります。
prop("プロパティ1") + prop("プロパティ2") //プロパティ1+プロパティ2
prop("プロパティ1") - prop("プロパティ2") //プロパティ1-プロパティ2
prop("プロパティ1") * prop("プロパティ2") //プロパティ1×プロパティ2
prop("プロパティ1") / prop("プロパティ2") //プロパティ1÷プロパティ2
テーブルを用いた集計の例として、今回はプリコネRのイベント消化を題材にしてみます。
プリコネRの期間限定イベントを消化するにあたっての小目標(イベントクエストを進める、討伐証を集めるなど)をピックアップして、テーブルの「小目標」プロパティに書き込んでいきます。小目標の書き込みが完了したら、「目標値」と「実績値」の2つの数値タイプのプロパティを追加します。
目標値…小目標を達成するための条件を数値化した指標で表したもの。
実績値…小目標の達成状況を数値化した指標で表したもの。
たとえば、小目標の1つ「イベントクエスト(Normal)を完了させる」については、クエスト数が15個あるため、目標値は15となります。ここで、実際にクリアしたクエスト数が8個だった場合は、実績値が8となります。
目標値と実績値をテーブルに記入したら、「進捗率(%)」という名前で関数タイプのプロパティを追加。このプロパティの数式記入欄(赤枠で囲んでます)に次の数式を記述します。
prop("実績値") / prop("目標値") * 100
数式を記入後に「完了」ボタンを押すと、目標値に対する実績値の割合を%で表した数値が、進捗率(%)のプロパティに表示されます。
次は、集計結果を文字列グラフで表示します。
文字列グラフの表示には、文字列の全部または一部を切り出して表示させるslice関数を使用します。
slice関数は、slice(a, b, c)の形式で記述します。aには、文字列を設定。bには、切り出しの開始位置(最初から切り出す場合は0)を設定。cには、切り出しの終了位置を設定します。すると、aに指定された文字列から「b番目の文字の後ろ~c番目の文字」を切り出した部分文字列がプロパティに表示されます。
例えば、
slice("ABCDEFGH", 1, 5)
の場合は、「BCDE」がプロパティに表示されることになります。
10個のひし形で割合を表示(0%の場合は10個全てが◇、10%増加するごとに◆が1つづつ増加、100%の場合は10個全て◆)する文字列による進捗グラフを作ってみます。
「進捗グラフ」という名前で、関数タイプのプロパティを追加し、ウィンドウの数式記入欄(赤枠で囲んでます)に、次の数式(というよりコード)を記入します。
slice("◆◆◆◆◆◆◆◆◆◆", 0, floor(prop("進捗率(%)") / 10)) + slice("◇◇◇◇◇◇◇◇◇◇", 0, 10 - floor(prop("進捗率(%)") / 10))
上記のコードの場合は、「進捗グラフ」プロパティに、「進捗率(%)」の値の1/10(端数切捨て)分だけ◆を表示させ、10から◆を表示させた数を引いた残りについて◇を表示させます。
進捗グラフが表示されたプロパティが追加されたテーブルは、次のようになります。
ガントチャートに進捗グラフ(プログレスバー)を表示させる。
次はガントチャートに進捗グラフ(プログレスバー)を表示させてみます。なお、ガントチャートに表示させる進捗グラフについての進捗率は、
達成済サブタスクの項目数/達成すべきサブタスクの項目数
で計算したものになります。
まず、メインタスクについてのガントチャートをタイムラインで作成します。今回はプリコネRの期間限定イベント「絆つないで。こころ、結んで」の消化をメインタスクにします。「絆つないで。こころ、結んで」についての日程などをタイムラインに書き込んでガントチャートにします。
メインタスクのガントチャートを作成したら、次は新たにテーブルを作成し、メインタスクを達成するためのサブタスクをの最初プロパティ(プロパティ名は「小目標」)に記入していきます。
今回はプリコネRのイベント消化なので、「前編ストーリークエスト(Normal)」や「討伐証を1,000個集める」などがサブタスクになります。進捗率は達成したサブタスクの割合になるため、手間を要すると思われるサブタスクについては、適切な大きさになるように分割します。
例)「討伐証を5,000個集める」の場合は、「討伐証を累計1,000個集める、討伐証を累計2,000個集める、討伐証を累計3,000個集める討伐証を累計4,000個集める、討伐証を累計5,000個集める」のように分割。
全てのサブタスクを最初のカラムに書き込んだら、セレクトタイプのプロパティ(プロパティ名は「実行状態」)を追加します。そして、未着手のサブタスクには「未着手」、途中のサブタスクには「実行中」、達成済のサブタスクには「完了」という名前のステータスを設定します。
小目標と実行状態を書き込んだテーブルは、次のようになります。
次に、関数タイプのプロパティ(プロパティ名は「完了チェック」)を追加し、ウィンドウの数式記入欄に次のコードを記述します。
(prop("実行状態") == "完了") ? true : false
このコードににより、「実行状態」プロパティの各セルの内容が「完了」の場合に、「完了チェック」プロパティの同じ行のセルにチェックが入るようになります。
続いて、リレーションタイプの新しいカラム(プロパティ名は「メインタスク」)を追加します。各行のセルをクリックしてウィンドウを開き、タイムラインに記載されているメインタスクの中から、サブタスクと関連付けさせるメインタスクを選択します。今回は「絆つないで。こころ、結んで」のメインタスクしかないので、そのメインタスクを全部の小目標について選択していきます。
テーブルにある全てのサブタスクをメインタスクと関連付けたら、テーブルでの作業は完了となります。
ガントチャートを作成したタイムラインに戻ったら、メインタスクのウィンドウを開き、ロールアップタイプのプロパティ(プロパティ名は「進捗率」)を追加します。そして、プロパティのウィンドウを開き、「リレーション」はサブタスクのテーブル名(今回は「プリコネR小目標とのリレーション」となってます)、「プロパティ」は集計したいサブタスクのプロパティ名(今回は「完了チェック」になってます)、「計算」は「チェックありの割合」を、それぞれ選択します。
すると、ガントチャートの「進捗率」のプロパティに、「完了チェック」プロパティのチェックが入っているセルの割合が計算された結果が数値(%)で表示されます。
進捗率の計算が終わったら、その結果をもとに進捗率グラフ(プログレスバー)をガントチャートに表示させます。新しく関数形式のプロパティを追加し、数式欄に次のコードを記述します。
slice("◆◆◆◆◆◆◆◆◆◆", 0, floor(prop("進捗率") * 10)) + slice("◇◇◇◇◇◇◇◇◇◇", 0, 10 - floor(prop("小目標達成率") * 10))
なお、ロールアップで計算した「チェックありの割合」の数値は%で表示されますが、内部的には小数(60%の場合は、0.6)になっています。このため、10%増加で◆を1つ増やす場合は、「進捗率」の数値を×10する必要があります。
これにより、進捗率の結果から生成した文字列グラフ(進捗率グラフ)がガントチャートに表示されました。
進捗率(小目標達成率)を計算し、その結果を使ってガントチャートに進捗率グラフ(プログレスバー)を表示させる手順は、これで完了です。簡単なコードを使ったり、複数のページを組み合わせた処理ができるようになったことで、1つの大きな山を越えた感じになります。Notionには、まだまだ色々なツールが埋もれているので、これらのツールも少しづつ使いこなせるようになっていきたいところです。