みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
環境
FM12
WIN10 or MAC
お世話になっております。
テーブルとテーブル2(自己リレーション)を利用し、対象レコード数をcountするのに全置換【count(テーブル2::自己リレ)】で計算させています。
この場合、フィールド「自己リレ」の対象レコード数が多いと時間がかかってしまいます。
valuelistitemを使い、対象数をloopすることは考えたのですが、もっと早くなる全置換方法はあるのでしょうか。
ご教授いただきたいです。
Offline
FMで「対象レコード」というのは、検索結果のことを言うので、自己リレーションでは得られませんが、「関連レコード数」とどっちを数えたいんでしょうか。
「対象レコード数をcount」であれば、Get(対象レコード数)で出ます。
これは全レコードに対して1つの数字なので、「全置換」する意味は全くありません。(同じ数字を全レコードに入れることになります)
書いてるような全置換が必要だとしたら「全対象レコードの各関連レコード数」ということになりますが...
全置換しなくても計算フィールドでも出ますよね。その結果を検索したりしないなら計算フィールドでいいと思いますが...
必要な時に計算するので余計な時間はかかりません。(対象レコード数が多いと時間がかかるのは、必要な時間ということになる)
himadaneeさんありがとうございます。
>>書いてるような全置換が必要だとしたら「全対象レコードの各関連レコード数」ということになりますが...
>>全置換しなくても計算フィールドでも出ますよね。その結果を検索したりしないなら計算フィールドでいいと思いますが...
たしかに、計算フィールドでしたら計算値は早くでました。
しかし、その結果を検索したいために全置換で考えていました。
>>対象レコード数が多いと時間がかかるのは、必要な時間ということになる
やはり時間がかかってしまうのはしょうがないですね
Offline
具体的にどのような集計を行っているのですか。
> valuelistitemを使い、対象数をloopする
集計したい項目が複数あるのですよね。その項目ごとのレコード数がお欲しいのでしょうか。
一般的には、全レコードで何らかの値が入っている適当なフィールドをカウントする集計フィールドを作ります。
新しいレイアウトを作り、項目をキーとする小計パートのみを作ります。そのパートに項目フィールドと上の集計フィールドを配置します。項目でソートすると分別されてカウントされます。
または、その項目を値一覧(カスタム値にしておいたほ方が集計は早くなりますが)にしておき、1項目ずつ繰り返しフィールド「項目名」に振り分けておきます。
計算フィールド(繰り返し) 項目名 = 項目[1] を作り、それを個別に合計する集計フィールドを作り、ヘッダ、フッタ、総計パートなどに配置します。
全レコードを対象にして、その集計フィールドをみれば、項目ごとのカウントがでていますよ。(リレーションはいりません)
FM12 は、大きくファイル構造が大きく変わった最初のバージョンで、不具合が多く残っています。また、集計などの速度も遅いような気がします。サポートも切れていますし、使わない方がいいですよ。(私は、このバージョンは業務では使いませんでした。)
Last edited by Shin (2023-11-10 16:45:27)
Offline
Shinさんありがとうございます。
>>集計したい項目が複数あるのですよね。その項目ごとのレコード数がお欲しいのでしょうか。
具体的に言うと、集計項目は二つで、頭文字二ケタと五ケタの値のカウントをしたいです。
繰り返しの方法いいと思いました。しかし最大値が32000ですので、それ以上のレコード数の場合は難しいですよね。
>> valuelistitemを使い、対象数をloopする
いまはこの方法を利用して、検索→全置換をLOOPした方が早いような気がしています。
Offline
頭文字二ケタと五ケタの値のカウントですと、最大100万区分になるのですか。
Offline
何をしてるのか今一わかりにくいですね。
>集計項目は二つ
集計の区分けが2つ?自己リレーションに2つのフィールドで結合してるってことですか?
しかし、カウントという言葉は集計結果として使ってましたから、
頭文字2桁を区分けにして(リレーションキーにして)、最大5桁のカウント(レコード数)ということ?
例えば
あああ
ああい
あいい
というレコードがあれば、
ああ:2件
あい:1件
となる。
しかしこれを全置換で求めるのは、2レコードの
あああ 2
ああい 2
と同じ結果を複数レコードに入れることになって、無駄な処理をしています。
検索に使うというから、例えば「2」で検索した結果
あああ
ああい
を対象レコードにしたい、ということであれば、全然別のやり方も考えられます。
Shinさん、himadaneeさん、ありがとうございます。
>>しかしこれを全置換で求めるのは、2レコードの
>>あああ 2
>>ああい 2
>>同じ結果を複数レコードに入れることになって、無駄な処理をしています。
himadaneeさんが仰るとおりの検索結果を求めたいです。
たしかに、無駄な処理をしているのですが、一つ一つのレコードが固有のレコードになっています。
そして、全置換後(集計結果)に集計結果の個数に応じて処理をしたいと考えています。
>>検索に使うというから、例えば「2」で検索した結果
>>あああ
>>ああい
>>を対象レコードにしたい、ということであれば、全然別のやり方も考えられます。
対象の頭文字は数字の羅列ですが可能ですか
Offline
11001
11002
12001
12002
22001
みたいな感じになっていて、11, 12, 22 でカウントしたい、ということでしょうか。続く残りの数字は間径ないのですね。
Left ( 数字 ; 2 )
という計算フィールドを作っておき、集計するのが簡単なのでは。
https://www.dropbox.com/scl/fi/357xiliy … xzwg7&dl=0
Last edited by Shin (2023-11-11 12:01:20)
Offline
Shinさんありがとうございました。
結果的に、sqlのselect文を利用した全置換が一番早かったです。
みなさん、ありがとうございました。
Offline
Pages: 1
[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 542.44 KiB (Peak: 563.34 KiB) ]