2016年9月20日火曜日

リレーションを使ってデータを集計してみよう | FileMaker Pro

こんにちは!

ちょっと複雑なリレーションに挑戦してみように引き続き、リレーションについてです。

リレーションの目的はいろいろとありますが、その中の一つに「集計」するということがあります。

今回はそのリレーションを使った集計方法です。

元データ

下図のような日付と売上を保存しているテーブルがあるとします。

今回はこれを月ごとに集計していきたいと思います。


準備(フィールドの作成)

まず、どの基準で集計するかという基準を作ってあげる必要があります。

今回の場合は月ごとに集計をしたいので、それぞれのレコードがどの月に属するかを判別するフィールドが必要になります。

下図のように「年月」というフィールドを用意しました。



次にこのフィールドにオプションの計算式を設定します。


このように計算式を設定します。

この計算式は日付フィールドが「2016/09/10」の場合「201609」を返します。

後半のRight関数は、月の桁数を合わせるためのものです。8月は08、11月は11と常に二ケタになるようにしています。


途中で計算オプションのフィールドを変更したり、追加する場合

今回のように、後で計算オプションを設定したフィールドを追加しても、計算がされません。

再計算を行い、年月フィールドに値を書き込む必要があります。

「フィールドに既存の値が存在する場合は置き換えない」チェックを外している場合、再計算が行われるのは、式に含まれる同じテーブルのフィールドが変更になったか、新しくレコードさ作成された場合の2つです。

既存のレコードの場合は「式に含まれる同じテーブルのフィールド」が変更になると再計算されます。

今回は「フィールド内容の全置換」を使って再計算を促します。

日付フィールドを選択し、「レコード」→「フィールド内容の全置換」を選択します。

下図のように計算式を設定します。

これを実行すると、年月フィールドに値が書き込まれます。


集計用の新しいテーブルの作成


次に新しいテーブルを作成します。

ここでは下図のように集計というテーブルを作成します。さらにリレーションも設定します。その後に「売上」テーブルの計算式を設定します。


図のように3つのフィールドを作ります。


※「このリレーションシップによるレコードの作成を許可する」にチェックを入れておきましょう。


また売上フィールドには下記の計算式を設定します。





集計用のテーブルにレコードを作成する

実際に集計値を取得するにはレコードを作る必要があります。

手動で作っても構いませんが、スクリプトを使ってみます。

先ほどテーブルの作成で「レコード作成用」というフィールドを作っています。これがミソです。

売上テーブルをコンテキストとするレイアウトに集計テーブルのこのフィールドを追加します。


このレイアウトからレコード作成用のフィールドに何でもいいので値を書き込むと集計テーブルにレコードが作成されます。

これを自動で行うスクリプトを作成します。


このスクリプトを動かせば、必要なレコードが集計テーブルで作成できます。

集計テーブルではこんな感じになります。


問題点

この方法にも問題があります。

集計するレコード数が多くなってくると、重くなり使い勝手が悪くなります。

次回はその点について取り上げてみたいと思います。