みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になります。
先日質問した https://fm-aid.com/bbs2/viewtopic.php?id=863 の続きになりますが、題目が変わりますので別トピックとさせていただきました。
◯リレーション
物質マスタと、材料は、構成物質含有率テーブルを介して多対多の関係になっています。
材料と部署は購入量テーブルを介して多対多の関係になっています。
物質マスタ <->> 構成物質含有率 <<-> 材料 <->> 購入重量 <<-> 部署
物質マスタから対象物質を検索し、その物質を含有する材料の部署ごとの購入重量ごとに物質の含有質量を求める集計を行います。
◯現在の手順
(1) 物質マスタから一つだけ物質を検索特定
(2) 検索された物質から「関連レコードへ移動」を使い、構成物質含有率レイアウトに構成物質含有率を表示
(3) さらに構成物質含有率レイアウトから「関連レコードへ移動」を使い、購入重量レイアウトに購入重量を表示
(4) 購入重量テーブルには購入物質量というフィールドが設定されており、「購入量 * 構成物質含有率 * .01」という計算式が入っている。この場合の構成物質含有率は、(2)で表示されている構成物質含有率を利用
◯問題点
(3)までの、関連レコードへ移動で、目的とする購入重量レコードまでは辿りつけているのですが、そこの購入物質量フィールドの計算で、構成物質含有率が(2)で表示されたレコードから利用されるのではなく、まったく別のレコードのものが利用されます。
テーブルオカレンスというのは、一時的なデータの格納という認識だったのですがそもそも間違いなのでしょうか?
◯例
(1)物質Xを検索
(2)構成物質含有率テーブルで物質Xの関連レコードを表示
材料A 10%
材料B 25%
材料C 21%
(3)(2)の関連レコードを購入重量レイアウトに表示
材料A 部署a 10kg
材料A 部署b 5kg
材料B 部署a 90kg
材料B 部署b 100kg
材料B 部署c 65kg
材料C 部署b 1kg
(4)物質Xは部署aでどれだけの重量購入されているのかを集計
(10kg x 10% x 0.01)+ (90kg x 25% x 0.01) = 23.5kg
という計算をしたいのですが、上記割合部分が(2)で表示されている含有率を利用したいのですが、材料Aに含まれる別物質の含有率が利用されてしまいます。
上記のような状況で、目的のデータを取り出すにはどのようにすべきでしょうか?
よろしくお願いいたします。
環境(Win7、FMP Advanced 12)
Offline
材料テーブルから見た構成物質含有率テーブルは多側なので、構成物質含有率::フィールド
という参照は関連レコードの先頭のものになります。
画面上の表示とは無関係でリレーション定義にのみ従います。
特定の物質のを参照したいなら、材料テーブルのグローバルフィールドに入れて 構成物質含有率 2 とのリレーションに使うとか。
FM12だから、ExecuteSQLの出番かもしれない...リレーションと無関係に任意の条件で参照できますので。ただし遅い。
tim様
回答ありがとうございます。
画面上の表示とは無関係でリレーション定義にのみ従います。
これを知りませんでした。注意が必要ですね。
ExcuteSQLについては興味はあるのですが、まだ未経験な上に時間がなかったため、グローバルフィールドでリレーションを張る方式で対応しました。
時間をみつけてExcuteSQLについても勉強したいと思っています。
ありがとうございました。
Offline
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 513.83 KiB (Peak: 520.3 KiB) ]