🔗

カテゴリ集計の具体例を知りたい(家計簿)

Status
Created by 2.0
属性名
合計、合計(食費)など
返り値
Integer
逆引きNotionDB
関連するもの
Formula 2.0 ではフィルタを含めた集計がロールアップを使わずにできるようになりました。真っ先に思いついたのは家計簿でした。説明のために簡単なテンプレートを作ってみました。
  1. 個別会計データベースを作成します。
    1. 個別会計
      項目
      種別
      金額
      日付
      光熱費
      ¥15,300
      Jun 9, 2023
      食費
      ¥2,537
      Jun 29, 2023
      交通費
      ¥420
      Jun 29, 2023
      日用品
      ¥520
      Jun 30, 2023
      食費
      ¥8,192
      Jul 1, 2023
      食費
      ¥1,520
      Jul 2, 2023
      交通費
      ¥840
      Jul 2, 2023
      日用品
      ¥1,500
      Jul 4, 2023
      光熱費
      ¥16,800
      Jul 9, 2023
  1. 年月データベースを作成します。月は年のサブアイテムにしてみます。
    1. 年月
      Name
      月一覧
      個別会計一覧
      合計
      合計(交通費)
      合計(光熱費)
      合計(日用品)
      合計(食費)
  1. 個別会計を年月に結び付けます
    1. 個別会計
      項目
      種別
      金額
      日付
      光熱費
      ¥15,300
      Jun 9, 2023
      交通費
      ¥420
      Jun 29, 2023
      食費
      ¥2,537
      Jun 29, 2023
      日用品
      ¥520
      Jun 30, 2023
      食費
      ¥8,192
      Jul 1, 2023
      食費
      ¥1,520
      Jul 2, 2023
      交通費
      ¥840
      Jul 2, 2023
      日用品
      ¥1,500
      Jul 4, 2023
      光熱費
      ¥16,800
      Jul 9, 2023
  1. これをロールアップを使わずに集計してみます。詳しくは
    🔗
    カテゴリごとに集計するには? (Formula 2.0)
    の記事を参考にしてください。
    1. 下位ページ一覧。自分の下にある個別会計一覧のページになります。月であれば対応する個別会計がそのままですが、年の場合にはすべての月の個別会計がすべてフラットな形で渡されます。
      1. /* 月一覧が空 -> 月 */ prop("月一覧").empty() ? /* 月であれば、そのまま個別会計一覧を返却 */ prop("個別会計一覧") : /* 年であれば、月ごとにその個別会計一覧をマッピング */ prop("月一覧").map(current.prop("個別会計一覧")) /* 個別会計一覧のリストのリスト -> フラット化したリスト */ .flat()
    2. 合計 (上で取得したページをすべて金額に変換し、それを総和します)
      1. /* 下位ページ一覧のすべてのページを金額に置き換え */ prop("下位ページ一覧").map(current.prop("金額")) /* それをすべて総和 */ .sum()
    3. 合計(食費)(金額に置き換える前に、種別が食費のものだけを絞り込みます)
      1. /* 下位ページのうち、種別が「食費」のものだけを絞り込み */ prop("下位ページ一覧").filter(current.prop("種別") == "食費") /* 絞り込んだページを金額に置き換え */ .map(current.prop("金額")) /* それをすべて総和 */ .sum()
    4. 合計(交通費)(金額に置き換える前に、種別が交通費のものだけを絞り込みます、残りも一緒なので省略)
      1. /* 下位ページのうち、種別が「食費」のものだけを絞り込み */ prop("下位ページ一覧").filter(current.prop("種別") == "交通費") /* 絞り込んだページを金額に置き換え */ .map(current.prop("金額")) /* それをすべて総和 */ .sum()
  1. 最終的にはこんな感じになりました。月ごと、年ごとに集計がされていることがわかります。
    1. 年月
      Name
      合計
      合計(食費)
      合計(交通費)
      合計(光熱費)
      合計(日用品)
      下位ページ一覧
データベース置場