【FileMaker】今年度の集計をしたいのだ

「今年度」という言葉を聞いて、「めんどくさ」と思う方が大半なのではないでしょうか？
今回は、この「めんどくさ」に対応していきます。

# この記事の対象者
FileMakerで「今年度」の集計をしなければならなくなった人

# この記事を読むと得られること
FileMakerで今年度の集計をするための構築方法

# この記事のテスト環境
Claris FileMaker 20.3.1.31
記事執筆時の最新バージョンで行なっていますが、すごく新しい技術を使っているわけではないので、お気軽に試してみてください。

# 目指すゴール
こんな感じの年度集計ができます。
![スクリーンショット 2023-12-05 16.26.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/5ab4f293-dd02-8ad0-da41-4b7781cb257d.png)

# 事例
今回は、図書の貸し出しをしている施設で、年度末に月ごとの利用人数の集計をする事例で実装を行なっていきます。
この施設での年度は、以下になります。
4月1日〜翌年3月31日

# 実装
では、やっていきましょう。

## テーブル設計
### 貸出帳
図書貸し出しをするたびに登録する、貸出帳です。

![スクリーンショット 2023-12-04 19.10.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/38137e08-c9f7-24cf-efa5-b026795c6311.png)

計算式を拡大します。
年度は、貸出日を元に、どの年度になるかを計算しています。
1月〜3月の場合は貸出日の年を[Year関数](https://help.claris.com/ja/pro-help/content/year.html)で取得し、マイナス1をします。
4月〜12月の場合は、そのまま貸出日の年をYear関数でfセットします。
![スクリーンショット 2023-12-04 19.11.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/c40f44bd-c36b-0c80-4157-2d289cf6659d.png)

年月は、月ごとの集計をするために用意します。
月をセットする際は、2桁になるように[Right関数](https://help.claris.com/ja/pro-help/content/right.htm)を使っています。
年月は、202312のような6桁になります。
![スクリーンショット 2023-12-04 19.11.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/07f9baeb-e7d8-40f2-01c7-cd7aeeadc2d9.png)

その他、抽出した人数の集計をするフィールドです。
| フィールド名 | 設定 |
|:-:|:-:|
| 件数  |  主キーをカウントする集計タイプ |

グローバル関数は、主にリレーションシップグラフで使う用です。
| フィールド名 | 設定 |
|:-:|:-:|
| g年度  |  年度集計をするレコードを、１年度で１レコード作る際に活用 |
| g年月  |  図書貸出の年月集計をする際に活用 |

### 年度集計
年度ごとに１レコードを追加し、集計結果をまとめます。
![スクリーンショット 2023-12-04 19.10.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/7b4e6fa2-7247-1a8d-5d49-7630cb2b8591.png)
１年に１レコードなので、月ごとの集計を、利用人数フィールドの12個の配列に格納します。

配列にセットされた人数の合計を計算するフィールドを拡大します。
![スクリーンショット 2023-12-04 19.10.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/ad3766d3-a2a0-09a7-282f-fc5af3b16cd7.png)
単純に配列に入っている数字を12回回して加算するだけの単純構造です。

:::note info
この計算をスクリプトで行う例も紹介しています。
どちらも同じ結果になるので、現場のボリューム感や運用に合わせてチョイスしてください。
:::
https://qiita.com/tyuma/items/28a26c5ae4a3ba84bb9d

## リレーションシップグラフ
図書貸出テーブルに設置したグローバルフィールドと、年度集計の年度、図書貸出の年月を結びます。
![スクリーンショット 2023-12-04 19.11.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/c962e877-bfa9-2db5-857a-3ab62871f01b.png)

## レイアウト
### 図書貸出帳
図書貸出帳は、貸出日に入力があれば集計できるので、今回は最低限のリスト表示にしています。
右側の「年度」は、自動で計算されるので、何もタッチしないです。
実際の運用では、出さないフィールドですが、今回は確認のために表示しています。
![スクリーンショット 2023-12-04 19.11.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/a1bf051b-764f-29d8-10f0-f9e887512251.png)

### 年度集計
年度集計のレイアウトでは、配列の利用人数フィールドを縦に並べ、合計として「利用人数_合計」フィールドを置きます。
![スクリーンショット 2023-12-05 17.18.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/d4c47b54-e27f-94ba-75d4-55ac173a822d.png)


## スクリプト
では、集計のスクリプトを作っていきましょう。
### 全体
![スクリーンショット 2023-12-05 17.28.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/aba01588-59f8-53b0-af40-72827cf2ffe2.png)


### 解説
解説です。
２〜8行目は、年度集計テーブルに集計する年度のレコードがあるかどうかを確認しています。
レコードがなければ、新規作成し、年度をセットして準備完了です。
![スクリーンショット 2023-12-05 16.58.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/5c8f89b5-a0f5-cb31-3035-b0444f8f3c64.png)

月ごとの集計は、年度の検索をしたり図書貸出レコードをLoopで回して1個1個集計したりはしません。
年月でリレーションシップを構築したので、そのリレーションシップを活用して「件数」フィールドの集計結果を取得するのみです。
そのために、14行目では、集計する年をあらためて計算し直しています。
1月〜3月の場合は、集計年度にプラス1、4月〜12月の場合は、年度のままで図書貸出テーブルの年月を集計します。
![スクリーンショット 2023-12-05 17.02.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/169ae98c-7091-87b5-2700-aa01ba0bd090.png)

取得した件数を、年度集計のフィールドの配列にセットします。
この時、年度であることに注意です。
4月始まりなので、4月が配列のトップになります。
あー、めんどい。
考え方としては、下の図のようになります。
4月〜12月は、月から-3、1月〜3月は、月に+9すると、配列の順番を求められます。
![スクリーンショット 2023-12-04 19.12.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/f9d66eba-ed3a-88b3-202d-e0a368ee9979.png)

配列の順番は、17行目の変数で行います。
![スクリーンショット 2023-12-05 17.10.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/f310d933-4dd8-b445-1c64-360482d0518a.png)

配列の指定の仕方、初学者だとちょっとわからなかったりする人もいるかと思うので、「ここだよー！」と図を貼っておきます。
![スクリーンショット 2023-12-05 17.12.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/88d6aec9-34ef-675f-85e8-a9db4a9f6805.png)

# テストしてみる
では、集計してみましょう。
最初は、今年度のレコードがありません。
![スクリーンショット 2023-12-05 17.16.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/c148ed2b-b8f0-321b-98b4-674160e38616.png)

スクリプトを実行すると、今年度のレコードが出来上がり、集計も行われます。
![スクリーンショット 2023-12-05 17.16.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/2a89ec4a-e3cc-9dfb-de6b-8fcb670c5ade.png)


今回のやり方は、配列の順番の計算を変更するだけで会社の会計年度など（例えば年度始まりが9月とか）にも応用がききますので、現場に合わせてやってみてください。
今年度の集計をしたい人にこの記事が届きますように。