サポート > Wagby定義ファイル > 12 自動計算 > 自動計算式の例

年齢や所要時間の算出をはじめとする、さまざまな自動計算式の記述例を紹介します。

生年月日から年齢を求める

「顧客(customer)」モデルにおいて、「生年月日(birth)」項目と「年齢(age)」項目を用意した例を示します。

年齢項目(整数型)の自動計算式を次のように記載します。

DATEDIF(${birth}, TODAY() ,"Y")

「何年何ヶ月」という表記を行なわせることもできます。この場合、年齢項目は文字列型とします。

DATEDIF(${birth}, TODAY() ,"Y") + "年" + DATEDIF(${birth}, TODAY() ,"YM") + "ヶ月"

この詳細は「DATEDIF関数」の説明をお読み下さい。

所要時間を求める

サポートモデルの「開始時間(date1)」と「終了時間(date2)」から、「所要時間」を自動算出させる例を示します。 ここで「所要時間」の方は時間型としてください。なお、24 時間を超過した分は切り捨てられます。

BETWEENTIME(${date1}, ${date2})

この詳細は「BETWEENTIME関数」の説明をお読み下さい。

条件によって算出値を変える

数値型項目 source の値により、同モデル内の数値型項目 cvalue を変えるという例を紹介します。 次のようなルールを実現するものとします。

source の値 cvalue の値
10より小さい 100
20より小さい 200
それ以外 300

このとき、項目 cvalue の式は次のように記述することができます。

IF(${source}<10,100,IF(${source}<20,200,300))

計画日と実績日の差異を求める

「計画日(plandate)」と「実績日(realdate)」を含むモデル定義があるものとします。ここで、「遅延」(整数型)の値を次のルールによって算出するものとします。

条件 遅延の算出ルール
実績日が未入力 今日の日付と、計画日(plandate)との差
実績日が入力済 実績日(realdate)と、計画日(plandate)との差

このとき、遅延項目(整数型)の式は次のように記述することができます。

IF(${realdate}==null,DATEDIF(${plandate},TODAY(),"D"),DATEDIF(${realdate},${plandate},"D"))

ここで "${realdate}==null" とは、この値がセットされていないという意味です。 null と比較できる項目の型は文字列型、日付型、時間型、日付時間型です。

文字列の連結

文字列項目 sitem1 と sitem2 を連結した、sitem3 を自動計算として記述することもできます。

次のような式になります。

${sitem1}+":"+${sitem2}

しかし上記式の場合、sitem1 または sitem2 の値が未設定(null)の場合や、空白の場合を考慮していません。 sitem1 と sitem2 のいずれもが有効(未設定でなく、空白でもない)の場合にのみ sitem3 を出力する場合は、次のような式になります。

IF(AND(!ISBLANK(${sitem1}),!ISBLANK(${sitem2})), ${sitem1}+":"+${sitem2}, "")

繰り返しコンテナに記載された値の合計を求める

繰り返しコンテナ payment 内に、日付型項目 pdate と金額 amount が用意されています。 このとき、payment/amount の合計値を(この繰り返しコンテナではない)total 項目にセットするようにします。 ただし、次のルールを適用します。

  • payment/pdate が本日の日付より前であれば payment/amount の値を用いる。
  • そうでなければ 0 とする。

この実現のために、まず繰り返しコンテナ payment に、一時的な計算結果をセットする整数型の隠し項目 tmp を用意します。 項目 tmp の式は次のとおりです。

IF(DATE(${payment/pdate})<=DATE(TODAY()), ${payment/amount}, 0)

日付の比較を行う場合、DATE 関数を使って日付を数値化する必要があります。

集計値を格納する項目 total には、sum 演算子を適用します。sum 演算子の括弧の中は、項目名を記載します。

${sum(payment/tmp)}

以上を整理すると、次のような定義になります。(必要な項目のみ抜粋しています。)

項目名(日本語) 項目名(英語) 項目の型 自動計算式 その他
集計 total 8バイト整数 ${sum(payment/tmp)}
支払 payment 繰り返しコンテナ
支払回数 payment/pid 繰り返しコンテナID
支払日 payment/pdate 日付
支払金額 payment/amount 8バイト整数
支払金額(集計用) payment/tmp 8バイト整数 IF(DATE(${payment/pdate})<=DATE(TODAY()), ${payment/amount}, 0) 隠し項目