逆引きFormula 2.0 に戻る

Formula 2.0 ではフィルタを含めた集計がロールアップを使わずにできるようになりました。真っ先に思いついたのは家計簿でした。説明のために簡単なテンプレートを作ってみました。

  1. 個別会計データベースを作成します。

    無題のデータベース

  2. 年月データベースを作成します。月は年のサブアイテムにしてみます。

    無題のデータベース

  3. 個別会計を年月に結び付けます

    無題のデータベース

  4. これをロールアップを使わずに集計してみます。詳しくはカテゴリごとに集計するには? (Formula 2.0) の記事を参考にしてください。

    1. 下位ページ一覧。自分の下にある個別会計一覧のページになります。月であれば対応する個別会計がそのままですが、年の場合にはすべての月の個別会計がすべてフラットな形で渡されます。

      /* 月一覧が空 -> 月 */
      prop("月一覧").empty() ?
      	/* 月であれば、そのまま個別会計一覧を返却 */
      	prop("個別会計一覧") :
      	/* 年であれば、月ごとにその個別会計一覧をマッピング */
      	prop("月一覧").map(current.prop("個別会計一覧"))
      		/* 個別会計一覧のリストのリスト -> フラット化したリスト */
      		.flat()
      

      emptymapflat

    2. 合計 (上で取得したページをすべて金額に変換し、それを総和します)

      /* 下位ページ一覧のすべてのページを金額に置き換え */
      prop("下位ページ一覧").map(current.prop("金額"))
      	/* それをすべて総和 */
      	.sum()
      

      mapsum

    3. 合計(食費)(金額に置き換える前に、種別が食費のものだけを絞り込みます)

      /* 下位ページのうち、種別が「食費」のものだけを絞り込み */
      prop("下位ページ一覧").filter(current.prop("種別") == "食費")
      	/* 絞り込んだページを金額に置き換え */
      	.map(current.prop("金額"))
      	/* それをすべて総和 */
      	.sum()
      

      filter mapsum

    4. 合計(交通費)(金額に置き換える前に、種別が交通費のものだけを絞り込みます、残りも一緒なので省略)

      /* 下位ページのうち、種別が「食費」のものだけを絞り込み */
      prop("下位ページ一覧").filter(current.prop("種別") == "交通費")
      	/* 絞り込んだページを金額に置き換え */
      	.map(current.prop("金額"))
      	/* それをすべて総和 */
      	.sum()
      

      filter mapsum

  5. 最終的にはこんな感じになりました。月ごと、年ごとに集計がされていることがわかります。