目次
概要
まずは結果
使用データベース
数式の内容
おわりに
参考
概要
Notionを使い始めて、「save to notion」という神拡張機能を見つけて使ってみたのですが、記事を保存しても過去の記事を見返す際に探すのが大変だなぁと思いました。
それぞれの記事にプロパティで、「Notion」や「プログラミング」など付けても、毎回フィルタで探したいプロパティを設定するのはナンセンスだと感じたので、今回は別のデータベースにプロパティと同様の名前のページを作成し、そのチェックボックスを押すことで、フィルタと同じ機能を実装しようとしました。
こういった記事を書くのは初めてなので、見にくかったら申し訳ないです。
まずは結果
このように、左側にあるデータベース(以下、検索用DB)のチェックボックスの内容でフィルターをかけるようになっています。
今回は、プロパティAとBの両方を満たすフィルターではなく、
AもしくはBどちらかを満たすフィルターになっています。
使用データベース
DB | 内容 |
---|---|
save to notion DB | 拡張機能の保存先(マルチセレクトプロパティ必須) |
↑↓ | リレーション |
master DB | 仲介用 |
↑↓ | リレーション |
検索用DB | チェックボックスのやつ(チェックボックス必須) |
今回は上記のような構成でDBを作成しました。
直接DBを繋げるのではなく、master DBを仲介することで、DBをさらに増やすことになっても新しいDBをmaster DBとリレーションすることで、今まであったものに操作を加える必要がないから便利です。
数式の内容
実際にフィルターをかけている数式プロパティの内容は以下の通りです。
lets(
tag, prop("master DB").at(0).prop("検索用DB").filter(current.prop("/*チェックボックス*/")).map(current.prop("名前")),
select, prop("マルチセレクト"),
or(
includes(tag, "== すべて =="),
and(includes(tag, "== 既読 =="), prop("状態") == "既読"),
and(includes(tag, "== 進行中 =="), prop("状態") == "進行中"),
and(includes(tag, "== 未読 =="), prop("状態") == "未読"),
includes(select, tag.at(0)),
includes(select, tag.at(1)),
includes(select, tag.at(2))
)
)
この数式プロパティはsave to notion DBに追加します。
最初の行は、
save to notion DB の、
master DBリレーション から、
master にアクセスし、
検索用DBリレーション にアクセスし、
チェックボックス がオンの項目をフィルターし、
名前プロパティ をテキスト形式に変換したリストを、
tag という変数に格納しています。
つまり、「Notion」と「YouTube」にチェックが入っている場合、tagには「Notion,YouTube」という内容のリストが格納されます。
2行目は、selectという変数にページごとに設定されたプロパティが格納されます。
or関数の最後の3行は、selectのリストにtagで指定した内容があるか見ています。includes関数の第2引数はリストに対応してないので、at関数でごり押ししています。
tagを4つ以上指定する場合は、at(3)にしたものを追加します。
or関数の最初の4行はselectプロパティの指定ではなく、「状態」というどこまで読んだかを指定するプロパティを設定しています。(※なくてもいい)
save to notion DBで指定したマルチセレクトのプロパティと検索用DBに追加する名前は一言一句あってないと、うまく動かないのでコピペ推奨です。
設定が終わったら、追加した数式プロパティでフィルターをかけることで、可変的なフィルターの完成です。
おわりに
今日思い立って、Qiita登録して、Githubにpushするだけで記事を投稿する設定をして・・・
と、色々手間取って3時間くらいしてから記事を書き始めて、さらに書き方なんかも調べながらだったので、すごく分かりにくかったと思いますが、また気が向いたら修正しようと思います。
参考
・master DBというアイディアを使わせてもらいました
・書き方関係
・GIFの作り方