みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
環境
WIN7
FMpro12
1レコードに12フィールドあり、12フィールドにはそれぞれの点数が入っています。
それを別テーブルに下記の様にポータルで表示しています。
1回目と2回目を比較し低い方の点数を表示するレコードを自動で作りたいのですが
回数 A B C D E F G H
1回目 5 4 1 4 5 8 7 5
2回目 2 3 5 4 7 6 5 4
結果 2 3 1 4 5 6 5 4
まどろっこしいやり方なら思いつくのですがもしシンプルにできる方法があれば
教えて頂けないでしょうか?
MIn() でいいでしょうが。
フィールドの定義はどうなっているのですか。12フィールドと書いてあるけど、例には8フィールドか16フィールドですが。
Offline
申し訳ありません。
フィールドはAからLまで12フィールドで
1回目、2回目がそれぞれ別レコードです。
それを個人IDをもとにポータルで表示しております。
また、書き忘れていますが
回数レコードは1回目から最大7回目までありますが
特殊な事情で1回目と2回目のみそれぞれのフィールドで最小値を拾って
別のところに点数を初回テストとして保管したいと思っています。
個人IDというフィールドと、回数、というフィールドがあるのですか。
また、その結果はどのレコードへ持たせるのですか。
個人IDを管理しているテーブルがあるのでしたら、そのポータルのリレーション設定で回数フィールドで昇べきにソートし、Min ( GetNthRecord ( 点数::A ; 1 ) ; GetNthRecord ( 点数::A ; 2 ) ) という様なフィールドを作っていけば良いでしょう。
Offline
回答有難うございます。
個人IDというフィールドと、回数、というフィールドがあるのですか。
また、その結果はどのレコードへ持たせるのですか。
はい、おしゃる通りです。
結果はポータルの表示してあるテーブルにフィールドを作りたいと思っています。
個人IDを管理しているテーブルがあるのでしたら、そのポータルのリレーション設定で回数フィールドで昇べきにソートし、Min ( GetNthRecord ( 点数::A ; 1 ) ; GetNthRecord ( 点数::A ; 2 ) ) という様なフィールドを作っていけば良いでしょう。
Min ( GetNthRecord ( 点数::A ; 1 ) ; GetNthRecord ( 点数::A ; 2 ) ) としたのですが
1回目 4
2回目 1
の場合4を拾い
Min ( GetNthRecord ( 点数::A ; 2 ) )
とすると1を拾います。
Min ( GetNthRecord ( 点数::A ; 1) )
にしても1を拾います。
ソート設定も点数のテーブル、ポータルともに値一覧をもとにソートで設定したのですが
なぜなのでしょうか?
> ソート設定も点数のテーブル、ポータルともに値一覧をもとにソートで設定したのですが
値一覧でソート?
回数フィールドの昇順でソートですよ。
ポータルにソート設定しないで、
ポータルの上から1回目・2回目と表示されているか確認ですね。
Offline
> ソート設定も点数のテーブル、ポータルともに値一覧をもとにソートで設定したのですが
値一覧でソート?
回数フィールドの昇順でソートですよ。ポータルにソート設定しないで、
ポータルの上から1回目・2回目と表示されているか確認ですね。
いろいろと説明不足で申し訳ありませんが
回数のフィールドは初回・一回目・二回目・三回目・最後のような入れ方になっています。
これですと昇順では反応しにくいと思い、値一覧でのソートにしたのですがこれが上手くいかない原因でしょうか?
一応ポータルは初回・一回目・二回目・三回目・最後となっています。
> 初回
は抜いて、一回と二回を比較するんですよね。
でしたら、
Min ( GetNthRecord ( 点数::A ; 2 ) ; GetNthRecord ( 点数::A ; 3 ) )
としなければダメでしょう。
GetNthRecord関数のヘルプです。
http://www.filemaker.com/help/14/fmp/ja … tml#100534
関数の意味を理解しましょう。
Offline
本当に分かりにくくてすいません。
初回と1回目を比較して点数の低い方を採用したいのです。
最初は分かり易いように1回目と2回目という風に書いてしまいました。
ならば、最初の
Min ( GetNthRecord ( 点数::A ; 1 ) ; GetNthRecord ( 点数::A ; 2 ) )
でいいんですが、、
Offline
色々とやってみたのですが
初回 4
1回目 1
の場合
Min ( GetNthRecord ( 点数::A ; 1 ) ; GetNthRecord ( 点数::A ; 2 ) )
はやっぱり4とでます。
しかし、
GetNthRecord ( 点数::A ; 1 )
だと4
GetNthRecord ( 点数::A ; 2 )
だと1
とでるようになりましたので
GetNthRecord は機能していると思います。
これはFileMaker自体のバグだと思うのですが
なぜかGetNthRecordとMax、Min、List等の統計関数を同時に使うと期待した結果になりません。
この場合は、GetNthRecord と Min の部分でスクリプトで分けて計算するか、
集計フィールドの最小値を使うと良いかと思います。
そんなこと有るんだ!
各フィールドは数字タイプになっていますか?
それでもダメならば、
グローバルフィールドを作り、
初回
一回目
と改行で入力
これでリレーションして、
Min
でいいでしょう。
Offline
この場合は、GetNthRecord と Min の部分でスクリプトで分けて計算するか、
集計フィールドの最小値を使うと良いかと思います。
GetNthRecord ( 点数::A ; 1 )のフィールドA
GetNthRecord ( 点数::A ; 2 )のフィールドB
を作り
Min(フィールドA;フィールドB)
としたらできました。
ありがとうございました。
2者比較だからCase分け計算での対策が楽でないかな?
Let([
#fst=GetNthRecord(点数::A;1);
#snd=GetNthRecord(点数::A;2)
];
Case(#fst>#snd;#snd;#fst)
)
Offline
検証してみました。確かにバグっぽいですね。
ちょっと不思議な動きを見せてくれます。
Max ( GetNthRecord ( リレーション::m ; 3 ) ; GetNthRecord ( リレーション::m ; 2 ) )
や
Let (
[
r1 = GetNthRecord ( リレーション::m ; 3 ) ;
r2 = GetNthRecord ( リレーション::m ; 2 )
] ;
Max ( r1 ; r2 )
)
では、GetNthRecord ( リレーション::m ; 1 ) の値を返してくる様ですが、ローカル変数を使って
Let (
[
$r1 = GetNthRecord ( リレーション::m ; 3 ) ;
$r2 = GetNthRecord ( リレーション::m ; 2 )
] ;
Max ( $r1 ; $r2 )
)
にすると、きちんと計算してくれます。フィールドを別に作るよりは少しだけましでしょうが、面倒ですね。
Offline
お世話になっております。
解決後にいろいろ提案してくださったのですね。
申し訳ありません。見てませんでした。今検証したらどちらでも可能でした。
後でこちらの方に直したいと思います。
実際にGetNthRecordを使用して運用してみようとすると
以下の問題がでてきました。
変な話なのですが1回目を入力し忘れて
初回
2回目
1回目という順番で入力してしまうことがしばしばあります。
徹底すればいいのですが、もしもの為に解決法を用意しておきたいのですが
レコード番号を振りなおすことはできないでしょうか?
またはレコード番号順ではなく、
回数フィールド(初回・1回目・2回目など)
をみて数値を取得できないでしょうか?
宜しくお願いします。
リレーションを介して見た順番だから、そのリレーションをその順番で
ソートするよう設定するのが良いでしょう。
●希望するカスタム順番を作る、には、
・カスタム値で値一覧「回名値一覧」を作り、
・「回」名を希望する順でリストアップします。
(初回¶1回目¶2回目¶3回目¶4回目¶5回目・・・・¶最終回 など)
●リレーションをその順番でソートするよう設定する、には、
・リレーション先テーブル側の「回数フィールド」に、
・この値一覧「回名値一覧」順でのソートを設定します。
Offline
リレーションを介して見た順番だから、そのリレーションをその順番で
ソートするよう設定するのが良いでしょう。●希望するカスタム順番を作る、には、
・カスタム値で値一覧「回名値一覧」を作り、
・「回」名を希望する順でリストアップします。
(初回¶1回目¶2回目¶3回目¶4回目¶5回目・・・・¶最終回 など)●リレーションをその順番でソートするよう設定する、には、
・リレーション先テーブル側の「回数フィールド」に、
・この値一覧「回名値一覧」順でのソートを設定します。
ありがとうございます。
私もその認識だったのですが、レコード番号順?で取得している数字になっているような気がします。
上記の設定はしており、見た目上もリレーション元およびリレーション先とも回数順に並んでいます。
しかし、GetNthRecordフィールドを1.2.3.4とそれぞれ作ると最後に入力した初回が一番最後(GetNthRecord;4)
に表示されてしまいます。
なぜなのでしょうか?
机上だけでなく、ただ今、実施テストで動作検証しましたが、
やはり問題なく、意図した通りの動作を確認できてます。
Last edited by Hiro (2016-02-21 10:48:27)
Offline
フィールドの設定を再計算するにチェックをつけていなかったため、後から追加したものが反映されていませんでした。
Hiroさん
こちらの単純ミスで検証までして頂いて誠に申し訳ありません。
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 569.84 KiB (Peak: 590.74 KiB) ]