CASE语句无法返回滚动12个月周期的销量总和
问题根源
你的语句始终返回0,核心是两个错误:
BETWEEN的日期顺序写反了BETWEEN a AND b的生效逻辑是判断值大于等于a、小于等于b,要求a必须是比b小的下限值。你写的两个边界里,LAST_DAY(ADD_MONTHS({today}, -12))是12个月前的月末,LAST_DAY(ADD_MONTHS({today}, -13))是13个月前的月末,后者时间更早,相当于你要求交易日期同时满足「晚于12个月前的月末、早于13个月前的月末」,没有任何日期能符合这个条件,自然永远走ELSE分支返回0。- 日期范围逻辑和你要的「前12个滚动月」需求不匹配
你原来写的两个边界跨度只有1个月,哪怕顺序调对,也只能统计13个月前到12个月前这一个整月的销量,根本覆盖不到12个月的范围。
修正代码
根据常见的滚动12个月统计场景,分两种情况写:
- 统计包含当前月在内的近12个月销量:
CASE WHEN {trandate} BETWEEN ADD_MONTHS(LAST_DAY({today}), -12) + 1 AND LAST_DAY({today}) THEN {quantity} ELSE 0 END
- 统计不包含当前月的过往完整12个自然月销量(即从去年当月到上个月月末):
CASE WHEN {trandate} BETWEEN ADD_MONTHS(LAST_DAY({today}), -13) + 1 AND LAST_DAY(ADD_MONTHS({today}, -1)) THEN {quantity} ELSE 0 END
补充说明
写NetSuite保存搜索的公式时,用「上月最后一天+1」的方式取月份起始日,比手动拼接月份第一天的写法兼容性更好,能避免因为字段带时分秒精度导致的边界日期漏统计问题。
内容的提问来源于stack exchange,提问作者Dan Moore
相关产品推荐
相关产品推荐

