計算式を使って値を取得し、値が保存される2つのフィールド設定について
2023年12月27日 12:30 PM
Claris FileMaker 2023
みなさま、こんにちは!
今回は、Claris FileMakerにおけるフィールド入力で「既存値の置き換えがされるフィールド」と、「計算結果が保存される計算タイプのフィールド」の使い分けについてご紹介します。
この2つはどちらも参照する値が変更されるごとに計算式によって値を自動的に求めるフィールドです。
わかってしまえばはっきりと分かれるこのフィールド設定の違いについて、理解ができればよりスムーズに自信をもってフィールドの設定作業が行えますよね。
今回はその違いについて、以下の4項目に分けてご紹介いたします。
- 計算タイプのフィールドについて
- 計算結果の「保存」「非保存」の違いについて
- 既存値の置き換えがされるフィールドについて
- 2つのフィールド設定の使い分け
1.計算タイプのフィールドについて
まずは計算タイプのフィールについてです。
「計算タイプのフィールド」とは、計算式を実行した結果が表示されるフィールドです。
〇計算タイプのフィールドの作成方法
[ファイル] メニュー > [管理] > [データベース…] を選択し、[フィールド] タブ をクリックし、新しいフィールドを作成します。右下の「タイプ」で「計算」を選択します。
2.計算結果の「保存」「非保存」の違いについて
次に、「保存」「非保存」の違いについてです。
〇計算タイプのフィールドの保存、非保存の設定方法
タイプの右の「オプション」を押すと計算式を設定するウインドウが表示されます。
そのウインドウの左下の「索引オプション」を押すと、[計算結果を保存せず必要時に再計算する]という項目のチェックボックスがあります。
計算結果が保存されない=「非保存」という言葉を使います。
ここにチェックを付けると「非保存の計算タイプのフィールド」、
チェックが無ければ「計算結果が保存される(保存)計算タイプのフィールド」です。
〇非保存の計算タイプのフィールドと保存される計算タイプのフィールドの違い
「フィールドの値が評価されるタイミング」と「検索のパフォーマンス」に違いがあります。
値が常に変化する場合が多い取得関数や日付関数を使っている場合は、計算結果が保存される計算タイプのフィールドにしてしまうと求めたい値が取得できない場合があります。
「非保存の計算タイプのフィールド」が評価されるタイミングが、フィールドが参照された時やレイアウトに出現した時です。
よって、「あと〇日」や「今何歳」などという、時間の変化で計算結果が変化する値を求めたい場合には、「非保存の計算タイプのフィールド」にすることで常に求めたい値を取得できます。
また、計算式の中で関連フィールド、集計フィールド、非保存の計算フィールド、グローバル格納を使っている場合は、ここにチェックを付けたくてもチェックが付けられないため、「非保存の計算タイプのフィールド」にするしかありません。
「計算結果が保存される(保存)計算タイプのフィールド」が評価されるタイミングは計算に使う値が更新された時です。
ある金額を求める、「単価 * 数量」という計算式を入力したフィールドを作成した場合に、単価や数量の値が変わった時は、レイアウトに値が表示されている、いないに関わらずこのフィールドの値を求めます。
またこの状態では自動的に索引が設定されるため、検索でのパフォーマンスが良いという利点があります。
3. 既存値の置き換えがされるフィールドについて
既存値の置き換えがされるフィールドとは、テキスト、数字、日付、時刻、およびオブジェクトなどのフィールドタイプで「入力値の自動化」オプションで計算式を設定した場合に選択ができる[フィールドに既存の値が存在する場合は置き換えない] チェックボックスのチェックを外した状態のフィールドの事です。
また、この既存値の置き換えがされるフィールドが評価をされるタイミングは、参照している値が変更されたときであり、フィールドの値は保存されます。
ただし、参照する値に関連レコードを使う場合は、その関連レコードの値の更新だけではフィールドの値が再評価されないという点に注意が必要です。
例えば、「見積明細」テーブルの「金額」フィールドの合計を「見積」テーブルの「合計」フィールドに持たせたい場合ですが、以下のような計算式で値を求めることができます。
これを既存値の置き換えがされるフィールドの計算式として設定してしまうと、「見積明細」テーブルの「金額」に変更があっても、値が再評価されません。
よって、この場合は「見積」テーブルの「合計」フィールドは非保存の計算タイプのフィールドにする必要があります。
4. 2つのフィールド設定の使い分け
使い分けと言っても、そもそも参照するフィールドや値が更新されるたび最新の結果を取得したいなら計算フィールドを使うし、計算結果を修正したいなら入力値の自動化を使うだけでは?と思いますよね。
しかし、その使い分けだけでは作成したい機能が実現できない場合があります。
見積書を作成するシステムで、見積番号を取得したい場合を例に挙げてみます。
「自社情報」というテーブルに会社の「年度の切り替え月」フィールドがあり、「見積」というテーブルに「見積作成日」というフィールドが、またその「見積作成日」フィールドを参照して、年度4桁+0001から1ずつカウントアップする年度ごとの番号4桁が自動採番されるような「見積番号」フィールドを作成したい場合・・・
「見積」テーブルにその見積が作成された年度を判断する「年度」フィールドを作成し、「年度」フィールド同士をリレーションキーにして自己リレーションを繋げることができれば、年度ごとの番号を取得する設定が作成できます。
そのために年度の値を求めるため作成した計算式の例が以下になります。
「年月日」のフィールドを参照してその日付の「年度」を取得する場合には、計算フィールドを使用するのが一般的だと思います。
しかし、関連レコードの値を参照する必要があり、上記の画像のように計算フィールドを設定してしまうと非保存の計算フィールドになってしまいます。
非保存の計算フィールドは索引が無いためにリレーションキーに設定することができません。
ここで、「年度」フィールドを計算値自動入力で設定してみると…
値が保存される計算値自動入力のフィールドに設定することができます
(ルックアップを使って年度の切り替え月フィールドの値を現在のテーブルのフィールドに持つことも可能ですが、フィールドを増やさずに計算値自動入力を使ったほうが簡単かと思います。)
これで、「年度」フィールド同士をリレーションキーにして自己リレーションを繋ぐことができるようになりました!
あとは、作成したリレーションを使って「年度別見積番号」フィールドの値を取得して、
「見積番号」フィールドに計算値自動入力を設定します。
2つのフィールド設定を目的ごとに使い分けることで、
年度4桁+0001から1ずつカウントアップする年度ごとの番号4桁
の値を取得することができるようになりました。
いかがでしたでしょうか。
知っている人にとっては当たり前の内容だったかもしれませんが、こういった違いは意外と見落としがちで、つまずきやすいポイントだったりもしますよね。
最後まで読んでくださりありがとうございます。