みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっております。
使用環境FM18 win10です。
検査予定を入力するテーブルがあり週キーという計算式フィールド(次回検査日 - DayOfWeek(次回検査日) + 1)と週起算日というgフィールドで自動入力(Self - DayOfWeek(Self) + 1)が自己リレーションされております。
それをポータル7×5で5週間分作成し表示させているのですが、現在700レコード超えかなり動作が重いです…。
過去のデータを削除する以外に良い対策はないでしょうか?
よく理解できません。
かかれたリレーションは
「=」の照合ですか?
とすればわざわざ日曜日に統一する必要はないと思いますが。。
> ポータル7×5で5週間分
これも分かりません。。
Offline
> 週起算日というgフィールドで自動入力(Self - DayOfWeek(Self) + 1)
これはグローバルフィールドなんですか。また、self は、実際にはどの様な値が入っていますか。
週単位で管理するのでしたら、Div ( 日付 ; 7 ) が一番簡単ですよ。
ポータルが遅いのは、それらのフィールドにに索引が設定されていないためなのかも。(と思うけど、たった700レコードくらいではちょっと考えにくい)
Offline
ポータルとは関係なく、何か「1つ前のレコードを参照」するような非保存の計算フィールドがあるのかもしれませんね。
分かりにくくすみません。
=の称号です。
日曜始まりのカレンダーの様な表示にしたく日曜日に統一しております。
日付を繰り返しフィールドで一週間分表示しその下に一日一ポータルで表示させています。
1週間は7日なので横並びに7個、それを5列配置させているということです。
カレンダーのような配置ということです。
よく理解できません。
かかれたリレーションは
「=」の照合ですか?
とすればわざわざ日曜日に統一する必要はないと思いますが。。> ポータル7×5で5週間分
これも分かりません。。
追記
週起算日[1] + (Get(計算式繰り返し位置番号) - 1) を繰り返しフィールドで一週目を表示
週起算日[1] + (Get(計算式繰り返し位置番号) - 1) + 7で2週目といったふうに、計算フィールドを使用しています。
計算フィールドの繰り返しは、大量の計算を行うことになるので、非常に時間がかかります。
さらに、その結果を元にしてポータルを表示しているようなので、さらに遅くなります。
そのポータルの内容は、全ての検査予定を日毎に表示させているのでしょうか。
Last edited by Shin (2023-03-24 08:54:44)
Offline
何となくわかったような感じはしますが、、、
繰り返し7の計算フィールドが5個
ポータルが35個
だとして、繰り返しフィールドはその表示のリレーションには使えない(全部の繰り返しが関連してしまう)ので、ポータルに全部フィルタがあって遅くなってるのかな?
ポータルが35個だけでも重いかもしれないが、そこは表示したいものがそうだとすれば譲れないでしょうから...
ポータルの関連レコード取得は索引が使えますから速度が最適化されますが、フィルタを使うと全部の関連レコードで毎回計算が発生してしまいます。
himadaneeさんの通り、
繰り返しフィールドでは、照合に使えないだろうし、、
フィルターにしても使えそうもないけれど。。
単に日付の表示に使うだけなのかな?
とするとポータルはどのように?
いずれにせよ35個のポータルを配置はどうなんでしょう?
Offline
いつもありがとうございます。
日毎に表示させています。なので過去のものは表示しないような仕組みにフィルタをかければ改善されるでしょうか?
フィルタが重くなっているからフィルタだとだめですかね…。
計算フィールドの繰り返しは、大量の計算を行うことになるので、非常に時間がかかります。
さらに、その結果を元にしてポータルを表示しているようなので、さらに遅くなります。
そのポータルの内容は、全ての検査予定を日毎に表示させているのでしょうか。
まさにどうです。
全てのポータルに
カレンダー表示1週目::次回検査日 = 検査予定::日付配列1週目[1]
and
カレンダー表示1週目::曜日_表示用 = "AM"
というフィルタがかかっております。
そしてさらにAMとPMでわけてポータルをさらに作っており70個ポータルありました…
何となくわかったような感じはしますが、、、
繰り返し7の計算フィールドが5個
ポータルが35個
だとして、繰り返しフィールドはその表示のリレーションには使えない(全部の繰り返しが関連してしまう)ので、ポータルに全部フィルタがあって遅くなってるのかな?
ポータルが35個だけでも重いかもしれないが、そこは表示したいものがそうだとすれば譲れないでしょうから...
ポータルの関連レコード取得は索引が使えますから速度が最適化されますが、フィルタを使うと全部の関連レコードで毎回計算が発生してしまいます。
フィルタをかけているポータルを70個配置
これがもたつきの原因なのは間違いないでしょう。
ポータルを減らせないのか
フィルタをなくせないのか
等検討されたらいかがでしょう。
Offline
そうすると、まずはフィルタのないポータル70個で期待する軽さで動くかどうか実験ですかね...
(各ポータル内に表示する行数が14倍ぐらいになるわけだから、データを減らさないと実験として不適?)
OKならリレーションを工夫するだけでいいし、
NGなら、ポータル以外の方法を検討しないといけないが、表示だけでなく編集するとしたら、やっかい?
(編集に入る時だけポータルを表示する、とかできるかな。)
ポータルが70もあり、それぞれでフィルター付き、しかもそのフィルターの中で大量の計算をしているのですから、膨大な計算量でしょう。
ポータルを全く使わない作例です。繰り返しフィールドへデータ展開して、リレーション先をクロス集計しています。
https://www.dropbox.com/s/loz2b8n8sy8p7 … 2.zip?dl=0
表示対象が1000くらいになると、表示に0.5秒程度かかりますが、許せる範囲でしょう。
もし、この一覧の中をクリックして予約をいれようとしているのでしたら、その日の午前又は午後の一覧をリスト表示して、そこに追加する、という方法がいいと思います。
Last edited by Shin (2023-03-24 15:58:39)
Offline
Shinさんのサンプルを参考に変更させていただき劇的に改善しました。
みなさんありがとうございました!
勉強になりました!
ポータルが70もあり、それぞれでフィルター付き、しかもそのフィルターの中で大量の計算をしているのですから、膨大な計算量でしょう。
ポータルを全く使わない作例です。繰り返しフィールドへデータ展開して、リレーション先をクロス集計しています。
https://www.dropbox.com/s/loz2b8n8sy8p7 … 2.zip?dl=0
表示対象が1000くらいになると、表示に0.5秒程度かかりますが、許せる範囲でしょう。
もし、この一覧の中をクリックして予約をいれようとしているのでしたら、その日の午前又は午後の一覧をリスト表示して、そこに追加する、という方法がいいと思います。
カレンダーの表示に隠し機能を仕込んでありますので、貯めしてみてください。
Offline
その日の該当者だけが絞り込まれる機能ですよね?
追加でこんなものまで仕込んでいただき感動しました。
ありがとうございます。使わせていただきます!
カレンダーの表示に隠し機能を仕込んでありますので、貯めしてみてください。
それだけではないですよ。カレンダーの日付をクリックすると....
Offline
Pages: 1
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 597.52 KiB (Peak: 614.42 KiB) ]