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

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

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

You are not logged in.

Announcement

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


#1 2016-02-13 16:03:39

アンドゥ
Guest

低い方を選択する方法

環境
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 

まどろっこしいやり方なら思いつくのですがもしシンプルにできる方法があれば
教えて頂けないでしょうか?

#2 2016-02-13 16:10:04

Shin
Member

Re: 低い方を選択する方法

MIn() でいいでしょうが。
フィールドの定義はどうなっているのですか。12フィールドと書いてあるけど、例には8フィールドか16フィールドですが。

Offline

#3 2016-02-13 16:20:05

アンドゥ
Guest

Re: 低い方を選択する方法

申し訳ありません。
フィールドはAからLまで12フィールドで
1回目、2回目がそれぞれ別レコードです。
それを個人IDをもとにポータルで表示しております。
また、書き忘れていますが
回数レコードは1回目から最大7回目までありますが
特殊な事情で1回目と2回目のみそれぞれのフィールドで最小値を拾って
別のところに点数を初回テストとして保管したいと思っています。

#4 2016-02-13 16:52:39

Shin
Member

Re: 低い方を選択する方法

個人IDというフィールドと、回数、というフィールドがあるのですか。
また、その結果はどのレコードへ持たせるのですか。

個人IDを管理しているテーブルがあるのでしたら、そのポータルのリレーション設定で回数フィールドで昇べきにソートし、Min ( GetNthRecord ( 点数::A ; 1 ) ; GetNthRecord ( 点数::A ; 2 ) ) という様なフィールドを作っていけば良いでしょう。

Offline

#5 2016-02-15 14:46:57

kアンドゥ
Guest

Re: 低い方を選択する方法

回答有難うございます。

Shin wrote:

個人IDというフィールドと、回数、というフィールドがあるのですか。
また、その結果はどのレコードへ持たせるのですか。

はい、おしゃる通りです。
結果はポータルの表示してあるテーブルにフィールドを作りたいと思っています。

Shin wrote:

個人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を拾います。


ソート設定も点数のテーブル、ポータルともに値一覧をもとにソートで設定したのですが
なぜなのでしょうか?

#6 2016-02-15 16:14:40

チポ
Member

Re: 低い方を選択する方法

> ソート設定も点数のテーブル、ポータルともに値一覧をもとにソートで設定したのですが
値一覧でソート?
回数フィールドの昇順でソートですよ。

ポータルにソート設定しないで、
ポータルの上から1回目・2回目と表示されているか確認ですね。

Offline

#7 2016-02-15 16:23:57

アンドゥ
Guest

Re: 低い方を選択する方法

チポ wrote:

> ソート設定も点数のテーブル、ポータルともに値一覧をもとにソートで設定したのですが
値一覧でソート?
回数フィールドの昇順でソートですよ。

ポータルにソート設定しないで、
ポータルの上から1回目・2回目と表示されているか確認ですね。

いろいろと説明不足で申し訳ありませんが
回数のフィールドは初回・一回目・二回目・三回目・最後のような入れ方になっています。
これですと昇順では反応しにくいと思い、値一覧でのソートにしたのですがこれが上手くいかない原因でしょうか?

一応ポータルは初回・一回目・二回目・三回目・最後となっています。

#8 2016-02-15 16:33:49

チポ
Member

Re: 低い方を選択する方法

> 初回
は抜いて、一回と二回を比較するんですよね。

でしたら、
  Min ( GetNthRecord ( 点数::A ; 2 ) ; GetNthRecord ( 点数::A ; 3 ) )
としなければダメでしょう。


GetNthRecord関数のヘルプです。
http://www.filemaker.com/help/14/fmp/ja … tml#100534

関数の意味を理解しましょう。

Offline

#9 2016-02-15 16:49:39

アンドゥ
Guest

Re: 低い方を選択する方法

本当に分かりにくくてすいません。
初回と1回目を比較して点数の低い方を採用したいのです。

最初は分かり易いように1回目と2回目という風に書いてしまいました。

#10 2016-02-15 17:00:49

チポ
Member

Re: 低い方を選択する方法

ならば、最初の
  Min ( GetNthRecord ( 点数::A ; 1 ) ; GetNthRecord ( 点数::A ; 2 ) )
でいいんですが、、

Offline

#11 2016-02-15 17:22:59

アンドゥ
Guest

Re: 低い方を選択する方法

色々とやってみたのですが

初回   4
1回目   1

の場合
Min ( GetNthRecord ( 点数::A ; 1 ) ; GetNthRecord ( 点数::A ; 2 ) )
はやっぱり4とでます。
しかし、
GetNthRecord ( 点数::A ; 1 )
だと4
GetNthRecord ( 点数::A ; 2 )
だと1
とでるようになりましたので
GetNthRecord は機能していると思います。

#12 2016-02-15 17:34:58

barikan
Guest

Re: 低い方を選択する方法

これはFileMaker自体のバグだと思うのですが
なぜかGetNthRecordとMax、Min、List等の統計関数を同時に使うと期待した結果になりません。

#13 2016-02-15 17:38:20

barikan
Guest

Re: 低い方を選択する方法

この場合は、GetNthRecord と Min の部分でスクリプトで分けて計算するか、
集計フィールドの最小値を使うと良いかと思います。

#14 2016-02-15 17:45:44

チポ
Member

Re: 低い方を選択する方法

そんなこと有るんだ!

各フィールドは数字タイプになっていますか?


それでもダメならば、
グローバルフィールドを作り、
  初回
  一回目
と改行で入力
これでリレーションして、
  Min
でいいでしょう。

Offline

#15 2016-02-15 17:45:56

アンドゥ
Guest

Re: 低い方を選択する方法

barikan wrote:

この場合は、GetNthRecord と Min の部分でスクリプトで分けて計算するか、
集計フィールドの最小値を使うと良いかと思います。


GetNthRecord ( 点数::A ; 1 )のフィールドA
GetNthRecord ( 点数::A ; 2 )のフィールドB

を作り
Min(フィールドA;フィールドB)
としたらできました。

ありがとうございました。

#16 2016-02-15 18:06:02

Hiro
Member

Re: 低い方を選択する方法

2者比較だからCase分け計算での対策が楽でないかな?

Let([
   #fst=GetNthRecord(点数::A;1);
   #snd=GetNthRecord(点数::A;2)
];
   Case(#fst>#snd;#snd;#fst)
)

Offline

#17 2016-02-15 22:30:51

Shin
Member

Re: 低い方を選択する方法

検証してみました。確かにバグっぽいですね。
ちょっと不思議な動きを見せてくれます。

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

#18 2016-02-20 11:09:57

アンドゥ
Guest

Re: 低い方を選択する方法

お世話になっております。

解決後にいろいろ提案してくださったのですね。
申し訳ありません。見てませんでした。今検証したらどちらでも可能でした。
後でこちらの方に直したいと思います。

実際にGetNthRecordを使用して運用してみようとすると
以下の問題がでてきました。

変な話なのですが1回目を入力し忘れて
初回
2回目
1回目という順番で入力してしまうことがしばしばあります。
徹底すればいいのですが、もしもの為に解決法を用意しておきたいのですが
レコード番号を振りなおすことはできないでしょうか?
またはレコード番号順ではなく、
回数フィールド(初回・1回目・2回目など)
をみて数値を取得できないでしょうか?

宜しくお願いします。

#19 2016-02-20 12:02:38

Hiro
Member

Re: 低い方を選択する方法

リレーションを介して見た順番だから、そのリレーションをその順番で
ソートするよう設定するのが良いでしょう。

●希望するカスタム順番を作る、には、
・カスタム値で値一覧「回名値一覧」を作り、
・「回」名を希望する順でリストアップします。
  (初回¶1回目¶2回目¶3回目¶4回目¶5回目・・・・¶最終回  など)

●リレーションをその順番でソートするよう設定する、には、
・リレーション先テーブル側の「回数フィールド」に、
・この値一覧「回名値一覧」順でのソートを設定します。

Offline

#20 2016-02-21 09:04:58

アンドゥ
Guest

Re: 低い方を選択する方法

Hiro wrote:

リレーションを介して見た順番だから、そのリレーションをその順番で
ソートするよう設定するのが良いでしょう。

●希望するカスタム順番を作る、には、
・カスタム値で値一覧「回名値一覧」を作り、
・「回」名を希望する順でリストアップします。
  (初回¶1回目¶2回目¶3回目¶4回目¶5回目・・・・¶最終回  など)

●リレーションをその順番でソートするよう設定する、には、
・リレーション先テーブル側の「回数フィールド」に、
・この値一覧「回名値一覧」順でのソートを設定します。

ありがとうございます。
私もその認識だったのですが、レコード番号順?で取得している数字になっているような気がします。
上記の設定はしており、見た目上もリレーション元およびリレーション先とも回数順に並んでいます。
しかし、GetNthRecordフィールドを1.2.3.4とそれぞれ作ると最後に入力した初回が一番最後(GetNthRecord;4)
に表示されてしまいます。
なぜなのでしょうか?

#21 2016-02-21 10:43:17

Hiro
Member

Re: 低い方を選択する方法

机上だけでなく、ただ今、実施テストで動作検証しましたが、
やはり問題なく、意図した通りの動作を確認できてます。

Last edited by Hiro (2016-02-21 10:48:27)

Offline

#22 2016-02-21 11:23:05

アンドゥ
Guest

Re: 低い方を選択する方法

フィールドの設定を再計算するにチェックをつけていなかったため、後から追加したものが反映されていませんでした。

Hiroさん
こちらの単純ミスで検証までして頂いて誠に申し訳ありません。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 569.27 KiB (Peak: 590.17 KiB) ]