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

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

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

You are not logged in.

Announcement

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


#1 2021-08-13 11:57:12

fmb
Guest

繰り返しフィールドとリレーションについて

Win10でFM15を使用しています。

テーブルA(カレンダー)に、繰り返しフィールドを使用してカレンダーを作成しています。
カレンダーのレイアウトは、よくある卓上カレンダーのように一月ごとに表示されていて、次月または前月ボタンを押すことで月を切り替えるものです。

テーブルB(フォロー記録)に、患者の検査記録(検査日、氏名、検査結果etc)を蓄積しています。

やりたいことは、カレンダーを表示させているレイアウト上に、その日に実施した患者の氏名を表示させることです。

【テーブルA(カレンダー)】
年(ここに入力されている年月から、スクリプトで日付[35]にカレンダーの日付を表示させています。)
月(ここに入力されている年月から、スクリプトで日付[35]にカレンダーの日付を表示させています。)
日付[35]
氏名(ここにその日に検査した患者の氏名を引っぱってきたい。1日に3件前後検査がある日もあれば、検査数が0件の日もあります。)

【テーブルB(フォロー記録)】
検査日
氏名
検査結果

テーブルA::日付 = テーブルB::検査日
でリレーションを組んでいます。

こちらの掲示板等を参考にし、似たような質問を探しましたが、
今回の場合に置き換えて考えることができず、質問させていただきました。

説明不足な点があるかと思いますが、どなたかご教示いただけませんでしょうか。

#2 2021-08-13 13:25:01

himadanee
Guest

Re: 繰り返しフィールドとリレーションについて

リレーションでは繰り返しがマルチキーになるので、ルックアップなら個別に適用できますが計算式では全部まとめて関連してしまいます。
スクリプトで35日分一括して検索(関連レコードへ移動)して順次転記する、ぐらいかな。

#3 2021-08-13 15:41:52

Shin
Member

Re: 繰り返しフィールドとリレーションについて

日付[35] では、すべてのカレンダーは表示できませんよ。最低37は必要です。(直近では10月でお試しください)
それは置いておいて、
日付1  日付2   日付3  ...
氏名01 氏名11 氏名31
氏名02 氏名12 氏名32
氏名03 氏名13 氏名33
としたいのですよね。
記録側で、氏名01 02 03 の一覧を作っておき、繰り返し計算フィールドにそれをルックアップさせるといいでしょう。
https://www.dropbox.com/s/7535pjpch17gu … 2.zip?dl=0

Last edited by Shin (2021-08-16 13:46:44)

Offline

#4 2021-08-14 04:54:17

Hiro
Member

Re: 繰り返しフィールドとリレーションについて

氏名[42]にExecuteSQL関数式を適用して一発計算するのが、一番楽でしょう。
他の設定は一切必要ありません。
また、カレンダー表示するなら6週分の42回の日付枠が必要ですよ。

Offline

#5 2021-08-14 20:08:07

ブランコ
Member

Re: 繰り返しフィールドとリレーションについて

私もよく似たレイアウトを作成します。ほぼ標準装備といったレベルで使用しています。

パワープレイとバカにされそうですが、私は37個のポータルを配置してフィルタで振り分けています。作るのは非常に手間ですが、レイアウトの自由度はかなり高くなります。ポータルならポップオーバーを使用して、簡易サマリ的なものを表示させたりすることも可能です。

ただ、この方法で、関連レコードがあまりにたくさんある場合は動作速度が少し遅くなるかもしれません。

Offline

#6 2021-08-15 17:23:29

Shin
Member

Re: 繰り返しフィールドとリレーションについて

ブランコ wrote:

私は37個のポータルを配置してフィルタで振り分けています。作るのは非常に手間ですが、レイアウトの自由度はかなり高くなります。ポータルならポップオーバーを使用して、簡易サマリ的なものを表示させたりすることも可能です。

ポータルを7個だけで同じような表示を追加したサンプルです。
https://www.dropbox.com/s/7535pjpch17gu … 2.zip?dl=0
日付を全置換してもいいかと思います。

Last edited by Shin (2021-08-16 13:46:33)

Offline

#7 2021-08-15 21:14:42

ブランコ
Member

Re: 繰り返しフィールドとリレーションについて

shinさん
サンプルファイルありがとうございます。

ポータルを複数行にして横に7つ配置しても get(計算式ポータル行番号)的な関数が無いから、今の方法以外では無理だと思ってました。

まさかList形式でカレンダー表示をするなんて発想はありませんでした。これなら作成時の大幅な時間短縮が可能になりそうです。ご教示ありがとうございます。

Offline

#8 2021-08-16 10:02:19

fmb
Guest

Re: 繰り返しフィールドとリレーションについて

皆さま、ご回答いただき有り難うございます。

ひとまず、Shin様にご教示いただいた、繰り返し計算フィールドにルックアップする方法で対応することができました。
ExecuteSQL関数式を使ったことはありませんが、使いこなせるようになるとできることの幅が広がりそうです。これから勉強してみます。
また、ポータルのサンプルも有り難うございます。
ブランコ様の仰る通り、自由度が高そうです。こちらも試してみたいと思います。

皆さま、本当に有り難うございました。解決とさせていただきます。

#9 2021-08-16 15:56:42

Hiro
Member

Re: 繰り返しフィールドとリレーションについて

終わっていますが、
>#8『ExecuteSQL関数式を使ったことはありませんが、・・・これから勉強してみます。』

今回のようにFMでは難解なケースでも、
SQLを利用するといとも簡単に実装できることもあるので、
一度勉強しておくと非常に便利な機能です。

●ExecuteSQL関数式の作例サンプルを残しておきます。
※ただこの式指定だけですべて完了、超簡単ですネ!!
(テーブルAの「氏名」繰り返し[42回]計算フィールドの設定式)
ExecuteSQL(
  "
    SELECT ""氏名""
    FROM ""テーブルB""
    WHERE ""検査日""=?
  "
  ; ""
  ; "¶"
  ; 日付
)


●ついでに、「日付」繰り返し[42回]計算フィールドの式例も記して置くと、
(一般的な日曜日始まり6週次の月間カレンダー表示向けとしています)
Let([
  #日=Get(計算式繰り返し位置番号) - DayOfWeek(Date(月;1;年))
];
  Date(月;#日+1;年)
)

Offline

#10 2021-08-18 16:33:52

fmb
Guest

Re: 繰り返しフィールドとリレーションについて

Hiro wrote:

終わっていますが、
>#8『ExecuteSQL関数式を使ったことはありませんが、・・・これから勉強してみます。』

今回のようにFMでは難解なケースでも、
SQLを利用するといとも簡単に実装できることもあるので、
一度勉強しておくと非常に便利な機能です。

●ExecuteSQL関数式の作例サンプルを残しておきます。
※ただこの式指定だけですべて完了、超簡単ですネ!!
(テーブルAの「氏名」繰り返し[42回]計算フィールドの設定式)
ExecuteSQL(
  "
    SELECT ""氏名""
    FROM ""テーブルB""
    WHERE ""検査日""=?
  "
  ; ""
  ; "¶"
  ; 日付
)


●ついでに、「日付」繰り返し[42回]計算フィールドの式例も記して置くと、
(一般的な日曜日始まり6週次の月間カレンダー表示向けとしています)
Let([
  #日=Get(計算式繰り返し位置番号) - DayOfWeek(Date(月;1;年))
];
  Date(月;#日+1;年)
)



Hiro様、わざわざサンプルまで有り難うございます!
ExecuteSQL関数式は、書式を守れば非常に便利ですね。
サンプルも参考にさせていただきながら、勉強を進めます。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.018 seconds, 10 queries executed - Memory usage: 542.32 KiB (Peak: 563.23 KiB) ]