使用ParallelPeriod注意事项-31日返回空值

来源:互联网 发布:top域名需要备案吗 编辑:程序博客网 时间:2024/06/05 08:53

         如下面一个语句,查询的是2010-12-31日3个月前的那个日期,系统本应该返回的是2010-09-31,而我们知道9月份只有30没有31日的。结果系统实际最后返回给我们的是一个空值,所以碰到很多网友发现根据日期并用到了这个函数去查询结果时数据总不正确,很可能是这个潜在的问题导致的。

ParallelPeriod([ABM RECORDDATE].[年-半年-季度-月-日].[The Month],3,[ABM RECORDDATE].[年-半年-季度-月-日].[The Date].&[2010-12-31:00:00])

 

所以我们获取日期的语句可以改成

IIF(
ISEMPTY(ParallelPeriod([ABM RECORDDATE].[年-半年-季度-月-日].[The Month],3,[ABM RECORDDATE].[年-半年-季度-月-日].[The Date].&[2010-12-31T00:00:00])),
PeriodsToDate([ABM RECORDDATE].[年-半年-季度-月-日].[The Month],[ABM RECORDDATE].[年-半年-季度-月-日].[The Date].&[2010-12-31T00:00:00]).item(0).parent.lag(2).firstchild.PREVMEMBER,
ParallelPeriod([ABM RECORDDATE].[年-半年-季度-月-日].[The Month],3,[ABM RECORDDATE].[年-半年-季度-月-日].[The Date].&[2010-12-31T00:00:00])
)

像刚才的日期返回为空,我们改成返回2010-09-30,即本月1日(2010-12-01)的前两个月的第一天(2010-10-01)的前一天即2010-09-30

 

基本所有用到ParallelPeriod这个函数的网友都应该注意到这个问题。

我是通过IIF来判断的,网友有更简便更好的办法,可以分享一下。

另外考虑问题时要留意,2月有28日的,后面的29,30,31要找2月的对应日期都找不到的情况。

原创粉丝点击