数式2.0: Notion数式の改良点と新機能、および既存環境への影響
Notionの数式を使用したことがある方は、「どこが変わったのか」と疑問に思うかもしれません。このガイドでは、新しくなったことと、それにより数式を使いこなすパワーユーザーにどんな影響があるのかを説明します。
- 数式の新機能
- 新機能でできること
- 数式を更新して、データのアウトプットをリッチに
- プロパティからワークスペースレベルの情報を取得
- letで独自の変数を作成
- ロールアップを使わずにリレーションで接続されたデータベースを参照
- 既存機能への変更点
数式の新機能
数式のエクスペリエンスが改善され、(1) 数式の記述が容易になり、(2) 数式のアウトプットに含められるプロパティの種類が増え、(3) 数式言語がより具体的なニーズを満たすことができるようになりました。
今使っている数式はどうなりますか?
このガイドでは、数式の新機能と、それが現在使用中の数式にどのように影響するかについて説明します。数式を使うのが全くはじめての方は、 データベースの機能を拡張するNotion数式の記述方法に関するビギナー向けガイドをご参照いただくのがおすすめです。
数式2.0で新しくなった機能は以下のとおりです。
数式の作成・編集がより簡単に: エディタ内で数式を複数行で記述できるようになりました!タブやコメントも使えます。エラーについても、より対応方法がわかりやすくなっています。数式を記述すると、複数行の編集をサポートする拡張された編集ボックスが表示され、長い数式を簡単に表示、編集できます。さらに、データ型のチェックやエラーを直接編集ボックス内で強調表示するようになったため、構文を簡単に修正して数式が機能することを確認できます。
リッチなアウトプットが可能に: 数式のアウトプットは従来、テキスト、数値、チェックボックス(ブール値)のみをサポートしていました。今回のアップデートにより、新たにページ、日付、ユーザー、リストの表示もサポートされるようになりました。
より多くの情報に直接アクセス: リレーションで接続されたデータベースのプロパティや、メンバーの名前にメールアドレスといった情報にアクセスするなど、数式がよりスマートになりました。
新しい数式言語
新機能でできること
数式を更新して、データのアウトプットをリッチに
従来の数式では、さまざまなデータが文字列に変換して出力されていましたが、新しい数式では、よりリッチなデータのアウトプットが可能になっています。
ユーザーが数式のアウトプットに求める外観や動作に合わせて、アウトプットの互換性を維持するために、ロールアップ、ユーザー、ファイル、およびマルチセレクトプロパティを使っている既存の数式は、すべてテキストに変換されます。
たとえば、人の名前を文字列として返す prop("ユーザー")
は、prop("ユーザー").map(currentValue.format()).join(",")
と表示されます。これは数式2.0では、prop("ユーザー")
がコンマで区切られた文字列ではなく、ユーザーのリストを返すようになったためです。この移行では、ユーザーのリストの各項目を文字列に変換し、コンマで区切ることで元のアウトプット(コンマで区切られた文字列)を保持します。
リッチなデータ型のアウトプットを適用するには、変換された部分を削除する必要があります。上記の例では、prop("ユーザー")
を直接使用することを意味します。この場合、アウトプットはプレーンテキストではなくユーザー型オブジェクトのリストを返すようになります。
動的プロパティのメンション
プロパティからワークスペースレベルの情報を取得
関数を設定するデータベースや、そこにリレーションで接続されたデータベースに対してタグ付けされた、ユーザー名やメールアドレスなどのワークスペースレベルの情報を、独自のプロパティを作成しなくても取得できるようになりました。
たとえば、「作成者」プロパティを使用してユーザーのフルネームやメールアドレスなどのデータを取得し、「名前」を prop("作成者").name()
、また「メールアドレス」を prop("作成者").email()
のように参照できます。
これにより、大規模なデータベースのプロパティを合理化しながら必要な情報が取得でき、複数の手順を踏まなくてもよくなります。
ドット表記に対応
letで独自の変数を作成
数式でローカル変数の作成がサポートされるようになりました。従来のJavaScriptと同様に、let
は最初の引数の名前と2番目の引数の値を使用して変数を作成します。3番目の引数は、新しく作成した変数を使用して、数式の残りの部分を記述する場所です。
たとえばいくつかのプロパティの値を加算した合計コストを参照する数式を作成する場合、作成中にプロパティを何度も加算するのを避けることができます。
let(売上税, (prop("小計") * 0.099), prop("小計") + 売上税)
のように変数を作成すると、その後 売上税
と入力するたびに、小計に税率を掛けた定義済みの値として使用できるようになります。
変数はどういう場合に使いますか?
let
の操作の要領がわかったら、lets
を使ってさまざまな変数の割り当てを一度に行うこともできます!
たとえば、2つの変数を lets(a, "Hello", b, "world", a + " " + b)
のように組み合わせて使うことが可能です。
ロールアップを使わずにリレーションで接続されたデータベースを参照
リレーションで接続されたデータベースで必要な情報を正確に取得できるようになりました。あらかじめそのプロパティを参照するためのロールアップを作成する必要はもうありません。情報の表示方法を編集・変更する機能と併せて使うと、通常のロールアップよりもはるかに強力です。
たとえばタスクデータベースに、プロジェクトデータベースがリレーションで接続されていた場合、完了したタスクの割合に基づいて、タスクが 「✅ 完了」
、「⚠️ 進行中」
、「❌ 未着手」
のどのステータスであるかを示すことができます。
以前は、タスクの完了を示すロールアップを作成し、その情報に基づいて「✅ 完了」
、「⚠️ 進行中」
、「❌ 未着手」
のいずれかを返す数式を作成する必要がありました。
新しい数式を使用すると、これらのアクションを組み合わせて、「ロールアップ値」を変数として定義できます。
まず、
map()
、filter()
、length()
関数を使用して、完了したタスクの数を取得します。
prop("タスク").map(current.prop("ステータス")).filter(current== "完了").length()
2. 次に、 進捗率
という変数でロールアップ値を定義します。これを行うには、完了したタスクの数をタスクの合計数で割り、100を掛ければ完成です!これで、作成した値を関数で使用できます。
let(
進捗率,
prop("タスク").map(current.prop("ステータス")).filter(current == "完了").length()
/ prop("タスク").map(current.prop("ステータス")).length() * 100),
/* ここに残りの数式を記述します */
)
この例については、最終的な数式は次のようになります。
let(進捗率, round(prop("タスク").map(current.prop("ステータス")).filter(current =="完了").length()/ prop("タスク").map(current.prop("ステータス")).length() * 100),
ifs(進捗率 == 100, "✅ 全タスク完了", 進捗率 > 0, "⚠️ 進行中 (" +進捗率 + ")%","❌ 未着手"))
既存機能への変更点
下のトグルを開くと、各数式への変更をご確認いただけます。既存の数式は自動的に変換されることにご留意ください。
プロパティ参照の変更点
式機能の変更点
date関数の変更点
テキスト関数の変更
チェックボックス(ブール値)機能の変更点
また、 match()
や style()
など、新しい関数もいくつかあります!すべての関数の一覧はこちらでご覧いただけます。
ご不明な点はありますか?