みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
初めて質問します。accessからfilemakerへの乗り換えにチャレンジしたものの、さっぱり作りがわかりません。
今回実現したいのは利用者の抽出です。
(テーブル)
・利用者マスタ(以下フィールドです。)
ID:氏名:生年月日・・・など
・状況履歴
ID:状態(開始・中断・終了・メモ):日付:備考・・など
(抽出してレイアウトに表示させたいもの)
現時点で稼働している(つまり中断、終了していない)利用者
(考えたこと)
まずは状況履歴テーブルから、開始、中断、終了のレコードのみを抽出して・・・(つまり「メモ」の記録以外のレコードだけにしてしまう)
その抽出結果レコードをもとに、IDごとの最終更新日付のレコードだけを抽出して・・・・(利用者ごとの最新の状況だけのレコードにする)
そんでその抽出結果レコードのIDごとの状態(開始・中断・終了のいずれか)で「開始」のみのレコードを表示させたら・・・
現時点での稼働者のリストができるのでは??
これ、accessでは何段階かのクエリを経て比較的簡単にできていたのですが、いざファイルメーカーでチャレンジしてもできません。
(いえ、できないのではい。私がやり方がわからないのです)
出来れば現在のテーブルのフィールドをそんなに大きく変えることなく、稼働者の時点抽出をしたいのですが、
易しく、幼稚園児に教えるように方法をご教示いただけませんでしょうか。
※ちなみに集計フィールドの最大を使えば簡単に・・・と思っていたのですが、テーブル全体の最大値がでるだけで、IDごとの最大日付の抽出ができません。
本当に何もわかっていない私ですがどうぞよろしくお願いいたします。
Offline
状況履歴でグローバルフィールドを作り「メモ」と入力。
自己リレーション
ID = ID
and
グローバルフィールド ≠ 状態
日付の降順でソート指定(リレーションの設定でできます)
これで
「メモ」を除いた、日付順最後のレコードを参照出来ます。
以下、例えば、
計算フィールドを作り、計算式
自己リレーション::状態 = "開始" and 状態 = "開始"
とすると、
最後のレコードが「開始」のレコードのみ1が入力されます。
これで検索すればいいのですが、
索引非保存のフィールドですから、レコード数が大量になると時間がかかります。
ポータルフィルタにして表示でもいいのでは。
Offline
・必要な条件を満たすレコードに「ID」値のフラグを立て、
・このIDフラグの一覧リストをマルチキーにしたリレーションで、
・「ポータル表」に参照表示か、「関連レコードへ移動」で実体表示か、
すると良いかな。
【補足】
勝手に補足...
> チポさん式
は「開始」の関連レコードが複数ある場合成立しませんので、修正します。
・自己リレーション::状態 = "開始" and 状態 = "開始"
↓
・自己リレーション::状態 = "開始" and 自己リレーション::レコードID = レコードID
(レコードIDは無ければ作ります)
Last edited by Hiro (2017-08-21 13:37:10)
Offline
ああ、
そうですね、考え方は、
最後のレコードで、それが「開始」にフラグをたてる
ですね。
Offline
チポ様 Hiro様
早速のご指導ありがとうございます。
お二人の意見をさっそく試そうとしましたが、どうやら圧倒的な知識不足により、ご指導の実行すら私にはできないようです・・・
チポ様からのご指導に基づき、
”自己リレーション
ID = ID
and
グローバルフィールド ≠ 状態
日付の降順でソート指定(リレーションの設定でできます)
これで
「メモ」を除いた、日付順最後のレコードを参照出来ます。”
と、ここまでしたつもりなのですが、レイアウトで見てみると、・・・全レコードが出てきてしまいました。
もれなく「メモ」のレコードも出てきてしまいます。なぜに・・・
Hiro様からのご指導にあたっては
一行目の ”・必要な条件を満たすレコードに「ID」値のフラグを立て、”
からどのようにすれは良いのかわからない状態です。
必要な条件を満たすレコードは「最新のレコードが「開始」となっているレコード」でしょうか?そのレコードに「ID」値のフラグ??を立てる・・・
ゴメンナサイ。
もしお手すきであれば、ものすごくお手すきであれば、どこの何をクリックして・・・レベルの解説を付けていただけると助かります。
少しずつでもお二人からいただいたご指導の内容が理解できるよう調べてみます。
Offline
リレーション設定しても、対象レコードが変わることはありません。
準備その1
ができたのにすぎないのですヨ
試しに、
状況履歴のレイアウトにリレーションの関連フィールド
自己リレーション::日付
を配置してみて、
そこにそのIDの最終日付が表示されていればリレーションは正確と考えていいでしょう。
Offline
チポ様
アドバイスありがとうございます!
IDの最終日付確認できました!
これで、
Aさん 2017/7/14 メモ
Aさん 2017/7/14 開始
Aさん 2017/7/14 終了
Bさん 2017/8/1 終了
Bさん 2017/8/1 メモ
・
・
のようなデータが確認できました。(Aさんのメモ以外の最終更新日「2017/7/140」、Bさんのメモ以外の最終更新日「2017/8/1」としてです)
このデータを
Aさん 2017/7/14 開始
Bさん 2017/8/1 終了
Cさん 2017/6/27 開始
・
・
と一人1レコードにして、
最終的にはレイアウトで稼働者のみを表示させる=つまり上記データの開始レコードのみを表示させる
ことをしたいと思っています。
チポ様、Hiro様よりアドバイスいただきましたが、私が全く追いついていません。
IDフラグの立て方、一覧リストをマルチキーにしたリレーション?参照表示?実態表示?
自己リレーション::状態 = "開始" and 自己リレーション::レコードID = レコードID
(レコードIDは無ければ作ります)
ここらへんがよくわかりません。
accessであれば重複データはクエリでグループ化が簡単にできたのですが・・
お助けください。
Offline
IDフラグというのは生の数字であるIDフィールドとは別に、特定の条件に一致する場合のみ自レコードのIDを値とする計算フィールドを用意しておき、リレーションのキーにその計算フィールドを使うことで関連レコードの抽出をするための仕組みだと思います。
たとえば、
・状況履歴
ID:状態(開始・中断・終了・メモ):日付:備考・・など
の部分を
・状況履歴
ID:数字
状態:テキスト:(開始・中断・終了・メモ)
IDフラグ:計算:IF(状態="メモ";"";ID)
・・・その他
とし、自己リレーションを
ID = IDフラグ
and その他
とすることで、状態=メモのレコードを除外しておくことができるというわけです。
参照表示や実体表示については、
・レイアウトに紐付いているテーブルのフィールドを表示しているなら実体表示
・リレーション先のテーブルを表示しているなら参照表示
と区別して呼称しているだけです。
ポータルで指定するテーブルはレイアウトのテーブルから参照表示している、ということですね。
スクリプトステップに「関連レコードへ移動」というものがあり、これを使用してリレーション先のテーブルと紐付くレイアウトを表示することができますが、この場合はレイアウトを移動することでリレーション先ではなくレイアウトのメインテーブルとなるため、実体表示することになります。
Offline
まず始めに訂正があります。
同IDで、同日付のレコードがあるようですから、
リレーションの
> 日付の降順でソート指定
この設定ではダメです。
レコード作成が必ず時系列順でしたら、
レコードIDフィールドを作り、その計算式を取得関数の
Get (レコードID)
とします。
で、
リレーションのソート設定を
日付に変えて、このレコードIDとします。
さらにフラグフィールドを作り、その計算式を
Hiroさん提案の
> 自己リレーション::状態 = "開始" and 自己リレーション::レコードID = レコードID
としてみてください。
結果が正確に返ってきていますか?
Offline
mic様 チポ様
追加のご指導ありがとうございます!
皆さまのおかげでほしいデータにたどり着けそうです。
ただ、filemaker始めたてのため、なぜたどり着けたのかのところがはっきりとは理解できていません。
じっくり時間をかけて学んでいきます。
本当にありがとうございました!
Offline
Pages: 1
[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 549.88 KiB (Peak: 570.41 KiB) ]