FileMaker で重複を数える2

たとえば以下のような、各レコードに食べ物の名前が書かれているデータがあるとする。

コロッケ
コロッケ
コロッケ
トマト
トマト

りんご
りんご
りんご
りんご
りんご

このデータの重複を数える方法は以前書いた。

FileMaker で重複を数える – with a Christian Wife
https://wacw.cf/2016/09/02/counting-unique-items-on-filemaker/

この方法に従えば以下のように重複の個数を表示できる。

コロッケ 3
コロッケ 3
コロッケ 3
トマト 2
トマト 2
卵 1
りんご 5
りんご 5
りんご 5
りんご 5
りんご 5

しかし、せっかくなので重複を非表示にして、個数に応じて以下のようにソートすれば見やすくなる。ランキングのようにできる。

りんご 5
コロッケ 3
トマト 2
卵 1

その方法をメモしておく(前述の以前のエントリーの書き方が分かりにくいので、同じ部分は再度まとめ直してみる)。

(0)テーブル名を Table とし、食品名が入った item という名前のフィールドがあるとする。

item
コロッケ
コロッケ
コロッケ
トマト
トマト

りんご
りんご
りんご
りんご
りんご

(1)item フィールドに自己連結リレーションシップを張る。

これで Table 2 というテーブルオカレンスが生成される。

(2)「重複カウント」という計算フィールドを作成。

計算内容を Count ( Table 2::item ) とする。

これで各レコードの「重複カウント」フィールドに、重複の個数が表示される。

item 重複カウント
コロッケ 3
コロッケ 3
コロッケ 3
トマト 2
トマト 2
卵 1
りんご 5
りんご 5
りんご 5
りんご 5
りんご 5

(3)item でソート。

(4)「重複カウント連番」という集計フィールドを作成する。

カウント> item と設定し、「現在のカウント」と「ソートされたグループごとに集計を再開する」にチェックを入れる。ソート対象を「Table > item」とする。

item 重複カウント 重複カウント連番
コロッケ 3 1
コロッケ 3 2
コロッケ 3 3
トマト 2 1
トマト 2 2
卵 1 1
りんご 5 1
りんご 5 2
りんご 5 3
りんご 5 4
りんご 5 5

(5)次は、各アイテムで「重複カウント連番」の値が最も大きいレコードだけ残したい。そのためには「重複カウント」と「重複カウント連番」の値が同じになっていることに注目すればいい。

「残すレコード_一時」という計算フィールドを作成。以下のような計算内容にすれば、残したいレコードだけ星のマークが付く。

If ( 重複カウント = 重複カウント連番 ; "★" ; "" )

item 重複カウント 重複カウント連番 残すレコード_一時
コロッケ 3 1
コロッケ 3 2
コロッケ 3 3 ★
トマト 2 1
トマト 2 2 ★
卵 1 1 ★
りんご 5 1
りんご 5 2
りんご 5 3
りんご 5 4
りんご 5 5 ★

(6)「残すレコード_最終」というテキストフィールドを作成。

(7)以下のようなスクリプトを作成(私は FileMaker を英語モードで使っている)。

# 最初のレコードへ移動。
Go to Record/Request/Page [ First ]

# 「残すレコード_一時」フィールドの星マークを「残すレコード_最終」へコピー。
Loop
If [ Is Empty ( Table::残すレコード_一時 )]
Go to Record/Request/Page [ Next ; Exit after last: On ]
Else
Set Field [ Table::残すレコード_最終 ; Table::残すレコード_一時 ]
Go to Record/Request/Page [ Next ; Exit after last: On ]
End If
End Loop

# 星マークがないレコードを非表示
Enter Find Mode [ Pause: Off ]
Set Field [ Table::残すレコード_最終 ; "★" ]
Perform Find [ ]

# カウント順でソート
Sort Records [ Restore ; With dialog: Off]

スクリプトを実行すれば、以下のようになるはずだ。

item 重複カウント 重複カウント連番 残すレコード_一時 残すレコード_最終
りんご 5 5 ★ ★
コロッケ 3 3 ★ ★
トマト 2 2 ★ ★
卵 1 1 ★ ★

この方法は単なる検索であり、重複部分は非表示になっているだけなので元のデータは非破壊だ。ランキングを確認したいときなどに使える方法だ。

参考:
【FileMaker】カテゴリごとに管理番号を振る – Qiita
https://qiita.com/tyuma/items/9afe39bb9575e7b3a244