今回は、Notion の 関数 2.0(Formula 2.0)で列の合計値や平均値を取得する方法を説明します。
元々、今回の記事の内容は以下の記事に書いていました。
しかし Notion ラボの方針として、「データベースの縦の集計はスプシやエクセルに任せた方がいい」ということになりましたので(餅は餅屋)、上記の記事からは削除しました。
ただせっかく書いたし消しちゃうのももったいないので、このブログで供養しておきます。
合計値や平均値を算出する
データベースの列の合計値や平均値を算出したい場合、 今まではロールアップを使用すれば実現できていましたが、Formula 2.0 ではロールアップ無しで算出することができるようになりました。
まずは対象のデータベースとリレーションします(今回は自己リレーション)。今回は自己リレーションですが、別のデータベースを集計したい場合でも同様の方法で行えます。
prop("価格データベースとのリレーション").map(current.prop("価格"))
で「価格」プロパティの値を配列で取得します。
上記に.sum()
を追加すると合計値を算出することができます。
.sum()
とは別に、.length()
を追加すると配列の個数(「価格」プロパティの個数)を取得することができます(¥
マークは無視してください。)
平均値は、prop("価格データベースとのリレーション").map(current.prop("価格")).sum()
をprop("価格データベースとのリレーション").map(current.prop("価格")).length()
で割ることで取得できます。
prop("価格データベースとのリレーション").map(current.prop("価格")).sum() / prop("価格データベースとのリレーション").map(current.prop("価格")).length()
上記で完成です。改良案として、上記の関数ではprop("価格データベースとのリレーション").map(current.prop("価格"))
が2回出てくるので、let()
を使うとスッキリ書くことができます。
let(priceArray,
/* 「価格」プロパティの値を配列で取得 */
prop("価格データベースとのリレーション").map(current.prop("価格")),
/* 「列の合計値:priceArray.sum()」/「列数:priceArray.length()」=「列の平均値」を算出 */
priceArray.sum() / priceArray.length()
)
prop("価格データベースとのリレーション").map(current.prop("価格"))
で「価格」プロパティの値を配列で取得し、変数のpriceArray
に代入しています。そして、「列の合計値:priceArray.sum()
」/「列数:priceArray.length()
」=「列の平均値」を算出しています。
列の中で 2番目に大きな値を取得
今まではロールアップで列の最大値や最小値、中央値を取得することができましたが、「2 番目に大きな数」などは今までの機能では実現できず、Formula 2.0 で実現できるようになった内容です。
まずは上記と同じように対象のデータベースとリレーションします(今回は自己リレーション)。続いて以下のように関数を記載することで、2番目に大きな値を取得することができます。関数の概要としては、降順に並べる(.sort().reverse()
)→ 1番目のインデックスの値を取得(.at(1)
)という流れです(配列は0番目から数えます)。方法は他にもいくつかありますし、応用すればたくさんのことが実現できるのでぜひ試してみてください。
prop("価格データベースとのリレーション").map(current.prop("価格")).sort().reverse().at(1)
おわりに(by Notion AI)
今回は Notion の関数 2.0(Formula 2.0)で列の合計値や平均値を算出する方法について紹介しました。Formula 2.0 を使うことで、今までのロールアップを使わない方法で列の中身を集計することができ、より柔軟にデータを扱うことができます。
また、2番目に大きな値を取得する方法についても紹介しました。これまでの機能では実現できなかったことが、Formula 2.0 で実現できるようになったことは、データベースの機能拡張にとって非常に意義深いものとなります。
今後も Notion の新機能に注目していきたいと思います。
【Notion AI の要約】 Notionの関数2.0を使って、データベースの列の合計値や平均値を算出する方法を説明しています。自己リレーションを使用して、prop("価格データベースとのリレーション").map(current.prop("価格")).sum()を使用して合計値を算出し、.length()を使用して列数を取得して平均値を算出する方法を紹介しています。また、Formula 2.0を使用して列の中で2番目に大きな値を取得する方法も紹介しています。 【記事の文字数】1737 文字