Notionで成績付け

Notionで成績付け

参照のバグが発生していた

 
前回の記事にもありましたが、プロトアウトスタジオの宿題では主に2パターンの宿題があり、”実装付き企画”と”最終制作企画”に大別できます。
 
宿題の採点が行われますが
  • 宿題のDB
  • 採点のDB
で分けて管理しています。
 
また、学生の成績が反映されるデータベースもあります。
 
に、各学生の宿題提出数をロールアップで持ってきていましたが、宿題提出数がおかしい値になっていました。
 
6、5、9となっているけど宿題の提出数は本来同じ値になってるはず。
 

同じ人が間違えてデータを複数作ってしまっていた

 
…という模様です。
仕様的に慣れてない人が間違ったデータを追加してしまうのはあるあるです。
 
宿題はステータスが以下のように管理されていて
  • 提出前
  • 提出済み
  • FB済み
  • Check&Action済み
Check&Action済みのステータスまでいけば完了となる仕様になっています。
 
この仕様に沿って作ると、宿題のステータスプロパティが になっているものだけカウントすると良さそうです。
 

ロールアップで特定プロパティがどうだったら〜〜といった条件追加できない

 
ただ、通常のロールアップだと、特定プロパティがどうだったら〜〜といった条件をもとにデータを引っ張ってくることができません。
 
条件っぽいのは一意の値の数をカウントなど

1. mapの中でifを使う

ちょっと悩みましたが、 ”`リレーション元DB`.map(ここでif文)”という組み方でいけました。
 
前回記事でも、mapとcurrentを使うことでリレーション元のDBの値を取ることができてましたがその応用です。
 
 
ステータスが”Check&Action完了”になっているものは1で、それ以外は0とする
 
これを最後にsum()で計算してあげると、該当する宿題だけでカウントができました。
 
 
これで数字がちゃんと表示されます。
 
宿題完了数というプロパティ名にしておきました。
 

提出数のエラー検知 - プロパティの合計や平均

間違ってカードを追加してしまうパターンはあるのですが、少ない場合は注意が必要です。
 
この場合3行目の人はOKですが、4行目の人は何かがおかしいです。
問題ない人は6件提出している状態です。
 
プロパティの平均値を取得して多いか少ないかでアラート出すようにしてみます。
 
列合計って取れるのかなと思ったら取れるみたいです。やはりmapが強い。
 
参考記事だとこう書いてるのでまねします。
 
※Notion内での通常のif文
 
こんな感じ
 

ロールアップの場合はconteins()を使う

 
ChatGPTに教えてもらいましたが、ロールアップの場合は と書いてもうまくいかないらしく を利用するのが良いみたいです。
 
今回は宿題DBから採点DBにロールアップで取ってきている値を使っていたのでうまくいかなかった模様です。
 
これで最終制作企画の宿題の時の合計を出しつつ、そうじゃない場合は0にするなどハンドリングができました。
 
こんな感じ
 

2. ロールアップされた値の足し算

次に、ロールアップされた値の計算です。
採点した人の点数が3,4と表示されています。3+4=7をFB担当者採点小計に入れたいです。
 
はロールアップになっているのでそのまま足し算すると、以下のようになってしまいます。0,0,3,4て……
 
+ の結果
 

sum()を使う

 
sum( )+ sum( )という形式にするとうまく計算できました。
 
 
仕様はイマイチわかってないですが、sum()関数を挟むことで計算しつつ、数値として変換してくれる模様です。
 
 
ちなみにsum( + )だとダメみたいですね。
sum()を使っているけど同じやり方で別の四則演算もいける気はします。

別解: mapでリレーションから直で取る。ロールアップ不使用。

 
ちゃんと仕様理解してないけど、mapとcurrentを使うことで値を取得できました。
 
mapを使うことで って書いてる部分はリレーションプロパティとなっていて、別のDB(採点DB)を参照しています。
 
ちゃんと理解してないけどおそらく挙動的に”.map(current. )”みたいな書き方をすることでロールアッププロパティを使わずに直接計算もできそうでした。
 
今まで一度ロールアッププロパティに一旦値を置いてから計算してたのでめちゃ便利。。
 
結果はロールアッププロパティをsum()した時と同じですね。

最後に

NotionのリレーションとFormulaを使った計算の仕方のTipsをまとめました。
 
Arrayやmapなど配列的な概念はプログラムが分かってないと厳しそうな気もしますが、ChatGPTに聞くと教えてくれるのでほぼ何もいじってません。
 
便利な世の中になりましたね。。。
 
こんな感じで運営側が率先して生成AIなどを駆使して運営しています。
 
プロトアウトスタジオぜひ遊びに来てくださいませ。
 
GPT-4oに聞いてる様子。エラーが出てもスクショ撮って送ると教えてくれます。