見出し画像

Notion の関数 2.0(Formula 2.0)で列の合計値や平均値を算出する方法

今回は、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()を使って平均値を算出する関数
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番目から数えます)。方法は他にもいくつかありますし、応用すればたくさんのことが実現できるのでぜひ試してみてください。

列の2番目に大きな値を取得する関数
prop("価格データベースとのリレーション").map(current.prop("価格")).sort().reverse().at(1)

おわりに

今回は Notion の関数 2.0(Formula 2.0)で列の合計値や平均値を算出する方法について紹介しました。Formula 2.0 を使うことで、今までのロールアップを使わない方法で列の中身を集計することができ、より柔軟にデータを扱うことができます。
ぜひみなさんも 関数 2.0 でデータベースの集計にチャレンジしてみてください。

この記事が気に入ったらサポートをしてみませんか?