備忘録23〜FileMakerで気になった関数・・・

前回は、納品書の動作検証をしました。

今回は、別件で作成を開始したスクール会費計算で使用した「Let関数」についてです。

入学日と更新年月日で現在日からの比較で年1回の更新費用の算出とかするのに使ってみました。

関数・・・

Let関数が覚えると、計算式の構築が楽になったのでご紹介をしようと思います。

If関数とかCase関数が出てきますが、それはまた今度、別な機会で・・・

Let関数を使わない場合・・・

Case ( 
IsEmpty ( Min ( 保護者_basic|生徒::次回更新日) ); Min(保護者_basic|生徒::入学日) ;

 Min ( 保護者_basic|生徒::次回更新日)

 )

保護者レコードの子に生徒レコードを作っている状態で、計算をしています。

  1. 生徒のレコードで一番小さい(古い)日付の次回更新日があるかどうか
  2. なかったら、入学日を表示
  3. あったら、次回更新日を表示

同じことをLet関数で表すと


Let ( 
[
//変数定義:変数名=計算式 または フィールド名またはグローバル変数など
@kousin = Min ( 保護者_basic|生徒::次回更新日);
@nyugaku = Min(保護者_basic|生徒::入学日)

];

//ここから計算
Case ( 
IsEmpty ( @kousin ); @nyugaku ;

@kousin

 )
//ここで計算完了
 )

長くなっただけじゃないかと思うかもしれません。

しかし、条件によって値を変える場合に、その条件が複雑に定義する場合とかが出てくると思います。

その時に、「//ここから計算」の中を、変数名にすると変数定義毎に値を確認できるので

計算式の設定間違いや意図しない結果が返ってくるのを探しやすくなると思います。

例えば、複雑な計算式だと・・・

以下のように先に、変数内で計算をさせておく事もできます。中上級者からしたら、まだまだ複雑じゃないと怒られそうですが・・・

Let ( 
[
@genzai = 保護者_basic::g年月;
@nyuugaku = 保護者_basic|生徒::入学年月;
@kousin = Year ( 保護者_basic|生徒::次回更新日 ) & Right ( "00" & Month ( 保護者_basic|生徒::次回更新日 ) ; 2 );
@mon = Month ( 入学日 );
@f_m= 
Case ( 
@mon = 3;12 ; 
@mon = 2;11 ; 
@mon = 1;10 ; 
@mon = 12;9 ; 
@mon = 11;8 ; 
@mon = 10;7 ; 
@mon = 9;6 ; 
@mon = 8;5 ; 
@mon = 7;4 ;
@mon = 6;3 ;
@mon = 5;2 ;
@mon = 4;1 
 )
];

Case ( 
not IsEmpty ( 失効フラグ );0;
@genzai = @nyuugaku ; GetRepetition ( 保護者_basic|生徒|コースマスタ::初回登録費用 ; @f_m );

@genzai = @kousin ;保護者_basic|生徒|コースマスタ::初回登録費用;

0

 )
 )

更新日がある場合は更新費用がでるのですが、入学したばかりの時は、入学の月によって入学金の変更をしたかったので・・・

入学日から、入学月を出して、その月に対応する繰り返しフィールドの番号を算出させておく。

最後に、繰り返しフィールド名と計算結果の数字を組み合わせて入学金を算出するようにしてます。

こんな風に、途中で条件に使う計算結果を事前に変数内部に設定する事で、最後に書く計算式がわかりやすくなります。

これを学習する以前は、最初に書いた計算式のように、ゴリゴリ書いて計算をしてました。

ただ、途中で間違っていた時に直すのがとても大変です😱

Case関数・・・上の計算で書いているのでさらっとね

最近のエクセルはIFSがあります。複数条件で値を変えることができますね。

=IFS(B3>=80,"優",B3>=70,"良",B3>=60,"可",TRUE,"不可")

同じようにFileMakerでも複数条件で使える関数が「Case」になります。

Case(
点数>=80;"優";
点数>=70;"良";
点数>=60;"可";
"不可"
)

とかけます。セル番号の代わりにフィールド名であること、真偽の判定はいらないので「TRUE」がいらないです。

エクセルは昔だとIfを繰り返し使って計算していたのですが、

=IF(B3>=80,"優",IF(B3>=70,"良",IF(B3>=60,"可","不可")))

こんな感じですね・・・すぐに分かる計算式ではないように思えます。

AND(条件Aと条件Bが揃う時)とかOR(条件Aか条件Bが一致する時)とかも入れて条件分岐ができます。

最後に

Let関数がとても便利だったので書いてみました。

FileMaker学習の初級編はとりあえずみ終わって、順次中級編の動画を見つつ勉強中です。

こちらのサイトも、大変わかりやすく開設されており勉強になりました!

スポンサーリンク