初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2014-05-13 16:56:55

昔は山男
Guest

大量レコード時の快適な集計について

いつも参考にさせてもらっています。

Win7 + FMA11の環境です。


FMサーバー上で動作しているレコード数が約25万件程のファイルがあります。
検索に関しては、索引が出来てしまえば、全くストレス無く動作しますが、
全データを対象に集計を行おうとすると、ハングアップしたような状況となり、使い物になりません。

集計は、定番(?)のGetSummary関数とソートで行っていますが、ソートが時間を要す元凶です。
ソートを使わずに、快適に動作させるような別の方法があるのではないかと探しましたが、見つかりませんでした。

皆さん、どのようになさっているのでしょうか?
ご教授いただけませんでしょうか?

以上、よろしくお願いします。

#2 2014-05-13 17:14:38

Shin
Member

Re: 大量レコード時の快適な集計について

ソートは、複合条件でしょうか。単独条件でしたら、そのフィールドに索引ができていれば検索と同等の時間で可能です。
また、集計の定番は、集計フィールドとソートです。GetSummary() 関数は、非常に多くの評価が必要ですので、通常は使わないほうがいいですよ。(定番では無く、集計地を取り出すための例外的な使用です)
それ以外での集計ですと、リレーションを張って、対象レコードの合計などの計算で集計します。

Offline

#3 2014-05-13 17:32:16

昔は山男
Guest

Re: 大量レコード時の快適な集計について

Shin様

アドバイス有難うございます。
リレーションを張って、対象レコードの合計などの計算で集計すれば、大量レコードでも快適に動作するという事でしょうか?
ちなみにソート条件は複合ではありません。

#4 2014-05-13 17:58:36

Shin
Member

Re: 大量レコード時の快適な集計について

では、何の目的で GetSummary() を使っていらっしゃいますか。
もうすこし、集計の内容を具体的に書いてください。

20万件ほどの複合条件の集計をよく行なっていますが、だいたい1分ほどで終わっています。

Offline

#5 2014-05-14 10:59:44

昔は山男
Guest

Re: 大量レコード時の快適な集計について

Shin様

その後、再度フィールド定義等を確認しました。
私、全く勘違いしてました。
実際のファイルは、おっしゃる通り「集計」を使用しており
GetSummary関数は使っていませんでした。
申し訳ありません、

改めて、実際のファイル状況を単純化して記載します。

●元データ(各行が1レコード、場所と状態はフィールド名)

場所 状態
東京 OK
大阪
東京
大阪
東京 OK
大阪 OK
名古屋
大阪
名古屋 OK
・・・・・

このようなデータが大量(約25万程)


●やりたい事(場所の数と場所毎のOKの数、割合の表示)
以下のような表示です。

   場所数 OK数 割合

東京   3   2  67%
大阪   4   1  25%
名古屋  2     1  50%


■ファイルの状態
・場所数、OK数とも定義は「集計」でカウントです。
・場所で自己リレーション
・レイアウトで、場所の小計パートを作成し、場所数 OK数 割合の各フィールドを配置
(割合のフィールドは 場所でリレーションした「割合」を配置)

■操作
・場所でソートし、上記のレイアウト表示

上記の通りですが、動作を快適にする方法をアドバイスください。

以上、よろしくお願いします。

#6 2014-05-14 11:10:12

tim
Guest

Re: 大量レコード時の快適な集計について

「割合」を配置しなければ速くなりますか?
何でここだけリレーション?

#7 2014-05-14 14:41:28

昔は山男
Guest

Re: 大量レコード時の快適な集計について

tim様

コメント有難うございました。
「割合」を配置しないレイアウトを作りましたが、差はありません。
ここだけリレーションの件ですが、こうしないとすべての場所が同じ値(4/9)になるためです。

改めて実験をしてみました。
ファイルをオープンして、最初のスクリプト(全レコード表示・レイアウト指定・ソート)実行時は5分から8分かかります。
ただし、一度ソートを解除してから同じスクリプトを実行すると30秒程度で終わります。

同じファイルを別のアカウント(別PC)で実行しても同様で、
1回目は時間がかかりますが、2回目以降はかなりスムーズになります。

ただし、いったんクライアント側でファイルをクローズしてから再起動させると(サーバーは開いたまま)
1回目は時間がかかります。

新たな情報は以上ですが、スムーズな動作に向けたアドバイスをお願いします。

#8 2014-05-14 15:18:16

Shin
Member

Re: 大量レコード時の快適な集計について

検証したファイルでは、2万レコードでも10秒弱でした。
内部の構造に問題あるのでしょうね。リレーション部分に時間がかかっているのでしょうか。
https://dl.dropboxusercontent.com/u/926 … 42.fp7.zip

Last edited by Shin (2014-05-14 15:19:30)

Offline

#9 2014-05-14 15:28:42

チポ
Member

Re: 大量レコード時の快適な集計について

ソートするフィールドが非保存になっている?

Offline

#10 2014-05-14 15:36:14

Shin
Member

Re: 大量レコード時の快適な集計について

索引が作られていても、クライアントでソートする際にその索引ファイルをダウンロードするのにある程度の時間がかかります。2回目に早いのは、この時間が無いためです。
FM13以降ですと、このソートをサーバーで行なっておいて、結果だけを表示させることができそうなのですが。

Offline

#11 2014-05-14 15:49:57

sorter
Guest

Re: 大量レコード時の快適な集計について

FM12ですが、36万レコードのファイルで、1回ソートしてソート済みのままもう1回同じソートをしても10秒ぐらいかかりました。
索引があってもソートが遅いのは、昔から変わらないと思いますが...
一旦閉じたら138秒かかった。

ソートは全データをクライアントに転送するので最初は特に遅いのでしょう。
FM13なら、サーバスクリプトで集計して結果だけ取得するようにすれば早そうですが。
11なら場所の値一覧から集計用テーブルにレコードを作ってリレーションでカウントかなあ。これなら索引が使える。

#12 2014-05-15 07:57:53

昔は山男
Guest

Re: 大量レコード時の快適な集計について

Shin様
サンプルファイル作成頂き有難うございました。
とても参考になります。

sorter様
集計用テーブルにレコードを作ってリレーションでカウントとの事ですが、ソートを使わないようなので大変気になります。
お手数ですが、もう少し具体的に教えていただけませんでしょうか

よろしくお願い致します。

#13 2014-05-15 11:31:29

sorter
Guest

Re: 大量レコード時の快適な集計について

集計用テーブル::場所=元データ::場所
でリレーション

場所 ユニークに制限
場所数 Count(元データ::場所)
OK数 Count(元データ::状態)
割合 OK数/場所数

値一覧でなく、とりあえず最初に1回元データを全部インポートすれば、例でいうと3レコードが作成される。以後は開くだけで集計完了。
後は場所が増えた場合にどうするか別途考える。

#14 2014-05-15 11:35:36

sorter
Guest

Re: 大量レコード時の快適な集計について

OK数は状態を使った別のリレーションにした方が速くなるかも?

#15 2014-05-15 15:18:55

qb_dp
Member

Re: 大量レコード時の快適な集計について

場所が都道府県なら、
検索して
Get ( 対象レコード数 )で数えて
47回、Loop処理しても速いですよ。

全国郵便番号データを3倍にして37万件にして、
各都道府県のレコード件数を取得してみました。
索引の言語設定をUnicodeにすれば、1秒ほどで数えることができます。

場所の種類がとんでもなく多くある場合は、時間がかかるとおもいますが.....。

Offline

#16 2014-05-15 23:27:55

昔は山男
Guest

Re: 大量レコード時の快適な集計について

sorter様

外出のためご連絡が遅くなりました。
自宅のテストではソート無しの方法で動作確認出来ました。

明日、サーバー環境で試してみたいと思います。

qb_dp様
データの種類は47以下です。
アドバイス頂いた方法も試してみたいと思います。

有難うございました。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 593.29 KiB (Peak: 610.2 KiB) ]