notebook

都内でWEB系エンジニアやってます。

NotionのFomulaで日付型と未入力を分岐で扱えるようにする

NotionのFomulaを使って特定の条件のときは日付、それ以外のときは未入力というのをやりたかったがさっとやろうとしたらエラーですんなり定義できなかった

具体的には下記のように日付型でTerm、FomulaでCompletedAtというカラムを用意

Termがstart,end両方そろっている場合かつ1日以上経っている場合はendの日付をセットする、それ以外の場合は未入力ということをしたかった

f:id:swfz:20211112000053p:plain

最初下記のように式を書いた

if(dateBetween(end(prop("Term")), start(prop("Term")), "days") > 0, end(prop("Term")), "")

エラー

が、うまくいきませんでした

  • 三項演算子
Each branch of a condition must be of the same type:
  • if
Type mismatch "" is not a Date.

要は真と偽のどちらの場合でも型をあわせないといけないよう

end(prop("Term"))formatDateで囲って文字列として扱えば両方文字列となるので未入力も表現できるが、Date型になっていないとグループ化を用いて日付範囲でグループ化できないので不便

なのでなんとかDate型のままにしたい

ということで調べたらあった

Need help with IF operators : Notion

www.reddit.com

fromTimestamp(toNumber("")) とすることで未入力でもDate型として扱うことができる

toNumber("")は数値型の戻り値だが見た目上は未入力として扱うことができる

それを用いてfromTimestampに渡してあげることでDate型でも未入力という状態を維持できる

解決

  • 三項演算子
dateBetween(end(prop("Term")), start(prop("Term")), "days") > 0 ? end(prop("Term")) : fromTimestamp(toNumber(""))
  • if
if(dateBetween(end(prop("Term")), start(prop("Term")), "days") > 0, end(prop("Term")), fromTimestamp(toNumber("")))

これで冒頭のスクショの感じが再現できました

使い所それなりにありそうなのでメモとして残しておきます