NotionのFomulaを使って特定の条件のときは日付、それ以外のときは未入力というのをやりたかったがさっとやろうとしたらエラーですんなり定義できなかった
具体的には下記のように日付型でTerm
、FomulaでCompletedAt
というカラムを用意
Termがstart,end両方そろっている場合かつ1日以上経っている場合はendの日付をセットする、それ以外の場合は未入力ということをしたかった
最初下記のように式を書いた
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
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("")))
これで冒頭のスクショの感じが再現できました
使い所それなりにありそうなのでメモとして残しておきます