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

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

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

You are not logged in.

Announcement

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


#1 2023-11-06 17:13:31

msk
Member

自己リレーションのカウント方法

環境
FM12
WIN10 or MAC

お世話になっております。
テーブルとテーブル2(自己リレーション)を利用し、対象レコード数をcountするのに全置換【count(テーブル2::自己リレ)】で計算させています。
この場合、フィールド「自己リレ」の対象レコード数が多いと時間がかかってしまいます。
valuelistitemを使い、対象数をloopすることは考えたのですが、もっと早くなる全置換方法はあるのでしょうか。
ご教授いただきたいです。

Offline

#2 2023-11-06 19:25:54

himadanee
Guest

Re: 自己リレーションのカウント方法

FMで「対象レコード」というのは、検索結果のことを言うので、自己リレーションでは得られませんが、「関連レコード数」とどっちを数えたいんでしょうか。

「対象レコード数をcount」であれば、Get(対象レコード数)で出ます。
これは全レコードに対して1つの数字なので、「全置換」する意味は全くありません。(同じ数字を全レコードに入れることになります)

書いてるような全置換が必要だとしたら「全対象レコードの各関連レコード数」ということになりますが...
全置換しなくても計算フィールドでも出ますよね。その結果を検索したりしないなら計算フィールドでいいと思いますが...
必要な時に計算するので余計な時間はかかりません。(対象レコード数が多いと時間がかかるのは、必要な時間ということになる)

#3 2023-11-10 13:26:45

msk
Member

Re: 自己リレーションのカウント方法

himadaneeさんありがとうございます。
>>書いてるような全置換が必要だとしたら「全対象レコードの各関連レコード数」ということになりますが...
>>全置換しなくても計算フィールドでも出ますよね。その結果を検索したりしないなら計算フィールドでいいと思いますが...
たしかに、計算フィールドでしたら計算値は早くでました。
しかし、その結果を検索したいために全置換で考えていました。

>>対象レコード数が多いと時間がかかるのは、必要な時間ということになる
やはり時間がかかってしまうのはしょうがないですね

Offline

#4 2023-11-10 16:35:54

Shin
Member

Re: 自己リレーションのカウント方法

具体的にどのような集計を行っているのですか。
> valuelistitemを使い、対象数をloopする
集計したい項目が複数あるのですよね。その項目ごとのレコード数がお欲しいのでしょうか。

一般的には、全レコードで何らかの値が入っている適当なフィールドをカウントする集計フィールドを作ります。
新しいレイアウトを作り、項目をキーとする小計パートのみを作ります。そのパートに項目フィールドと上の集計フィールドを配置します。項目でソートすると分別されてカウントされます。

または、その項目を値一覧(カスタム値にしておいたほ方が集計は早くなりますが)にしておき、1項目ずつ繰り返しフィールド「項目名」に振り分けておきます。
計算フィールド(繰り返し) 項目名 = 項目[1] を作り、それを個別に合計する集計フィールドを作り、ヘッダ、フッタ、総計パートなどに配置します。
全レコードを対象にして、その集計フィールドをみれば、項目ごとのカウントがでていますよ。(リレーションはいりません)

FM12 は、大きくファイル構造が大きく変わった最初のバージョンで、不具合が多く残っています。また、集計などの速度も遅いような気がします。サポートも切れていますし、使わない方がいいですよ。(私は、このバージョンは業務では使いませんでした。)

Last edited by Shin (2023-11-10 16:45:27)

Offline

#5 2023-11-10 18:05:32

msk
Member

Re: 自己リレーションのカウント方法

Shinさんありがとうございます。
>>集計したい項目が複数あるのですよね。その項目ごとのレコード数がお欲しいのでしょうか。
具体的に言うと、集計項目は二つで、頭文字二ケタと五ケタの値のカウントをしたいです。

繰り返しの方法いいと思いました。しかし最大値が32000ですので、それ以上のレコード数の場合は難しいですよね。

>> valuelistitemを使い、対象数をloopする
いまはこの方法を利用して、検索→全置換をLOOPした方が早いような気がしています。

Offline

#6 2023-11-10 18:46:31

Shin
Member

Re: 自己リレーションのカウント方法

頭文字二ケタと五ケタの値のカウントですと、最大100万区分になるのですか。

Offline

#7 2023-11-10 18:58:40

himadanee
Guest

Re: 自己リレーションのカウント方法

何をしてるのか今一わかりにくいですね。
>集計項目は二つ
集計の区分けが2つ?自己リレーションに2つのフィールドで結合してるってことですか?

しかし、カウントという言葉は集計結果として使ってましたから、
頭文字2桁を区分けにして(リレーションキーにして)、最大5桁のカウント(レコード数)ということ?
例えば
あああ
ああい
あいい
というレコードがあれば、
ああ:2件
あい:1件
となる。

しかしこれを全置換で求めるのは、2レコードの
あああ 2
ああい 2
と同じ結果を複数レコードに入れることになって、無駄な処理をしています。

検索に使うというから、例えば「2」で検索した結果
あああ
ああい
を対象レコードにしたい、ということであれば、全然別のやり方も考えられます。

#8 2023-11-11 09:59:31

msk
Member

Re: 自己リレーションのカウント方法

Shinさん、himadaneeさん、ありがとうございます。
>>しかしこれを全置換で求めるのは、2レコードの
>>あああ 2
>>ああい 2
>>同じ結果を複数レコードに入れることになって、無駄な処理をしています。
himadaneeさんが仰るとおりの検索結果を求めたいです。
たしかに、無駄な処理をしているのですが、一つ一つのレコードが固有のレコードになっています。
そして、全置換後(集計結果)に集計結果の個数に応じて処理をしたいと考えています。

>>検索に使うというから、例えば「2」で検索した結果
>>あああ
>>ああい
>>を対象レコードにしたい、ということであれば、全然別のやり方も考えられます。
対象の頭文字は数字の羅列ですが可能ですか

Offline

#9 2023-11-11 11:42:30

Shin
Member

Re: 自己リレーションのカウント方法

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

#10 2023-12-02 16:31:56

msk
Member

Re: 自己リレーションのカウント方法

Shinさんありがとうございました。
結果的に、sqlのselect文を利用した全置換が一番早かったです。
みなさん、ありがとうございました。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 11 queries executed - Memory usage: 542.49 KiB (Peak: 563.4 KiB) ]