FileMakerで「集計」がややこしいと感じたら
FileMakerで売上や件数などを集計しようとすると、「集計フィールドを作るのか?」「リレーションで絞り込むのか?」「レポートレイアウトが必要?」といった悩みが出てきます。
そうした中で、スクリプトや計算式から柔軟に集計したいときに便利なのが ExecuteSQL 関数 です。
しかし、SQLという名前を聞くだけで「難しそう」と感じてしまい、敬遠している人も多いのではないでしょうか。
この記事では、FileMakerの ExecuteSQL を使って、基本的な集計を実装する考え方と、よく使うパターンをわかりやすく整理します。難しい専門用語はできるだけ避けて、「まずこれだけ押さえれば良い」というポイントに絞って解説します。
ExecuteSQLで何ができるのか、ざっくり理解する
ExecuteSQL 関数は、FileMakerのテーブルに対して「SQL」という共通の言語でデータを問い合わせる機能です。
日本語で言うと「このテーブルから、条件に合うレコードを探して、その合計(または平均)を教えて」という命令を出すイメージです。
基本の形は次のようになります。
ExecuteSQL (
"SELECT <フィールド一覧> FROM <テーブル名> WHERE <条件>" ;
"" ;
""
)
集計を行う場合は、「<フィールド一覧>」のところに SUM(合計)や COUNT(件数)などの関数を入れます。
よく使う集計関数:SUM・COUNT・AVG
集計の基本は次の3つです。
- SUM(フィールド名):指定したフィールドの合計
- COUNT(フィールド名):レコード件数(そのフィールドが空でないもの)
- AVG(フィールド名):指定したフィールドの平均
例えば、「売上」テーブルに「金額」フィールドがあり、全レコードの売上合計を知りたい場合はこう書きます。
ExecuteSQL (
"SELECT SUM ( \"金額\" ) FROM \"売上\"" ;
"" ;
""
)
ポイントは、FileMakerのテーブル名・フィールド名に 日本語 や スペース が含まれるときは、"ダブルクォート" で囲むことです。囲まないとエラーになりやすいので、まずは「日本語名はダブルクォートで囲む」と覚えておくと安心です。
条件付き集計:WHERE で絞り込む
次に、「2024年の売上だけ合計したい」「特定顧客の売上だけ合計したい」といった条件付きの集計です。
ここでは WHERE というキーワードを使います。
例:顧客IDが「C001」の売上合計を求める
ExecuteSQL (
"SELECT SUM ( \"金額\" )
FROM \"売上\"
WHERE \"顧客ID\" = ?" ;
"" ;
"" ;
顧客ID
)
ここでのポイントは、条件の値を「?」で受け取る ことです。
FileMakerの ExecuteSQL では、SQLの文の中に直接値を埋め込むのではなく、「?」というプレースホルダ(仮の場所)を書いておき、
関数の引数としてその値(ここでは 顧客ID フィールドの値)を渡します。
これにより、文字列の引用符や日付の書式を自分で気にしなくてよくなり、間違いを減らせます。
期間指定の集計:日付をどう扱うか
集計でよくあるのが「ある期間の合計」です。
例えば、「2024年4月1日〜2024年4月30日の売上合計」を集計する場合、日付フィールドを使って絞り込みます。
ExecuteSQL (
"SELECT SUM ( \"金額\" )
FROM \"売上\"
WHERE \"売上日\" BETWEEN ? AND ?" ;
"" ;
"" ;
開始日 ;
終了日
)
開始日・終了日は、スクリプト引数やグローバルフィールド、あるいは計算フィールドなどから渡せます。
FileMaker上の日付フィールドをそのまま引数に渡せば、ExecuteSQL側でよきように解釈してくれるので、日付の書式を自分で整える必要は基本的にありません。
グループ別の集計:GROUP BYで「まとめる」
「顧客ごとの売上合計」や「月ごとの売上合計」のように、グループごとに集計したい場面もよくあります。
このときに使うのが GROUP BY(グループ バイ) です。
例:顧客ごとの売上合計を求める
ExecuteSQL (
"SELECT \"顧客ID\", SUM ( \"金額\" )
FROM \"売上\"
GROUP BY \"顧客ID\"" ;
"¶" ;
", "
)
この例では、結果として「顧客ID,合計金額」という形の行が、顧客ごとに1行ずつ返ってきます。
ExecuteSQL の第2引数・第3引数では、それぞれ「行の区切り」「フィールドの区切り」を指定します。
上記の例では、行の区切りを改行(¶)、フィールドの区切りをカンマ+スペースにしています。
戻り値は文字列なので、そのままポータルのようには表示できませんが、
スクリプトでパースしたり、仮想リスト形式でレイアウトに並べたりといった応用が可能です。
計算フィールドやスクリプトでの活用イメージ
ExecuteSQL をどこで使うか、という観点では主に次のようなパターンがあります。
- レイアウトに表示するための 計算フィールド として使う
例:顧客レイアウトに「この顧客の売上合計」を表示する計算フィールドを作る - スクリプト 内で数値を取得し、変数に入れて使う
例:ボタンを押したときに、条件に合う売上合計を計算してダイアログ表示する - スクリプトトリガと組み合わせて、自動で集計結果を更新する
特に「顧客ごとの売上合計」「ある期間の合計金額」など、毎回条件が変わる集計では、
レイアウトの集計パートだけでは対応しづらく、ExecuteSQL の柔軟性が生きてきます。
使うときの注意点とコツ
最後に、ExecuteSQL で集計を行う際の注意点と、つまずきやすいポイントをまとめます。
- テーブル名・フィールド名はできるだけ半角英数に
日本語名でも動作しますが、SQL文が長くなるほど打ち間違いの原因になります。
プロジェクトの早い段階で英数字名+和名コメントにしておくと楽になります。 - 条件値は必ず「?」引数で渡す
直接文字列を埋め込む書き方もできますが、引用符の付け忘れや日付の書式でエラーになりがちです。 - パフォーマンスに注意
レコード数が多いテーブルに対して複雑な集計を頻繁に行うと、表示が重くなることがあります。
必要に応じてスクリプトで一度だけ集計し、結果を保存しておく工夫も有効です。 - まずは簡単な例から試す
いきなり複雑な GROUP BY や多条件の WHERE に挑戦せず、件数(COUNT)や単純な SUM から慣れるのがおすすめです。
ExecuteSQL は最初のハードルこそ高く見えますが、「合計」「件数」「期間」「グループ分け」の4つを一通り試してみると、一気に理解が進みます。
集計フィールドや集計レポートと組み合わせながら、状況に応じて使い分けていくと、FileMakerでの集計作業がぐっと楽になります。