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

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

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

You are not logged in.

Announcement

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


#1 2023-05-19 12:37:01

yosi
Guest

集計数値を別テーブルにて表示したい

はじめまして。win10,Pro18利用です。

テーブルAにフィールド7個:あ,い,う,え,お
それぞれに、数値を入力しています。
別テーブルBにその数値毎にカウントするにはどうすればいいでしょうか。

【テーブルA】
あ,い,う,え,お
2,1,5,4,1
4,1,3,1,2
4,2,3,2,2

【テーブルB】
数:あ,い,う,え,お
1:0,2,0,0,0
2:1,1,0,0,2
3:0,0,2,0,0
4:2,0,0,1,0
5:0,0,1,0,0

テーブルAにて、以下計算式を作成して、パート「後部統計」に集計をだすことでほしい数値は作成できました。
数値1[5]:
Case (
Get ( 計算式繰り返し位置番号 ) = 1 and Extend ( あ ) = 1;Extend ( あ );
Get ( 計算式繰り返し位置番号 ) = 2 and Extend ( い ) = 1;Extend ( い );
Get ( 計算式繰り返し位置番号 ) = 3 and Extend ( う) = 1;Extend ( う );
Get ( 計算式繰り返し位置番号 ) = 4 and Extend ( え ) = 1;Extend ( え );
Get ( 計算式繰り返し位置番号 ) = 5 and Extend ( お ) = 1;Extend ( お );
)
数値1集計[5]:数値1カウント

この数値1集計の数値を、表示ではなく、
その時(スクリプトを押したとき、テーブルAの全レコード)の数値を保存していきたいので、別テーブルにて利用したいです。

繰り返しは使用しないほうがよいのでしょうか。
あ、い、う…は実際は、30個。
数値は実際は、50個。あるので、できるだけフィールド数を減らしたいです。

宜しくお願いします。

#2 2023-05-19 15:07:21

チポ
Member

Re: 集計数値を別テーブルにて表示したい

書かれた方法では、面倒な計算式を50作ることになりますよね。。

>あ、い、う…は実際は、30個
これが面倒の元ですから、
この1フィールドを1レコードとする別テーブルにします。

さらに1フィールドと、1値
ごとに1レコードとするテーブルを作り、
上記のテーブルとリレーションで集計が求められます。

このテーブルをクロス集計等で、
横に30行、縦に50段
にすればいいでしょう。

Offline

#3 2023-05-19 17:05:56

Shin
Member

Re: 集計数値を別テーブルにて表示したい

えおの集計側の数字は正しいですか?

おそらく、究極の省フィールドのサンプルです。4フィールドの追加だけで、すべての集計を行っています。設定の変更で、30×50になっても対応できます。
https://www.dropbox.com/s/rvyrptu7f46we … 2.zip?dl=0
集計結果が1個の繰り返しフィールドになっているので、保存は簡単でしょう。ただ、その後利用によっては、分解する必要があるかもしれませんので、具体的な運用を示してもらえませんか。

Last edited by Shin (2023-05-22 15:37:23)

Offline

#4 2023-05-22 10:03:22

yosi
Guest

Re: 集計数値を別テーブルにて表示したい

チポ様、返信ありがとうございます。

>この1フィールドを1レコードとする別テーブルにします。
レコードが30万件ほどあり、また日常的にこのフィールドにて検索することがあるので、
リレーションではなく、この形にしています。

ただ確かに、別テーブルにしたほうが、クロス集計できますし、
今後他の集計にも助かりそうに思いますので、検討してみます。
どの方法が、検索や集計計算に時間がかからないか、いろいろ試してみます。

#5 2023-05-22 10:27:47

yosi
Guest

Re: 集計数値を別テーブルにて表示したい

Shin様、返信ありがとうございます。

>えおの集計側の数字は正しいですか?
正しくないです。例題なのに、間違っておりすいません。

サンプルありがとうございます。
素晴らしいです。
計算式をまだ理解しておりませんが、中身勉強して、一度これでやってみます。
利用としては、別テーブル「報告書」にて、月1回、その時の集計数値を保存していく(ルックアップでもってくる予定)。
またその後利用ですが、数値毎集計の合計(数値1,2の合計、数値3,4,5の合計・平均など)を表示しますが、これはできそうです。
現在レコードが30万件あるので、どの方法が早いのか、いろいろと試してみます。

#6 2023-05-22 12:02:04

Shin
Member

Re: 集計数値を別テーブルにて表示したい

> 月1回、その時の集計数値を保存していく
その時の、というのが、その時点での過去すべてのレコードの集計ですか?それとも月ごとの集計ですか?
保存してもいいですが、長い目で見て不要なテーブルですよ。

> 数値毎集計の合計(数値1,2の合計、数値3,4,5の合計・平均など)を表示します
元データから集計させればいいのでは。

そのためには、チポさんの提案どおりに、全て別テーブルで1フィールドを1レコードとする別テーブルにします。元のテーブルデータに修正が入ることがないのでしたら、別テーブルにデータをインポートしてしまえばいいでしょうが、修正が入るのでしたら、それを別テーブルに反映させる仕組みが必要ですが、いかがでしょう。

Last edited by Shin (2023-05-22 15:37:37)

Offline

#7 2023-05-22 14:30:40

yosi
Guest

Re: 集計数値を別テーブルにて表示したい

Shin様、返信ありがとうございます。

集計は、その時点でのすべてのレコードの集計になります。
職員から、「報告書を出した数値データを、履歴として残していきたい」の依頼で、別テーブルにて保存を考えています。
また、この集計数値とはまったく別の数値を表示や入力、計算がありそうです(内容は検討中の段階です)。

>全て別テーブルで1フィールドを1レコードとする別テーブル
修正は、日々はいります。
スクリプトトリガで、修正があったら、別テーブルのデータも変更するといった感じでしょうか。
リレーションだと、検索に時間がかかるようになって、苦情がきそうです。

先ほど、Shinさんからのファイルでのフィールドを、実際のファイルでテストしてみました。
ほしい数値がでました。少ないフィールドで、ありがとうございます!
ただ、集計にものすごく時間がかかりまして、他の案(下記)も試していこうと思っています。

①フィールドを数値分作成。
数値1[5]:Case (
Get ( 計算式繰り返し位置番号 ) = 1 and Extend ( あ ) = 1;Extend ( あ );
Get ( 計算式繰り返し位置番号 ) = 2 and Extend ( い ) = 1;Extend ( い );
Get ( 計算式繰り返し位置番号 ) = 3 and Extend ( う) = 1;Extend ( う );
Get ( 計算式繰り返し位置番号 ) = 4 and Extend ( え ) = 1;Extend ( え );
Get ( 計算式繰り返し位置番号 ) = 5 and Extend ( お ) = 1;Extend ( お );
)
数値1集計[5]:数値1カウント

②1フィールドを1レコードとする別テーブル
クロス集計

③Shinさんの計算:4フィールド
date:ValueListItemsをやめて、計算式に直接入力して、非保存をやめる

④フィールドを数値と項目ごと分作成
あ1:Case(あ=1;あ)
あ1集計:あ1カウント

⑤スクリプトで集計を貼り付け
検索して、集計を貼り付けるのをフィールド分繰り返す

作成して試していこうと思いますが、もしどれが計算はやいかなど検討つくのであれば、教えていただけますでしょうか。
レコードや集計数が膨大なので、多少は計算時間かかるのはやむを得ないとは思っていますが、、

#8 2023-05-22 15:28:55

Shin
Member

Re: 集計数値を別テーブルにて表示したい

1テーブルのサンプルは、「できるだけフィールド数を減らしたいです。」にのみ対応したものですので、忘れてもらっていいでしょう。30項目30万レコードですと、900万の集計を50回行うことになります。

> 「報告書を出した数値データを、履歴として残していきたい」の依頼で、別テーブルにて保存を考えています。
報告書として出してしまっていますので、PDFなどで保存しておくのが現実的だと思いますが。集計データを書き出しておくことはできますので、それを別のテーブルに取り込んでおいてもいいかもしれません。ただ、データとしての利用価値がありますか。

> この集計数値とはまったく別の数値を表示や入力、計算がありそうです(内容は検討中の段階です)。
過去の時点での再集計ですか?
>修正は、日々はいります。
これが、過去に入力されたレコードの修正だとすると、これらを合わせて対応させるには、全てのレコードの履歴管理が必要で、それを組み込むと集計速度が相当おちることになります。
各集計時の集計データを書き出しておくことはできますので、これを加工して済む範囲でしたら対応できるとは思いますが。

レコードを分解してクロス集計するサンプルファイルを上げてます。そちらでしたら程々早い集計ができると思います。お試しください。

https://www.dropbox.com/s/rvyrptu7f46we … 2.zip?dl=0

Last edited by Shin (2023-05-22 16:12:57)

Offline

#9 2023-05-23 14:07:25

チポ
Member

Re: 集計数値を別テーブルにて表示したい

1フィールドを1レコードとする別テーブルは
30万x30 = 900万レコードになりますが、
そんな大きなテーブルを扱ったことがないので、
そのレコード数がどのような影響を及ぼすのか分かりませんが、、

テーブルAの全フィールドをなくして、
上記の別テーブルをポータルで表示、入力
とすれば修正に対する同期の問題はなくなります。

ポータルを横表示にするには、レイアウト作成で手間がかかりますが、
一回だけなので良しとします。

その集計は、別テーブルで
1項目&1数値
ごとに1レコードとして、
リレーションで集計すればノータッチで集計できますよね。

その集計ごとに
30項目 x 50数値 = 1500レコード
作ることになりますが、スクリプトで自動化できますよね。
この集計を積み重ねてゆくと考えれば、
30万レコードを振り回す必要もなくなるのではないかな。。

Offline

#10 2023-05-23 15:00:43

Shin
Member

Re: 集計数値を別テーブルにて表示したい

30万レコードで30フィールドのテーブルが、既にあるのでしょう。
3万×30フィールドのテストレコード(公開したサンプルファイルです)を作ってみましたが、フィールドをばらした別テーブルへのインポートに20分ほどかかりました。30万レコードだと多分3時間ほどかかるでしょう。
そればできてしまえば、集計と項目ごとの平均は、数十秒程度で計算できました。30万レコードだと数分以内でしょう。
どの程度の処理速度を期待しておられますか。

Offline

#11 2023-05-24 17:35:51

yosi
Guest

Re: 集計数値を別テーブルにて表示したい

チポ様、Shin様

返信ありがとうございます。
テストファイル(15項目×10数値)として、別テーブル作成、インポートして、クロス集計しました。
また、さらに別テーブルにて、数値分レコード作成して、クロス集計してみました。

>①フィールドを数値分作成
よりも各段に早くなり、10分⇒1分程度でした。

実際、すべてのフィールドに数値が入力されているわけではない(3万×30ではない)ので、
数値入力のみ、別テーブルに作成するとすれば、レコード数は少なくてすみそうです。
また、リレーションでの数値検索も、思ったよりも時間かからなそうなので、
別テーブル作成に変更しようと思います。

ありがとうございました。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 554.52 KiB (Peak: 575.42 KiB) ]