Modelerデータ加工TIPS#08 サンプルコード
Nヶ月後の日付を求めるフィールド作成
Clem式
if datetime_month(起算日)+6 > 12
# Nヵ月後が次の年になる場合
then if member(datetime_month(起算日) +6-12, [4 6 9 11]) and datetime_day(起算日) = 31
# 小の月
then datetime_date(datetime_year(起算日)+1, datetime_month(起算日)+ 6 -12, 30)
else if datetime_month(起算日)+6-12 = 2 and member(datetime_day(起算日), [29 30 31])
then if (datetime_year(起算日)+1) rem 4 = 0 and ((datetime_year(起算日)+1) rem 100 /= 0 or (datetime_year(起算日)+1) rem 400 = 0)
# 2月うるう年
then datetime_date(datetime_year(起算日)+1, 2, 29)
# 2月平年
else datetime_date(datetime_year(起算日)+1, 2, 28)
endif
# 大の月
else datetime_date(datetime_year(起算日)+1, datetime_month(起算日)+6-12, datetime_day(起算日))
endif
endif
# Nヵ月後が年内の場合
else if member(datetime_month(起算日)+6, [4 6 9 11]) and datetime_day(起算日) = 31
# 小の月
then datetime_date(datetime_year(起算日), datetime_month(起算日)+6, 30)
else if datetime_month(起算日)+6 = 2 and member(datetime_day(起算日), [29 30 31])
then if datetime_year(起算日) rem 4 = 0 and (datetime_year(起算日) rem 100 /= 0 or datetime_year(起算日) rem 400 = 0)
# 2月うるう年
then datetime_date(datetime_year(起算日), 2, 29)
# 2月平年
else datetime_date(datetime_year(起算日), 2, 28)
endif
# 大の月
else datetime_date(datetime_year(起算日), datetime_month(起算日)+6, datetime_day(起算日))
endif
endif
endif
Modelerデータ加工TIPS#08 サンプルコード2
パラメータを使ってスーパーノード化する場合
Clem式
if datetime_month(起算日)+'$P-month' > 12
# Nヵ月後が次の年になる場合
then if member(datetime_month(起算日)+'$P-month'-12, [4 6 9 11]) and datetime_day(起算日) = 31
# 小の月
then datetime_date(datetime_year(起算日)+1, datetime_month(起算日)+'$P-month'-12, 30)
else if datetime_month(起算日)+'$P-month'-12 = 2 and member(datetime_day(起算日), [29 30 31])
then if (datetime_year(起算日)+1) rem 4 = 0 and ((datetime_year(起算日)+1) rem 100 /= 0 or (datetime_year(起算日)+1) rem 400 = 0)
# 2月うるう年
then datetime_date(datetime_year(起算日)+1, 2, 29)
# 2月平年
else datetime_date(datetime_year(起算日)+1, 2, 28)
endif
# 大の月
else datetime_date(datetime_year(起算日)+1, datetime_month(起算日)+'$P-month'-12, datetime_day(起算日))
endif
endif
# Nヵ月後が年内の場合
else if member(datetime_month(起算日)+'$P-month', [4 6 9 11]) and datetime_day(起算日) = 31
# 小の月
then datetime_date(datetime_year(起算日), datetime_month(起算日)+'$P-month', 30)
else if datetime_month(起算日)+'$P-month' = 2 and member(datetime_day(起算日), [29 30 31])
then if datetime_year(起算日) rem 4 = 0 and (datetime_year(起算日) rem 100 /= 0 or datetime_year(起算日) rem 400 = 0)
# 2月うるう年
then datetime_date(datetime_year(起算日), 2, 29)
# 2月平年
else datetime_date(datetime_year(起算日), 2, 28)
endif
# 大の月
else datetime_date(datetime_year(起算日), datetime_month(起算日)+'$P-month', datetime_day(起算日))
endif
endif
endif