![見出し画像](https://assets.st-note.com/production/uploads/images/123376817/rectangle_large_type_2_5e88073137c6da2aa088013e0a60fa21.png?width=1200)
Notion の関数 2.0(Formula 2.0)で列の合計値や平均値を算出する方法
今回は、Notion の 関数 2.0(Formula 2.0)で列の合計値や平均値を取得する方法を説明します。
元々、今回の記事の内容は以下の記事に書いていました。
しかし Notion ラボの方針として、「データベースの縦の集計はスプシやエクセルに任せた方がいい」ということになりましたので(餅は餅屋)、上記の記事からは削除しました。
💭 計算させるためだけにリレーションわざわざ付けるの、実際の現場だと運用回るイメージが全くしないんだよなあ。個人の趣味レベルだったら良いとは思う。
— Tsuburaya | Notion 公式アンバサダー (@___35d) September 15, 2023
ただせっかく書いたし消しちゃうのももったいないので、ここで供養しておきます。
合計値や平均値を算出する
データベースの列の合計値や平均値を算出したい場合、 今まではロールアップを使用すれば実現できていましたが、Formula 2.0 ではロールアップ無しで算出することができるようになりました。
![](https://assets.st-note.com/img/1701523162281-6o7D0uBu6A.png?width=1200)
まずは対象のデータベースとリレーションします(今回は自己リレーション)。今回は自己リレーションですが、別のデータベースを集計したい場合でも同様の方法で行えます。
![](https://assets.st-note.com/img/1701523186226-LSUfvrl45Y.png?width=1200)
prop("価格データベースとのリレーション").map(current.prop("価格"))
で「価格」プロパティの値を配列で取得します。
![](https://assets.st-note.com/img/1701523242989-Q5Kbar1fOi.png?width=1200)
上記に .sum() を追加すると合計値を算出することができます。
![](https://assets.st-note.com/img/1701523273474-7RqGQ95ScR.png?width=1200)
.sum()とは別に、.length()を追加すると配列の個数(「価格」プロパティの個数)を取得することができます(¥マークは無視してください。)
![](https://assets.st-note.com/img/1701523305205-kAO1us5ATM.png?width=1200)
平均値は、prop("価格データベースとのリレーション").map(current.prop("価格")).sum()をprop("価格データベースとのリレーション").map(current.prop("価格")).length()で割ることで取得できます。
![](https://assets.st-note.com/img/1701523332622-yg94s3A4H4.png?width=1200)
prop("価格データベースとのリレーション").map(current.prop("価格")).sum() / prop("価格データベースとのリレーション").map(current.prop("価格")).length()
上記で完成です。改良案として、上記の関数ではprop("価格データベースとのリレーション").map(current.prop("価格"))が2回出てくるので、let()を使うとスッキリ書くことができます。
![](https://assets.st-note.com/img/1701523372851-QUMdAYmpwO.png?width=1200)
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番目から数えます)。方法は他にもいくつかありますし、応用すればたくさんのことが実現できるのでぜひ試してみてください。
![](https://assets.st-note.com/img/1701523426468-O88X92kUc7.png?width=1200)
prop("価格データベースとのリレーション").map(current.prop("価格")).sort().reverse().at(1)
おわりに
今回は Notion の関数 2.0(Formula 2.0)で列の合計値や平均値を算出する方法について紹介しました。Formula 2.0 を使うことで、今までのロールアップを使わない方法で列の中身を集計することができ、より柔軟にデータを扱うことができます。
ぜひみなさんも 関数 2.0 でデータベースの集計にチャレンジしてみてください。