#計算フィールドとは
あえて記載するまでも無いかもしれませんが、テキスト、数字、日付、時刻、またはオブジェクトの計算を行うためのフィールドの設定です。
四則演算だけでなくファイルメーカーで使用できるスクリプトステップをを駆使して、様々な値をセットすることができます。
#計算フィールドの問題点
ファイルメーカは、簡単な手順でデータベースに対し計算フィールドや集計フィールドという形で演算処理、集計処理を行うことができます。
しかし、便利である反面、デメリットを理解して運用しないと集計に時間がかかったり、検索に時間がかかったりと簡単にストレスMAXな環境になってしまいます。
以下、計算フィールドの問題点と、置き換えの手段についてまとめたいと思います。
###データベースの特性
ファイルメーカーは、データベースなので基本的にはデータを集めて
検索・抽出などの再利用が主目的となります。
データベースは高速に検索、集計を実施するためにインデックス(索引)と呼ばれる目印をつけることで高速化を図ります。ファイルメーカでも他のデータベースと同じように特定のフィールドで検索をかけるとインデックス(索引)を作成し高速化を図ります。そのため1回目の検索はインデックス(索引)を作成するため少し時間がかかりますが、2回目以降の検索はかなり高速に検索するという動作になります。
###計算フィールドの特性
ここで、問題になってくるのは計算フィールドの特性です。
演算した計算結果を表示するという特性上、都度、値が変わる可能性があるため
計算フィールドはインデックス(索引)を保持することができません。
計算結果は常に変わる可能性があり目印が正しく機能しなくなるためです。
この結果、計算フィールドは検索、抽出をするたびにすべて計算をし直した後
結果をもとに検索抽出を実施する動作となり、処理に時間が大きくかかってしまう状況になってしまうのです。
#利用者が快適に作業するために考えること
計算フィールドを正しく把握していくことで問題を管理することができます。
###①レイアウトを整理する
利用者にとって、レイアウトにあるフィールドは、
すべて検索できるものと考えると思います。
対応をとっていくために、利用者が検索をかけて利用するインタフェース(UI)としてのレイアウトと、帳票印刷用、スクリプト計算用など利用者が意識することがないそれ以外のレイアウトを整理しておくといいと思います。
後者のレイアウトは検索等は発生しないため、考慮する必要はありません。
###②計算フィールド利用箇所を判断
計算フィールドに対して検索する必要あるかチェックする。
検索の必要が無い場合は、
インスペクタ→データ→フィールド入力欄から検索モードのチェックをはずして
検索できないようにするといいと思います。
###③計算フィールドを通常のフィールドに置き換える
計算フィールドの値を検索対象として扱いたい場合、
計算フィールド→通常フィールドに置き換えを検討するといいと思います。
オプション→入力値の自動化の欄に計算式をセットすることで値を取得できます。
ただし、このオプションはフィールド作成時に動作する機能であるため
新規レコード作成時にしか値の更新をしません。
その場合はスクリプトを活用して、定期的にフィールド内容を更新してください。
(次の項で説明します。)
###④更新するための仕組みを用意する。
③で作ったフィールドに対して、更新スクリプトを用意して
更新したいタイミングでスクリプトトリガを呼び出します。
(画面を開いたとき更新、計算式に利用するフィールドが更新されたとき等)
#参考 更新スクリプトのおすすめ
###・表示中レコード更新の場合
スクリプトステップ
「フィールド内容の全置換→置換→計算結果で置き換える」
に対し、該当の計算式を埋め込んで実行する。
###・現在レコードのみの更新でいい場合
スクリプトステップ
「フィールド設定→計算結果」
に対し計算式を埋め込んで実行する。
#その他、高速化のためできること
###検索方法を工夫する
検索時、計算フィールドの値を再更新する対象は表示中のレコード全てが対象になります。
そのため、検索条件が複数あり計算フィールドでない条件もある場合は
先に計算フィールド以外の条件で検索を実行した上で、計算フィールドで絞り込みするようにすると高速に検索を実行することができます。