見出し画像

数式プロパティで少し複雑な数式を書く時の考え方


これは「Notion 大学 Advent Calendar 2023」12/24の記事です。

昨日は管理の山田さん(@kanri_no_yamada)が『【参加型】クイズ!Notionの1年後【簡単アプリ作成】』という記事を書かれていました。

みんなでNotionの1年後を予測してみましょう!!


Notion コンサルタントのshogo(@shogoNotion1107)です。
個人事業主、中小企業様の業務改善のお手伝いをしております。

Notion大学とは、NotionアンバサダーのTsuburayaさん(@___35d)が運営している日本一大きなNotionが学べるコミニティーとなります。

私は、Notion大学に2023年4月に入学しました。
Notionを学ぶためにYoutubeを観ていて、内容・声・話し方が刺さりすぎて、ずっと観ていましたw

Notion大学内では、イベントの運営のサポートなども行なっています。
イベントについて秋人さんが書かれていたので、ご参考にしてみてください

Notion大学ではDiscordを使ってコミュニケーションを取っています。
このDiscord内でよく見かけるのは数式が苦手、わからない、手を出せていないなどです。
数式は確かに少しハードルが高いですが、使ってみれば意外とシンプルな部分もあります。簡単なものから使ってみると、Notionの幅がすごく広がると思います。


前回、『3年間育ててきたNotionページを大改修したお話』を書かせていただきました。このときに、formula2.0へ対応させるために、数式を作り直しました。
そのときに少し複雑な数式を作る際に、私が取っていた方法を書きたいと思います(特殊な方法ではないですw)

その方法とは、できるだけ小分けに数式を作って、後から組み合わせていくという方法です。
感覚的にはNotionのブロックを組み合わせていく感覚と同じです

【注意】動いてくれればいい精神で数式を作っているため、最適解かは不明です。

日付の期間が今日を含んでいたら✅をつける
数式を作ってみる

なんで、こんなの作るのかと言いますと、今日を含み日をフィルターをかけるときにフィルター機能だけだとうまくいかないからです。

◉完成品の数式

if( 
(formatDate(dateStart(Date), "YYYY/MM/DD") <= formatDate(now(), "YYYY/MM/DD")) 
and 
(formatDate(dateEnd(Date), "YYYY/MM/DD") >= formatDate(now(), "YYYY/MM/DD")),
 "✅", "")

日付(Date)が今日または今日を含む期間のものに✅を入れる数式を作る場合

STEP 1  プロパティとダミーデータを準備する

必要なプロパティとダミーデータを準備します
最初に何が必要かを考えなくても、作業しながら追加していくスタイルで大丈夫です。

必要なプロパティとダミーデータの事前準備

STEP 2  Dateが今日と同じかを判定する式を作る

ここから数式を作っていきます
まず初めに、Dateの日付が今日の日付と同じなのかを判定するための、数式を作っていきます。

Date==now()

これだとうまくいかない
日付は年月日時分秒の情報を持っています。
全てが一致しない限り等しいとはならないため、年月日のみの情報だけにする作業が必要になってきます
方法としては、formatDate関数を使って、 "YYYY/MM/DD"の形式に書き換えます。
まず初めに、Dateの日付を"YYYY/MM/DD"の形式にしてみましょう。このときに、最初から完成形を作ろうとすると、迷ってしまう可能性があるため、新しく数式プロパティを作って、その中にformatDate(Date, "YYYY/MM/DD")を作り、実際に表示せれるのかを確認します。上手くいっていたら、同様にformatDate(now(), "YYYY/MM/DD")が表示されるのかを確認して、二つの表示が同じことを確認したのちに、==で二つをつなぎ合わせてみます。

細かく小分けにして確認

確認が完了して、思っている動作をしたら、1箇所にまとめる。formatDate(Date, "YYYY/MM/DD")==formatDate(now(), "YYYY/MM/DD")

この要領で作っていけば、うまいこといけていない部分がわかりやすくなります。

STEP 3  開始日と終了日が設定されている場合の対応

開始日〜終了日の期間に今日の日が含まれているというのは
開始日が今日よりも前の日付でかつ終了日が今日よりも後であれば、今日が含まれていることになる。

開始日<今日 かつ 今日<終了時間
これを数式にすると

(formatDate(dateStart(Date), "YYYY/MM/DD") < formatDate(now(), "YYYY/MM/DD")) and (formatDate(dateEnd(Date), "YYYY/MM/DD") > formatDate(now(), "YYYY/MM/DD"))

STEP 4  STEP 2とSTEP  3で作った数式を合わせてみる

STEP  3でカバーできない部分は、開始日または終了日が今日である場合を含める必要があります。これはSTEP  2で作ったものとなるので、STEP 2とSTEP  3で作った数式を合わせます。
開始日が今日以前かつ終了日が今日以降となり、
最終的に以下の数式が完成する

(formatDate(dateStart(Date), "YYYY/MM/DD") <= formatDate(now(), "YYYY/MM/DD")) and (formatDate(dateEnd(Date), "YYYY/MM/DD") >= formatDate(now(), "YYYY/MM/DD"))

STEP  5最後にif関数を用いて完成

if関数を用いて、今日を含む場合は✅を記入して、それ以外の場合は、空白にする
if(判定式,"✅","")
となる。
判定式はSTEP  4で作ったものになります
最終的に全てを1箇所にまとめると以下の数式が完成します。

if( 
(formatDate(dateStart(Date), "YYYY/MM/DD") <= formatDate(now(), "YYYY/MM/DD")) 
and 
(formatDate(dateEnd(Date), "YYYY/MM/DD") >= formatDate(now(), "YYYY/MM/DD")),
 "✅", "")

細かく分けて、くっつけていくことで、数式を書く難易度はグッと下がります。
一気に書いてしまう場合は、エラーが発生している状況がわかりづらいが、1つ1つ小分けにすることで、1数式ごとに結果を確認することができるので、エラーの原因がすぐわかるのも魅力的です。

少しでも、数式を使ってみようかなと思って頂けた方は、❤️を送っていただけると嬉しいです

数式を使えるようになればNotionを今よりももっと効率的に使うことができるようになります。


明日は「Notion 大学 Advent Calendar 2023」の最終日となります
12月25日の担当はUenoさんです

この記事が気に入ったらサポートをしてみませんか?