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

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

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

You are not logged in.

Announcement

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


#1 2023-05-25 18:18:42

akicat
Member

集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

はじめまして。お世話になります。よろしくお願い致します。

操作環境 FM12 WIN10

設定が分からず行き詰ってしまいました。
分かる方がいらっしゃいましたら教えて頂けますとありがたいです。

下記のような設定を行い、テーブルAとテーブルBを年月でリレーションを張り、
テーブルAでチェックした時に、テーブルBの同じ年月のレコード全てに対してチェックが入るようにしたいです。
現在、リレーションの方法が間違っているのか、テーブルAでチェックを入れてもテーブルBのひとつのレコードにしかチェックが入りません。


テーブルA(年月とBへのフラグのON,OFFのみ管理
--------
year month check1
2023 2
2023 3 1
2023 4 1
2023 5
---------

■テーブルB(月次単位での詳細データ
---------
year month item 数 check1
2023 3 リンゴ 80
2023 3 バナナ 90
2023 3 リンゴ 50 1
2023 3 バナナ 50 1
2023 4 リンゴ 25 1
2023 4 バナナ 30 1


■テーブルC(テーブルBにフラグ付けしたitem単位で合計値などを集計
---------
リンゴ 75
バナナ 80


■リレーション(現在の設定内容
テーブルA year,month = テーブルB year,month


リレーションを増やしたりしてみましたが、思ったような動作をしてくれず、
この先のリレーション方法が分かりません。

上記内容にてうまく伝わるか分かりませんが、
もし分かる方がいらっしゃいましたら、助言を頂けましたら幸いでございます。
何卒よろしくお願い致します。

Offline

#2 2023-05-25 22:47:58

himadanee
Guest

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

リレーションしただけではテーブルBのフィールドには値は入りませんから、ルックアップなのか計算フィールドなのか計算式で全置換するかなどはどうやってますか?

#3 2023-05-26 00:03:18

Shin
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

テーブルBに、数を合計する集計フィールドを追加します。
リレーションを追加します
    テーブルB::item = テーブルC::item
テーブルCのレイアウトに、テーブルBの1行ポータルを配置し、その中に上の集計フィールドを入れておきます。ポータルフィルターで、
    テーブルA::check1
としておきます。

Offline

#4 2023-05-26 08:47:28

チポ
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

書かれた方法だと、
次の集計をするときにはチェックを付け替えますよね。
とすると、テーブルCの集計が消えてしまいますが、
それでもいいのでしょうか?

残すとすれば別の方法が必要でしょう。
消えてもいいのなら、テーブルBで集計ができ、
テーブルCは不要では。

Offline

#5 2023-05-26 08:49:54

チポ
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

ああ、書き落としました。

書かれた例の上2行の月はタイプミスですよね?

Offline

#6 2023-05-26 13:52:15

akicat
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

himadanee様
ありがとうございます。
ルックアップも計算式も入れてませんでした!
確かに値を持ってくる要因がありませんでした。
ただ、ルックアップにしても計算式にしてもテーブルAで入れた値をテーブルBのフィールドに反映されないのです。
何かが間違っている(何かが足りない)とは思うのですが、すいません。


Shin様
ありがとうございます。
テーブルCでの集計方法はある程度把握はしておりまして、
下記内容で設定したところ問題なく集計できるようでした。
---------------
■リレーション
テーブルB item、check1 = テーブルC item、check1

■フィールド設定
テーブルC
数 フィールド設定 計算式 =Sum(リレーション先のテーブルBの数)
---------------

ただ、テーブルAにチェックを入れたときにテーブルBの該当フィールドすべてにチェックが入るという仕組みが出来ず困っております。


チポ様
ありがとうございます。
上2行の月は完全に記載ミスでした。ご指摘ありがとうございます。

【訂正】
■テーブルB(月次単位での詳細データ
---------
year month item 数 check1
2023 2 リンゴ 80
2023 2 バナナ 90
2023 3 リンゴ 50 1
2023 3 バナナ 50 1
2023 4 リンゴ 25 1
2023 4 バナナ 30 1
---------
こうですね。失礼いたしました。

チェックを外したときに集計結果が異なることは問題なく、
必要となるデータ範囲を毎回操作したいという意図になります。
例えば、1-2月と3-4月 では 売上、転換率、アクセスなどユーザの動向が異なるため
ある程度データ集計させる範囲を変えてデータを確認したいというところにあります。

テーブルAは範囲を決めるためのもの
テーブルBは全データを補完しておくところ
テーブルCはAで決めたBの対象を集計しなおして、必要なデータを算出しなおすところ
という感じで行っていきたいと思っております。

Offline

#7 2023-05-26 14:40:21

チポ
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

今の構造で、
テーブルCでリレーションを使って集計するには、
テーブルBのcheck1フィールドが照合されるフィールドとなりますから索引が必須です。
ですから、既存のレコードで自動で書き換えるようなことは無理でしょう。

リレーションを使わずに集計するには、何らかの作業が必要になりますね。

結局どこかで作業が入るのですから、
スクリプトを使って自動化を図ったらいかがでしょう。

Offline

#8 2023-05-26 15:21:21

Shin
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

上で書いた内容と全然違いますよ。
https://www.dropbox.com/s/j9r0hhtlnroqm … 2.zip?dl=0

ただ、普通はテーブルBで集計範囲を抽出して、そのまま集計するのが普通でしょうね。

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

Offline

#9 2023-05-29 11:52:22

himadanee
Guest

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

結局テーブルCは不要で、Aからフラグの立ってるレコードだけ検索して、Bの関連レコードへ移動するなどしてBで集計すれば、Bのフラグも不要ってことでしょうね。

フラグの情報がCにないから、Cに集計結果だけ残しても何の集計かわからなくなって意味がないでしょうし。

#10 2023-05-29 16:00:52

akicat
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

チポ様

ありがとうございます。
テーブルCでのテーブルBの該当の集計は行えていたので
テーブルAとテーブルBだけの関係性を書いてしまいました。
テーブルBのcheck1に値を正しく入れたかったことが解決できずにいたのでそこだけ問題が解決できずご質問とさせていただいておりました。
記載内容が中途半端になっており申し訳ないです。
テーブルCではテーブルBとのリレーションで、該当のレコードに対してのみ集計を行いたいと思っております。

テーブルBのcheck1を計算式にしてテーブルAの値を持つようにすれば入るには入りますが
今度はテーブルCでの集計が行えなくなってしまい、ここの解決方法を見いだせないままになっております。
計算フィールドと数字フィールド、あるいは計算フィールドと計算フィールドはリレーションが正しく行われないという認識になりますでしょうか?

テーブルBのcheck1を手動で値を入れた場合にはテーブルCで正しく集計がされますので
やはりチポ様のおっしゃられる通り、スクリプトでテーブルAでフラグ付けするものをテーブルBの対象フィールドに値を入れに行ったほうが良さそうな気がしてきました。

■テーブルA(年月とBへのフラグのON,OFFのみ管理
--------
year month check1
2023 2
2023 3 1
2023 4 1
2023 5
---------

■テーブルB(月次単位での詳細データ
---------
year month item 数 check1
2023 2 リンゴ 80
2023 2 バナナ 90
2023 3 リンゴ 50 1
2023 3 バナナ 50 1
2023 4 リンゴ 25 1
2023 4 バナナ 30 1
2023 5 リンゴ 10
2023 5 バナナ 10


■テーブルC(テーブルBにフラグ付けしたitem単位で合計値などを集計
---------
リンゴ 75
バナナ 80


■リレーション(現在の設定内容
テーブルA year,month = テーブルB year,month
テーブルB item,check1 = テーブルC item,check1

Offline

#11 2023-05-29 16:08:57

akicat
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

Shin様

参考のファイルを頂きありがとうございます。
御手数おかけいたします。
Shin様のおっしゃられていた「上で書いた内容と全然違いますよ。」という内容がはじめ理解できていなかったのですが、
本日把握致しました。「2023-05-26 13:52:15」に記載させていただいた内容ですよね。
すいません、チポ様からご指摘いただきました誤記載がmonthの重複でしたので、そこだけ修正をさせて頂いたつもりだったのですが
却って分かり辛くなってしまい誤解を招いてしまい申し訳ございません。

Shin様から頂きましたファイルを確認させていただきました。
集計を行うとテーブル内のitemフィールドの同一名のものが集計されてしまい
check1が入っているものを集計するというものではなくなってしまうようです。
「テーブルB item,check1 = テーブルC item,check1」として、テーブルCで集計するのが適切なのかなと考えております。

参考ファイルまで作ってくださりましたこと非常に感謝しております。
また中途半端な記載で誤解を招いてしまい申し訳ないです。

Offline

#12 2023-05-29 16:25:06

akicat
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

himadanee様

ありがとうございます。
テーブルCでテーブルBの情報を集計した後、データを整え、色々な作業を行いたいと考えておりましたので
テーブルCは必要なものであります。

テーブルAのチェックをテーブルBの該当するレコードにチェックした後
テーブルCでテーブルBのチェックが入ったものを集計するという中で
テーブルAにチェックを入れたときにテーブルBのチェックが入るようにする という問題点が解決できないでおります。

テーブルAを作らずに、テーブルBで対象を全置換すればいいのかもしれませんが
それだと今後膨大なレコード数になるテーブルBを操作し、どの年月にフラグを入れているのかを把握し続けることは困難で、
管理や操作性に問題があると感じたからです。

テーブルA(対象を管理、簡易的に対象を変更可能にする)、
テーブルB(元データ、基本ここを開いたりいじったりしない)、
テーブルC(フラグ付けされたテーブルBのデータをもとに必要なデータを作成する)はそれぞれ必要なものかと思っています。

ただやはり下記内容が解決せず困っています。

テーブルA → check1に値「1」を入れる check1 (数字フィールド 計算フィールドではない)
リレーション テーブルA year,month = テーブルB year,month
→テーブルAでチェックしたテーブルBの同一の「year,month」のレコードに対してcheck1に値「1」を入れる
→テーブルBのcheck1に値「1」が入ったitemをテーブルCで集計する
リレーション テーブルB item,check1 = テーブルC item,check1
※check1に値「1」が入っていないものは集計しない
※check1が計算フィールドの場合、リレーションが正しく機能せず、別テーブルの値を持ってこない?

Offline

#13 2023-05-29 16:35:36

チポ
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

> 計算フィールドと数字フィールド、あるいは計算フィールドと計算フィールドはリレーションが正しく行われない
ではありません。

参照される側(関連側)のテーブルの照合フィールドは索引設定が必須です。
計算フィールドでその計算式の引数に
リレーション先の参照フィールドを使うと索引はできません。
参照する側にはその制約はありません。

ですから、今の方法を取る場合、
テーブルBのcheck1は計算フィールドにはできない
となりますよね。
結局スクリプト等が必要になりますよ。

Offline

#14 2023-05-29 18:08:21

akicat
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

チポ様

詳しいご説明いただきありがとうございます。
リレーションとフィールド定義だけでは結局ダメだったのですね。
himadanee様にもShin様にも
最終的な設定の説明を省いたばかりに、色々お手数おかけしてしまいすいませんでした。
また丁寧にご説明いただきましたこと感謝しております。

チポ様の当初のご提案通り、スクリプトでテーブルBにフラグ付けすることにいたしました。
------
スクリプト内容
テーブルAのcheck1の値が1か空欄かの判定で1と空欄を付け替え、
変数設定でyear、month、check1の値を設定
テーブルBに切り替えて、変数で設定したyear、monthを検索後
テーブルBのcheck1の値を全置換させることにしました。
------
皆様親切にご協力いただきありがとうございました。

Offline

#15 2023-05-29 18:58:51

himadanee
Guest

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

Cが必要だとして、そのレコードはどうやって作るんでしょうか。
手入力してたら抜けたり間違えたりしますよね。
Bで集計して、それをCにインポートすればいいのでは。リレーション不要です。(集計結果のみの直接インポートはできなかった気がするので、一旦集計結果をエクスポートして、それをインポートする)
リレーションでやるとしたら、チポさんご指摘の通り、Bで全レコードの全置換などが必要になります。

C上で計算で出したければ、SQL関数でやるのがよさそうですが
そういう意味では、ODBC共有にすればSQLでインポートできるので、簡単かなあ。共有だと設定は面倒ですが。サーバ上でやらせるとか?

FM12でしたか...バグにあたらないか心配...

#16 2023-05-29 23:23:07

Shin
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

全置換などしなくても、目的を絞り込んだ集計できますよ。

akicat wrote:

Shin様から頂きましたファイルを確認させていただきました。
集計を行うとテーブル内のitemフィールドの同一名のものが集計されてしまい
check1が入っているものを集計するというものではなくなってしまうようです。

公開したファイルで確認されたのですか、それとも、同じようなファイルを作ってですか。
サンプルのファイルは、スクリプトの不要な動きになっています。FM12でも正しい同じ動きをするはずです。

Last edited by Shin (2023-05-30 02:43:12)

Offline

#17 2023-05-30 12:02:43

akicat
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

himadanee様
ありがとうございます。
Cテーブルのデータは他で設定登録したデータをインポートさせて、上書させる予定です。
インポートさせるデータ上に無いものであれば、Bデータをもう参照しなくても良いのかなと思いまして。
(C上にないデータを参照したいこともあるかもしれないけど、そこまで必要としないと割り切りました)

すいません、SQLは分からず、いずれは知識に入れたいと思います。

Offline

#18 2023-05-30 12:03:27

akicat
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

Shin様
ありがとうございます。
御連絡いただきました時に頂きましたデータをそのままDLし、使用させて頂いておりました。
テーブルAの値を付け替えたりして確認をしたところ、
昨日まではCで表示される集計の値が変わらなかったので、集計がcheck1のフラグを反映していないものと思っていたのですが
Shin様の御連絡内容を拝見して、本日再度確認致しました。
テーブルCのitemの値を再入力したところ、再集計されることが分かりました。
大変失礼いたしました。

Shin様から頂きました内容が当初の私の希望の内容と合致している内容ですので、とてもうれしく思っております。
設定内容を見直し、再検討させていただきたいと思います。

Offline

#19 2023-05-30 13:18:01

Shin
Member

Re: 集計対象を別テーブルからフラグ付けしたい場合のリレーション方法について教えてください

ポータルフィルターの結果を反映させるために、ポータルの更新またはウインドウの再表示などを行う必要がありましたね。Bのレイアウトを表示させるだけでもいいかもしれません。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 587.5 KiB (Peak: 624.41 KiB) ]