みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
生徒の成績を管理するためにファイルメーカーを使用しています。
生徒マスタには生徒名を管理、成績マスタには生徒名、テスト日、テスト科目、点数を管理しており、生徒名でリレーションを繋いでいます。
生徒名 テスト日 テスト科目 点数
○〇さん 2023/10/19 国語 100
○〇さん 2023/10/20 国語 80
○〇さん 2023/10/21 国語 50
○〇さん 2023/10/22 算数 80
○〇さん 2023/10/23 算数 40
○〇さん 2023/10/24 算数 50
○〇さん 2023/10/25 理科 90
○〇さん 2023/10/26 理科 70
○〇さん 2023/10/27 理科 50
現在、各科目ごとの最高点と最低点を表示させるレイアウトを作成しました。
基本レイアウトを生徒マスタとし、ポータルで成績マスタを設置し、フィルタで科目、ソートで点数の降順、昇順を使い分け、一行表示とすることで実現しております。
○○さんの場合、
国語 最高点 100
最低点 50
算数 最高点 80
最低点 40
理科 最高点 90
最低点 50
といった表示となり、イメージ通りです。
しかしながら、この場合、検索モードでうまく検索ができないことに気付き、苦慮しています。
検索モードで国語の最低点が50点以上の人を抽出しようポータル内で検索したところ、ポータル表示があくまで1行になっているだけで50点以上を一度でも取っている人がすべて表示され、思うように抽出できない結果でした。
フィールドに計算式を設定して最低点等を管理してフィルタするということも考えましたが、うまく表示できず困っております。
そもそものテーブル、レイアウトの作りがまずかったでしょうか。
それとも関数やリレーションで実現可能でしょうか。
対応方法を教えてください。
よろしくお願いします。
> 最低点が50点以上の人を抽出
このような検索では、そのままの条件では難しいです。特にポータルの中のソートで表示している場合は、レコードを特定して表示しているのではなく、レコード列の最初を表示していますので、そこでの検索は無理です。
条件を読み替えると、検索はできます。
「国語の最低点が50点以下の人を除外」
にするといいでしょう。(国語を受けているという条件も必要かも)
この条件で抽出して、対象外を表示すれば良いはずです。
今の最大値、最小値の集計は、ポータルを6個並べて、フィルターとソートで表示されているのだと思いますが、もっと簡潔な方法があります。
点数の最大値を集計する集計フィールドと、最小値を集計する集計フィールドを作ります。氏名をキーとする小計パート、科目をキーとする小計パートのみのレイアウトを作ります。科目をキーとする小計パートの中に科目フィールドと集計フィールドを2個配置します。レコードを、氏名、科目でソートし、そのレイアウトで表示すれば、集計されています。
Offline
点数の検索ではなく、
最低点が50点以上の人を検索ですよね。
各レコードに、その科目の最高点と最低点のフィールドを持たせれば簡単では。
Offline
Shin様
>>「国語の最低点が50点以下の人を除外」
盲点でした!発想の転換ですね!
やはり柔軟な思考力が大事であると痛感させられました。
>>氏名をキーとする小計パート、科目をキーとする小計パートのみのレイアウト
すみません。小計パートはなかなかハードルが高くてまだ理解がしきれておりません。
小計パートを使用すると上部ナビゲーションとボディの間に一行小計パートが追加され、現行のレイアウトがすこし崩れるという認識ですが、合っていますか?
チポ様
>>各レコードに、その科目の最高点と最低点のフィールドを持たせれば簡単では。
成績マスタのフィールドに最高点と最低点をMAX、MIN関数で集計し表示させてみましたが、検索モードでは計算フィールドでの検索ができずに断念しておりました。
なにかほかに方法がありましたでしょうか。
立て続けに失礼します。
同じロジックで別テーブルで進捗ステータスを管理しようと考えており、1→10までの値を考えております。
○○さんは最初は1から始まり、その後、進捗に応じて2、3、4と増えていくことを想定しています。
この場合、進捗が1のままの者を検索したい場合には、Shin様の発想の転換を行って検索することは不可と考えます。
(誰もが最初は進捗が1のため、全員が抽出されてしまう。)
やはりなにかMAX関数など最新フラグのようなものを立てていく必要がありますでしょうか。
小生、VBA等はかじっているのですが、ファイルメーカーはこの度初めて運用に携わっており、小計パートやレイアウトといったところがあまり理解できておらず申し訳ございません。
立て続けに失礼します。
同じロジックで別テーブルで進捗ステータスを管理しようと考えており、1→10までの値を考えております。
○○さんは最初は1から始まり、その後、進捗に応じて2、3、4と増えていくことを想定しています。この場合、進捗が1のままの者を検索したい場合には、Shin様の発想の転換を行って検索することは不可と考えます。
(誰もが最初は進捗が1のため、全員が抽出されてしまう。)やはりなにかMAX関数など最新フラグのようなものを立てていく必要がありますでしょうか。
小生、VBA等はかじっているのですが、ファイルメーカーはこの度初めて運用に携わっており、小計パートやレイアウトといったところがあまり理解できておらず申し訳ございません。
質問が散見して回答が難しいかと思いますので、この質問には回答しなくてよいです。
申し訳ございません。
要は、最大値が○○点以下のものがうまく抽出できれば、というところですね。
よろしくお願いします。
再度確認です
> 国語の最低点が50点以上の人を抽出
点数の検索ではなく、
人の検索ですよね?
Offline
>>人の検索ですよね?
はい、点数ではなく、
「最低点が50点以上の人」
「最高点が85点以下の人」
を検索モードで検索したいと考えております。
点数は条件です。
> 検索モードでは計算フィールドでの検索ができず
計算フィールドを検索できますよ。
集計フィールドの検索はできません。
最高点、最低点
はどのように求めましたか?
Offline
チポ様
>>最高点、最低点はどのように求めましたか?
MAX関数で点数フィールドを指定しています。
ポータルフィルタで科目でフィルタしているため、最高点はちゃんと表示ができていると思いますが・・・・
統計関数なら、
自己リレーションが必要ですが、
その説明がありません。
各レコードに正確な値が表示されていますか?
Offline
横から失礼しますが、Max関数ではポータルは指定できないので、リレーション条件だけでの集計になりますよ。
それと、その関数の計算フィールドだと必然的に「計算結果を保存しない」ので、索引ができず検索は遅くなります。レコード数が大量でなければ多少遅くても影響ないですが
すでにチポさんから指摘されてますが、「最低点が50点以上の人」というより「50点未満を一度も取ってない人」と考えれば、最低点というのは全く関係ない話になります。
チポ様
確認しましたら集計フィールドで最大値を取得しておりました。
MAX関数を使う場合は自己リレーションが必要ということでよろしかったでしょうか。
その場合、リレーションをつなぐのは職員名と科目ということでしょうか。
himadanee様
たしかに最低点にこだわる必要は関係なさそうですね。
立て続けに失礼します。
同じロジックで別テーブルで進捗ステータスを管理しようと考えており、1→10までの値を考えております。
○○さんは最初は1から始まり、その後、進捗に応じて2、3、4と増えていくことを想定しています。この場合、進捗が1のままの者を検索したい場合には、Shin様の発想の転換を行って検索することは不可と考えます。
(誰もが最初は進捗が1のため、全員が抽出されてしまう。)やはりなにかMAX関数など最新フラグのようなものを立てていく必要がありますでしょうか。
小生、VBA等はかじっているのですが、ファイルメーカーはこの度初めて運用に携わっており、小計パートやレイアウトといったところがあまり理解できておらず申し訳ございません。
そうなるとこういう場合はどう考えたらよいでしょう・・・
各人の進捗の最大値にフラグを立てるようなフィールドを作れたらよいのですがね。
進捗に2(以上)のレコードが1つもない人、ですかね。ベストかどうかはわかりませんが...
>各人の進捗の最大値にフラグを立てるようなフィールド
マスタに作ることになるので、しょっちゅう変わるようなフィールドがマスタにあるのが適当なのか微妙な感じです。
>進捗が1のままの者を検索
進捗2を検索、
人の関連レコードへ移動
対象外のみ表示
でできますが、最初の検索で他の条件「期間」とか「特定の作業」とかが入ってくると条件が変わってくるので...
どの方法を使っても、検索対象が得点、表示対象が人ですので、リレーションは必須です。リレーションは理解されていますか。
Offline
> リレーションをつなぐのは職員名と科目
その通りです。
その関連レコードの統計ですね。
指摘がある通り、
非保存のフィールドの検索ですから、
レコ-ド数が多くなると検索に時間がかかるようになります。
50点以下のレコードを検索、
職員名のリレーションで、関連レコード移動、
対象外を表示。
これで同じ結果が得られます。
速さと使い勝手で方法を選択すればいいでしょう。
Offline
ああ、書き落としました。
実際には、年度とかの条件もありますよね?
それも考えないとだめでしょう。
Offline
himadanee様
>>進捗に2(以上)のレコードが1つもない人、ですかね。ベストかどうかはわかりませんが...
最初にShin様に教えていただいた手法ですね。
これが一番わかりよいですかね。
Shin様
>>リレーションは理解されていますか。
簡単なリレーションを組んでレイアウトの作成はできておりますので、一定の理解はあるかとは存じますが、自己リレーションについては未だに十分な理解がないようです。
インターネットでもあまり情報がないため、知識の習得に苦慮しています。
身近にもっとサンプルデータ等があればよいのですが。
チポ様
>>実際には、年度とかの条件もありますよね?
おっしゃるとおりです。
対象外の表示をしたら他の年度が出現されちゃいますよね。
最後に年度でフィルタをかけるのがよいでしょうか。
私の、
最高点、最低点のフィールドを持たせるのなら、
リレーションに年度の照合を加え、
検索で、年度の絞り込みが必要ですね。
Offline
対象外にする前に、対象としない年度のレコードを追加しておくんですよ。
Offline
チポ様
Shin様
ご助言ありがとうございます。
チポ様
>>最高点、最低点のフィールドを持たせるのなら、
これは成績マスタに集計フィールドで持たせるということでよろしいでしょうか
理解が追いついておらず申し訳ございません。
[ Generated in 0.007 seconds, 8 queries executed - Memory usage: 623.63 KiB (Peak: 656.17 KiB) ]