FileMaker ExecuteSQLで集計実装の基本
Tips

FileMaker ExecuteSQLで集計実装の基本

2026年6月23日 admin Tips

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での集計作業がぐっと楽になります。

※ 本稿は、生成AIを使用して執筆しています。重要な内容については、必ずご自身でマニュアル等をご確認ください。