0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「Notion」のDBのフィルターを、別DBからチェックボックスで可変的に設定する

Posted at

目次

概要
まずは結果
使用データベース
数式の内容
おわりに
参考

概要

Notionを使い始めて、「save to notion」という神拡張機能を見つけて使ってみたのですが、記事を保存しても過去の記事を見返す際に探すのが大変だなぁと思いました。

それぞれの記事にプロパティで、「Notion」や「プログラミング」など付けても、毎回フィルタで探したいプロパティを設定するのはナンセンスだと感じたので、今回は別のデータベースにプロパティと同様の名前のページを作成し、そのチェックボックスを押すことで、フィルタと同じ機能を実装しようとしました。

こういった記事を書くのは初めてなので、見にくかったら申し訳ないです。

まずは結果

notionGIF.gif
※画質悪くてすいません

このように、左側にあるデータベース(以下、検索用DB)のチェックボックスの内容でフィルターをかけるようになっています。

今回は、プロパティAとBの両方を満たすフィルターではなく、
AもしくはBどちらかを満たすフィルターになっています。

使用データベース

DB 内容
save to notion DB 拡張機能の保存先(マルチセレクトプロパティ必須)
↑↓ リレーション
master DB 仲介用
↑↓ リレーション
検索用DB チェックボックスのやつ(チェックボックス必須)

今回は上記のような構成でDBを作成しました。
直接DBを繋げるのではなく、master DBを仲介することで、DBをさらに増やすことになっても新しいDBをmaster DBとリレーションすることで、今まであったものに操作を加える必要がないから便利です。

すべてのDBがmaster DBを仲介するので、テンプレートの設定が必須
スクリーンショット 2024-09-27 222112.png

master DBは各DBと相互リレーションする
スクリーンショット 2024-09-27 230420.png

参考までに自分のsave to notion DB検索用DB
スクリーンショット 2024-09-27 230702.png
スクリーンショット 2024-09-27 230838.png
※チェックボックスのプロパティの名前は設定し終わってから消さないと設定できないです

数式の内容

実際にフィルターをかけている数式プロパティの内容は以下の通りです。

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に追加する名前は一言一句あってないと、うまく動かないのでコピペ推奨です。


設定が終わったら、追加した数式プロパティでフィルターをかけることで、可変的なフィルターの完成です。

スクリーンショット 2024-09-27 232121.png

おわりに

今日思い立って、Qiita登録して、Githubにpushするだけで記事を投稿する設定をして・・・
と、色々手間取って3時間くらいしてから記事を書き始めて、さらに書き方なんかも調べながらだったので、すごく分かりにくかったと思いますが、また気が向いたら修正しようと思います。

参考

・master DBというアイディアを使わせてもらいました

・書き方関係

・GIFの作り方

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?