みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつも参考にさせて頂いています。
WIN10 Filemaker18を使用しています。
テストの点数があり、それを順に並び替えて上位25%はAランク、中上25%はBランク、中下25%はCランク、下位25%はDランクとしてランク付けしたいのです。
どのようにしたらよいか教えて頂けないでしょうか。
デカルト積で自己リレーション(いわゆる×リレーション)をはり、
Case (
点数 ≥ GetNthRecord ( リレーション::点数 ; Get ( レコード数 ) / 4 ) ; "A" ;
点数 ≥ GetNthRecord ( リレーション::点数 ; Get ( レコード数 ) / 2 ) ; "B" ;
点数 ≥ GetNthRecord ( リレーション::点数 ; Get ( レコード数 ) * 3 / 4 ) ; "C" ;
"D"
)
でどうでしょう。同点は上に入るとします。
人数が4で割り切れるという前提での式ですので、それ以外でしたら、規則を定めて、数字を書き換えてください。
Offline
例外的な状況を考えると、ちょっと面白い。
全員0点なら、全員Aランクでいいの?
普通は、平均点から偏差値をだして、60%tile 位で切るかな。
Offline
下記のページが参考になりませんか
https://bit.ly/3GYPVwV
Offline
Shinさんありがとうございます。
デカルト積で自己リレーション(いわゆる×リレーション)をはるというのが、ちょっと解釈が追いついていないので少し勉強してみます。
himadaneeさん
だめですよね。
nice-guyさん
ちょっと見てみます。
ありがとうございます。
単なる順位は、点数でソートしておいて、
Let (
[
$or = Case (
Get ( レコード番号 ) = 1 ; 1 ;
点数 = $p ; $or ;
Get ( レコード番号 )
) ;
$p = 点数
] ;
$or
)
という式で全置換するだけでもいいですよ。
Last edited by Shin (2021-11-10 08:43:51)
Offline
shinさん
ありがとうございます。
内容が理解できてなかったのですが、そのままスクリプトを作成したら思い通りのものができました。
すごいです。
でも、よく理解できていません。
get(レコード番号)で順位を入力しているのはわかりますが、点数が同じ場合に同じ順位が入力される仕組みがわかりません。
Case関数内の(点数 = $p)とLet関数内の($p = 点数)というのは別の事を言ってるのでしょうか。
初歩的な質問ですみません。
Case関数内の(点数 = $p)は、条件式です。
Let関数内の($p = 点数)は、変数を設定するコマンドです。
1ステップずつ動きを書き出していくと動きガよくわかるはずです。$or を評価するのが、$p を設定する前なので、前回設定値を使って評価します。
得点 $or $p
10 1 10 レコード番号が1
9 2 9 得点 ≠ 10 なので、レコード番号
9 2 9 得点 = 9 なので、$or
6 4 6 得点 ≠ 9 なので、レコード番号
Last edited by Shin (2021-11-10 14:09:43)
Offline
shinさん
重ね重ねありがとうございました。
こんなこともできるんですね。
非常に勉強になりました。
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 520.4 KiB (Peak: 525.3 KiB) ]