サポート > 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) | 隠し項目 |
