みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
ページ: 1
はじめまして。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個。あるので、できるだけフィールド数を減らしたいです。
宜しくお願いします。
えおの集計側の数字は正しいですか?
おそらく、究極の省フィールドのサンプルです。4フィールドの追加だけで、すべての集計を行っています。設定の変更で、30×50になっても対応できます。
https://www.dropbox.com/s/rvyrptu7f46we … 2.zip?dl=0
集計結果が1個の繰り返しフィールドになっているので、保存は簡単でしょう。ただ、その後利用によっては、分解する必要があるかもしれませんので、具体的な運用を示してもらえませんか。
編集者 Shin (2023-05-22 15:37:23)
オフライン
チポ様、返信ありがとうございます。
>この1フィールドを1レコードとする別テーブルにします。
レコードが30万件ほどあり、また日常的にこのフィールドにて検索することがあるので、
リレーションではなく、この形にしています。
ただ確かに、別テーブルにしたほうが、クロス集計できますし、
今後他の集計にも助かりそうに思いますので、検討してみます。
どの方法が、検索や集計計算に時間がかからないか、いろいろ試してみます。
Shin様、返信ありがとうございます。
>えおの集計側の数字は正しいですか?
正しくないです。例題なのに、間違っておりすいません。
サンプルありがとうございます。
素晴らしいです。
計算式をまだ理解しておりませんが、中身勉強して、一度これでやってみます。
利用としては、別テーブル「報告書」にて、月1回、その時の集計数値を保存していく(ルックアップでもってくる予定)。
またその後利用ですが、数値毎集計の合計(数値1,2の合計、数値3,4,5の合計・平均など)を表示しますが、これはできそうです。
現在レコードが30万件あるので、どの方法が早いのか、いろいろと試してみます。
> 月1回、その時の集計数値を保存していく
その時の、というのが、その時点での過去すべてのレコードの集計ですか?それとも月ごとの集計ですか?
保存してもいいですが、長い目で見て不要なテーブルですよ。
> 数値毎集計の合計(数値1,2の合計、数値3,4,5の合計・平均など)を表示します
元データから集計させればいいのでは。
そのためには、チポさんの提案どおりに、全て別テーブルで1フィールドを1レコードとする別テーブルにします。元のテーブルデータに修正が入ることがないのでしたら、別テーブルにデータをインポートしてしまえばいいでしょうが、修正が入るのでしたら、それを別テーブルに反映させる仕組みが必要ですが、いかがでしょう。
編集者 Shin (2023-05-22 15:37:37)
オフライン
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カウント
⑤スクリプトで集計を貼り付け
検索して、集計を貼り付けるのをフィールド分繰り返す
作成して試していこうと思いますが、もしどれが計算はやいかなど検討つくのであれば、教えていただけますでしょうか。
レコードや集計数が膨大なので、多少は計算時間かかるのはやむを得ないとは思っていますが、、
1テーブルのサンプルは、「できるだけフィールド数を減らしたいです。」にのみ対応したものですので、忘れてもらっていいでしょう。30項目30万レコードですと、900万の集計を50回行うことになります。
> 「報告書を出した数値データを、履歴として残していきたい」の依頼で、別テーブルにて保存を考えています。
報告書として出してしまっていますので、PDFなどで保存しておくのが現実的だと思いますが。集計データを書き出しておくことはできますので、それを別のテーブルに取り込んでおいてもいいかもしれません。ただ、データとしての利用価値がありますか。
> この集計数値とはまったく別の数値を表示や入力、計算がありそうです(内容は検討中の段階です)。
過去の時点での再集計ですか?
>修正は、日々はいります。
これが、過去に入力されたレコードの修正だとすると、これらを合わせて対応させるには、全てのレコードの履歴管理が必要で、それを組み込むと集計速度が相当おちることになります。
各集計時の集計データを書き出しておくことはできますので、これを加工して済む範囲でしたら対応できるとは思いますが。
レコードを分解してクロス集計するサンプルファイルを上げてます。そちらでしたら程々早い集計ができると思います。お試しください。
https://www.dropbox.com/s/rvyrptu7f46we … 2.zip?dl=0
編集者 Shin (2023-05-22 16:12:57)
オフライン
1フィールドを1レコードとする別テーブルは
30万x30 = 900万レコードになりますが、
そんな大きなテーブルを扱ったことがないので、
そのレコード数がどのような影響を及ぼすのか分かりませんが、、
テーブルAの全フィールドをなくして、
上記の別テーブルをポータルで表示、入力
とすれば修正に対する同期の問題はなくなります。
ポータルを横表示にするには、レイアウト作成で手間がかかりますが、
一回だけなので良しとします。
その集計は、別テーブルで
1項目&1数値
ごとに1レコードとして、
リレーションで集計すればノータッチで集計できますよね。
その集計ごとに
30項目 x 50数値 = 1500レコード
作ることになりますが、スクリプトで自動化できますよね。
この集計を積み重ねてゆくと考えれば、
30万レコードを振り回す必要もなくなるのではないかな。。
オフライン
チポ様、Shin様
返信ありがとうございます。
テストファイル(15項目×10数値)として、別テーブル作成、インポートして、クロス集計しました。
また、さらに別テーブルにて、数値分レコード作成して、クロス集計してみました。
>①フィールドを数値分作成
よりも各段に早くなり、10分⇒1分程度でした。
実際、すべてのフィールドに数値が入力されているわけではない(3万×30ではない)ので、
数値入力のみ、別テーブルに作成するとすれば、レコード数は少なくてすみそうです。
また、リレーションでの数値検索も、思ったよりも時間かからなそうなので、
別テーブル作成に変更しようと思います。
ありがとうございました。
ページ: 1