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

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

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

You are not logged in.

Announcement

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


#1 2014-01-23 11:57:09

ka
Guest

リレーション先の値を含む計算結果を保存したい

リレーション先の値を含む計算結果を保存したいのですができますでしょうか?
それを沢山含む集計が遅くなってきて困っています。

出来ればリレーション先の値が変更された時のみ再計算されて欲しいのですが、
それができない場合も何処か別のフィールドに保存し、
それを参照するときは再計算されないようにしたいのですが出来ますでしょうか?

(実はスクリプトとトリガーを使って別のフィールドに保存しようとした事があったのですが、
私にはトリガーのタイミングが色々とシビアで使いこなせませんでした。。)

#2 2014-01-23 12:05:22

counter
Guest

Re: リレーション先の値を含む計算結果を保存したい

テーブル::フィールド
の代わりに
GetField("テーブル::フィールド")
と書けば保存されます。
あるいは、式全体をEvaluate()に入れる。こっちは、引数で指定しないと現在のテーブルのフィールドの変更も無視するようになる。

集計結果をエクスポートしておく方が簡単かも?

#3 2014-01-23 13:13:03

Shin
Member

Re: リレーション先の値を含む計算結果を保存したい

リレーション先の値が変更されたかどうかを検知する方法が無いので、非保存にするしか無いでしょうね。
保存にするのでしたら、集計前に全置換する、Evaluate() などで再計算させる、という方法か、リレーション先の値変化で、OnObjectModify トリガーで書き換えるなどしか無いでしょう。

集計が、抽出作業なのでしたら、関連先テーブルで抽出しておいて、関連レコードで移動 を行なって抽出する、という2段階の方法が取れるかもしれません。

Offline

#4 2014-01-24 15:29:21

ka
Guest

Re: リレーション先の値を含む計算結果を保存したい

みなさんありがとうございます。

>テーブル::フィールド
>の代わりに
>GetField("テーブル::フィールド")
>と書けば保存されます。
GetFiled(ある集計フィールド)としたとき、索引オプションで保存の設定がやはり出来ないのですが、
その事ではないのでしょうか?

>Evaluate()に入れる
今回の場合、evaluate()を含む事になる集計式は商品テーブルに置かれて、そこから売上テーブルや仕入テーブルが絞られています。
evaluateの第二引数に売上や仕入の集計フィールドを入れる事になるのですが(sum(仕入)-sum(売上)で在庫を計算するため)、
evaluateを見る度に結局それらの再集計が行われるのではないかと思うのですがそういうことではないのでしょうか?

>集計結果をエクスポートしておく方が簡単かも?
売上や仕入に変更があった時、そのレコードだけをエクスポートするということでしょうか?
スクリプトで行う場合、削除する時トリガーがないので難しいんですよね。。
また、そのレイアウトからだけ変更するとは限らないので危ういのです。
ただ一日の入力作業が終わった時に集計ボタンの様なものを押して、
エクスポートするのは最終手段として良いかもしれません!

>集計前に全置換する、
ごめんなさい分かりません。。

>集計が、抽出作業なのでしたら、関連先テーブルで抽出しておいて、関連レコードで移動 を行なって抽出する、という2段階の方法が取れるかもしれません。
これも分かりませんバカですいません。。。

#5 2014-01-24 16:05:51

counter
Guest

Re: リレーション先の値を含む計算結果を保存したい

>GetFiled(ある集計フィールド)
フィールド参照でなくテキスト定数にするから保存されるんで、
GetFiled("ある集計フィールド")
と書かないとだめです。

#6 2014-01-24 17:01:05

チポ
Member

Re: リレーション先の値を含む計算結果を保存したい

リレーション先の参照フィールドを使った計算式で、
その索引保存と、参照フィールドの変化に追随
の両方を満たすことはできないでしょう。


> それを沢山含む集計が遅くなってきて困っています
どのような集計なんでしょう?

Offline

#7 2014-01-27 00:43:49

ka
Guest

Re: リレーション先の値を含む計算結果を保存したい

みなさまありがとうございます。

>GetFiled("ある集計フィールド")
>と書かないとだめです。
分かりました。そう書き直して索引保存設定をしてテーブル設定からも出ると早速索引作成が始まって、
全レコードのその時点の値が固定されました!

>> それを沢山含む集計が遅くなってきて困っています
>どのような集計なんでしょう?
売上数を集計するとか仕入数を集計するだけなら、商品テーブルから各々を絞ってsumをすれば
そんなに遅くはないのですが、例えば仕入数計算-売上数計算で在庫数を計算するとき、
再び売上数や仕入数が要り、売上構成比を出す場合売上の全集計と当商品の売上集計が
再び要り、全在庫数との割合等も出す場合、その都度再計算再集計されているから遅い
集計なのだと思います。

で、その商品の在庫数や全在庫数を使った計算もする場合、再計算する量も多いと思いますが、
結局どこかのレコードが変更になった時に結局再計算は逃れられないし、索引もそうなら、
やはり使い捨てで商品毎の集計や他計算を含むエクスポートを作り、それを別の角度から
索引、集計、分析したり商品一覧として使う事にします。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 519.77 KiB (Peak: 524.3 KiB) ]