FileMaker 【19】計算式

前回は、画面設計(レイアウトの世界)の計算式について学びました。
今回は計算式に共通する内容について学んでいきます。

データタイプと論理式

文字列 ( テキストタイプの値 ) を比較演算子で評価した論理式の結果は、少しあいまいな評価の結
果が返ることに注意してください。

比較演算子では文字列の大文字と小文字を区別しない。

Exact ( テキスト ; 比較テキスト )   大文字と小文字を区別して比較する。
 Exact ( “A” ; “a” )

数値や日付は、ファイルが作成された日付書式と同じでないと正しい評価が出ない。

数値や日付、タイムスタンプタイプを比較演算子で評価する場合、テキストの日付の書式は、ファイルが作成されたシステムの日付書式と同じである必要がある。そうでないと正しい評価が出ない。

GetAsDate ( テキスト )  テキストに含まれる日付を日付フィールドタイプに変換して、日付または日付関数を使用する計算式で使用できるようにする。
 GetAsDate ( “2018/5/7” ) < GetAsDate ( “2018/5/11” )

Date ( 5 ; 7 ; 2018 ) < Date ( 5 ; 11 ; 2018 )
これでも良い👍

よく使われる関数

数字関数

数字データを操作するための関数。

Int(数値)  数値の整数部分だけを返す。
 Int(-23) =-23
Abs(数値)   数値の絶対値だけを返す。
 Abs(-23) =23

テキスト関数

テキストデータを利用するための関数。

Length(テキスト)   指定した文字列の文字数を返す。戻り値は数字。
 Length(” あ Aa ア A a “) = 6
Substitute ( テキスト ; 検索テキスト ; 置換テキスト )   文字列の置換をおこなう関数。戻り値はテキスト。
※大文字と小文字を区別するためアルファベットを含む文字列を置換する場合には注意が必要。
 Substitute ( ” ファイトメーカー ” ; ” ト ” ; ” ル ” ) = ファイルメーカー

<文字列を一度に複数指定して置換する記述方法>

Substitute (
"fileMaker pro"
  [ "f" ; "F" ]; // この時点では「FileMaker pro」
  ["p";"P"]; // この時点では「FileMaker Pro」
  [ "Pro" ; "Pro 19" ]// →「FileMaker Pro 19」
)

日付関数

Date ( 月 ; 日 ; 年 ) Date は年月日を個別に指定すると、日付タイプの結果を返す。
 Date ( 5 ; 7 ; 2018 ) = 2018/05/07

<引数に関数を使用できる>

↓今月 1 日を返す式: 今日が 2021 年 5 月 7 日なら、2021 年 5 月 1 日を返す。

Date ( 1 ; Day ( Get ( 日付 ) ) ; Year ( Get ( 日付 )) )

<月末日を返す式>
月によって末日が 30 や 31、閏年がある。

Date ( Month ( Get ( 日付 )  ) + 1 ; 1 ; Year ( Get ( 日付 ) ) ) - 1

「来月 1 日の前日を求める」という式になる。
月末が 30 日でも 31 日でも、28 日でも問題ない。
・月の「Get ( 日付 )」から取り出したものに + 1 することで来月とし、日は「1」という固定の値にすることで、まず「来月 1 日」の日付を生成する。
・最後の「- 1」で、「来月 1 日」の日付から1 日引くことで、結果的に末日の日付を得ることができる。

以下のような書き方もできる。↓↓↓

Date ( Month ( Get ( 日付 )  ) + 1 ; 0 ; Year ( Get ( 日付 ) )

Date 関数の引数として使用する「日」の部分に「1 マイナス 1」の値(つまり 0)を直接指定している。

論理関数

特定の条件が満たされているかどうかを判断するための関数

If ( 条件式 ; 結果 1 ; 結果 2 )   条件式が真の場合は結果 1、条件式が偽の場合は結果 2 を返す。
 「売上日」フィールドの日付と消費税率の施行日を比較した結果の論理値に従って消費税
率を返す。

If ( 売上日 < Date ( 4 ; 1 ; 2014 ) ; 0.05 ; 0.08) 

2014/4/1より前の日付の場合(真)0.05 偽の場合0.08

IsEmpty ( フィールド )   引数に指定したフィールドが空欄、または他のエラーが発生した場合に 1(真)、それ以外の場合は 0(偽)を返す。戻り値は数字。
関連フィールド、関連テーブル、リレーションシップまたはファイルが見つからない場合も 1(真)を返す。

Self   フィールド定義や条件付き書式、ポップアップヘルプなどで「自分自身」を使った計算
式の必要がある場合、フィールド名を指定する引数の代わりに利用できる。
 RomanHankaku ( Self )

※Self 関数を使っていればフィールド名が特定されていないため、そのまま同じ計算式をコピー&ペー
スト(貼り付け)して他のフィールドやレイアウトオブジェクトの計算式に再利用できる。

Case ( 条件 1 ; 結果 1 {; 条件 2 ; 結果 2 ; … ; デフォルト値 } )
複数の条件を元に合致した結果の1つを返す。
式に記述された条件を順番に評価して合致する条件(1、つまり真になる評価結果)が見つかったとこ
ろで、その条件とセットになっている結果の値を返す

 

Case (
  売上日 > Date ( 3 ; 31 ; 2014 ) ; 0.08 ;
  売上日 > Date ( 3 ; 31 ; 1997 ) ; 0.05 ;
  売上日 > Date ( 3 ; 31 ; 1989 ) ; 0.03 ;
  0 )  ⇦どの条件にも当てはまらない場合に返す結果。


 今日が 2015 年 5 月 7 日なら、最初の条件に当てはまって 0.08 を返す。

※条件が合致するとそれ以降の処理は行われない。

式の記述では、合致する可能性が高いと考えられる条件から順番に記述すると負荷が低くなる。また条件式と結果のセットごとに改行して読みやすく記述すると良い。

Let ({[} 変数 1 = 式 1 {; 変数 2 = 式 2…]}; 計算
始めに変数を指定し、その後変数を使用して式をつくることができる。

○結果は15。xに5を代入して計算。5+10 15
 ↓↓↓

 Let (
  x = 5 ;
  x + 10 )

○Date 関数の例の式を、Let 関数で書き替えることもできる。
今月 1 日を返す式(今日が 2018 年 5 月 7 日なら、2018 年 5 月 1 日を返す。)
↓↓↓

Let (
 x = Get ( 日付 ) ;
  Date ( Month ( x )  ; 1 ; Year ( x ) ) )

複数の変数を宣言する時には[ ]に入れる。
「売上日」フィールドの日付と消費税率の施行日を比較する式。
 (今日が 2018 年 5 月 7 日なら、最初の条件に当てはまって 0.08 を返す)

Let (
[ x = 売上日 ; a = 0.08 ; b = 0.05 ; c = 0.03 ];
   Case (
   x > Date ( 3 ; 31 ; 2014 ) ; a ;
   x > Date ( 3 ; 31 ; 1997 ) ; b ;
   x > Date ( 3 ; 31 ; 1989 ) ; c ;
   0 ) ) 

GetAs ○○

引数で与えられたデータで結果を返す。

<データタイプの変換>

GetAsText ( データ )
GetAsNumber ( テキスト )
GetAsDate ( テキスト )
GetAsTime ( テキスト )
GetAsTimestamp ( テキスト )

フィールドタイプ 5 種類に対応する関数。その名の通りのタイプの戻り値を返す。
文字列を日付タイプに変換したり、数字まじりの文字列から数字を抜き出し、数値に変換したりする。

<数字とオブジェクトの真偽>

GetAsBoolean ( データ )

引数に指定した値やフィールドのデータにより戻り値が異なる。戻り値のタイプは数値。

・数値でゼロ以外は 1(真)
・数値でゼロか空白は 0(偽)
・数値以外のタイプは 0(偽)
・指定がオブジェクトタイプのフィールドで値がある場合は 1(真)
・指定がオブジェクトタイプのフィールドで値がない場合は 0(偽)

Get ( ○○ )

「取得」という種類の関数。
※この種類の関数では、引数部分は他の関数と違い固定されている。そのまま変更せずに使用すること。

「その時点の情報」を取得するものなので使用時には注意が必要です👀

計算タイプのフィールドに設定されている計算式が取得関数のみで構成されていると、再評価するタイミングがなく最初に評価した結果をずっと格納し続ける。この問題を避けるために
は、索引を非保存にする必要がある(フィールドオプションの[計算式の指定]ダイアログから[フィールドの索引オプション]ダイアログで設定)

コメント

計算式とは違いますが、計算式の中にコメントが書ける。

//    一行コメント
/* */    複数行コメント

  • 計算の目的
  • 作成時の日付
  • 誰が作成したか

などを記述しておくことで、後からの作業効率が高まります。

フィールド作成時の[コメント]もある。状況に合わせて使用すると良い。


コメント

タイトルとURLをコピーしました