ExecuteSQL関数で「集計レポート」を楽に作るには?
FileMakerで請求書や売上集計などのレポートを作ろうとすると、
「集計フィールドやサマリーパートがたくさん必要になってレイアウトがゴチャゴチャする」
「ちょっと集計の切り口を変えたいだけなのに、専用レイアウトを作り直すのが面倒」
と感じることはないでしょうか。
そんなときに役立つのが、ExecuteSQL関数を使った集計レポートの作成です。
一見むずかしそうに見えますが、ポイントを押さえれば、意外とシンプルに扱えます。
この記事では、難しい専門用語をできるだけ使わず、基本的な考え方と具体的な使い方を紹介します。
ExecuteSQL関数って何ができるの?
ExecuteSQL関数は、FileMakerのテーブルに対して「問いかけ(質問)」を投げて、
条件に合うデータだけを取り出したり、集計したりするための関数です。
たとえば、
- 今月の売上合計はいくら?
- 担当者ごとの売上を一覧にしたい
- 商品ごとの販売数量ランキングを出したい
といった質問に対して、1つの計算式で答えを返してくれます。
従来のように、集計フィールドをたくさん作ったり、レポート用レイアウトを増やしたりしなくても、
「1フィールド+1つの計算」だけで柔軟なレポートが作れるのが大きなメリットです。
基本の書き方をシンプルに覚える
ExecuteSQL関数は、ざっくり次のような形で使います。
ExecuteSQL (
"SQL文" ;
"フィールド区切り文字" ;
"行区切り文字" ;
引数1 ; 引数2 ・・・
)
このうち、まずは一番大事な「SQL文」の部分だけを意識しましょう。
レポート用の集計では、次の形を覚えておくと便利です。
SELECT 集計関数(フィールド名)
FROM テーブル名
WHERE 条件
よく使う集計関数は、次の3つです。
- SUM:合計
- COUNT:件数
- AVG:平均
例1:今月の売上合計を1行で出す
例として、「売上」テーブルに「売上日」「金額」というフィールドがあるとします。
このとき、「今月の売上合計」を出すシンプルな例です。
ExecuteSQL (
"
SELECT SUM ( ""金額"" )
FROM ""売上""
WHERE ""売上日"" >= ? AND ""売上日"" <= ?
" ;
"" ;
"" ;
Date ( Month ( Get ( 現在日付 ) ) ; 1 ; Year ( Get ( 現在日付 ) ) ) ;
Date ( Month ( Get ( 現在日付 ) ) + 1 ; 0 ; Year ( Get ( 現在日付 ) ) )
)
ポイントは次のとおりです。
SUM ( ""金額"" )で「金額の合計」を計算WHERE ""売上日"" >= ? AND ""売上日"" <= ?で「この期間だけ」という絞り込み?の部分に、下側と上側の日付を「引数」として渡す
この計算式を計算フィールドやグローバルフィールドに設定すれば、
いつでも最新の「今月の売上合計」が見ることができます。
例2:担当者別の売上一覧をレポートにする
次に、担当者ごとの売上合計を一覧にしてみます。
「担当者名」と「その人の売上合計」を並べて表示するイメージです。
SQL文は次のようになります。
SELECT ""担当者"" ; SUM ( ""金額"" )
FROM ""売上""
GROUP BY ""担当者""
ORDER BY SUM ( ""金額"" ) DESC
このSQL文をExecuteSQL関数に組み込むと、
ExecuteSQL (
"
SELECT ""担当者"" ; SUM ( ""金額"" )
FROM ""売上""
GROUP BY ""担当者""
ORDER BY SUM ( ""金額"" ) DESC
" ;
"¶" ;
"¶"
)
といった形になります(フィールド区切り文字や行区切り文字に改行を指定)。
返ってくる結果は、次のようなテキストです。
山田太郎¶150000
佐藤花子¶120000
鈴木一郎¶90000
このテキストを、ポータルや仮想リストテクニックと組み合わせれば、
「担当者別売上ランキング」のようなレポート画面が作れます。
例3:日付ごとの売上推移レポート
「日ごとに売上がどれだけあったか」を、一覧で確認したい場合もあります。
この場合は、日付でグループ分けします。
ExecuteSQL (
"
SELECT ""売上日"" ; SUM ( ""金額"" )
FROM ""売上""
WHERE ""売上日"" BETWEEN ? AND ?
GROUP BY ""売上日""
ORDER BY ""売上日""
" ;
"¶" ;
"¶" ;
日付範囲開始 ; 日付範囲終了
)
このような「集計+グループ化」のパターンさえ押さえれば、
日別、月別、担当者別、商品別など、さまざまな切り口でレポートを作れます。
実務で使いやすくするための工夫
ExecuteSQL関数を実務で使うときは、次のポイントを意識すると管理しやすくなります。
- 命名ルールをそろえる
フィールド名・テーブル名がバラバラだと、SQL文が読みにくくなります。
「売上::売上日」「売上::金額」のように、ある程度パターン化しましょう。 - SQL文はコメント付きで保存
長いSQL文は、スクリプトのコメントやテキストメモに残しておくと、あとから修正しやすくなります。 - 結果の表示方法を工夫
そのままテキストとして表示するだけでなく、仮想リストやWebビューア、グラフオブジェクトなどと組み合わせると、
見た目も分かりやすいレポートになります。
ExecuteSQLを使うときの注意点
便利な一方で、いくつかの注意点もあります。
- フィールド名・テーブル名の変更に弱い
名前を変えると、SQL文のほうも手作業で直す必要があります。 - 入力ミスでエラーになりやすい
カッコやスペースの抜けなど、ちょっとしたミスで結果が返ってこないことがあります。
少しずつテストしながら作るのがおすすめです。 - 複雑にしすぎない
1つのSQL文で何でもやろうとすると、読みづらくなります。
必要に応じて集計を分けたり、スクリプト側で補助したりしましょう。
まとめ:ExecuteSQLでスマートな集計レポートを
ExecuteSQL関数を使うと、
- 集計フィールドや専用レイアウトを増やさずにレポートが作れる
- 集計の切り口を柔軟に変えられる
- 1つの計算式で「聞きたいこと」をそのまま表現できる
といったメリットがあります。
最初は「SELECT」「WHERE」「GROUP BY」などの基本的な形だけを覚えて、
シンプルな集計から少しずつ試してみるのがおすすめです。
日々の売上確認や、担当者別の結果チェックなど、よく見るレポートからExecuteSQL化していくと、
だんだんと運用が楽になっていきます。ぜひ、自分のファイルで一度試してみてください。