检查日期之间的差异是否恰好是表达SSRS中的'n'个月

时间:2014-02-11 05:06:41

标签: tsql reporting-services

在我的季度报告中,我试图验证两个参数StartDateEndDate。 我首先检查日期之间的差异是否为2个月:

Switch(DateDiff(
DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) <> 2, 
"Error message")

然后我尝试添加StartDate是否是月的第一天而EndDate是月的最后一天:

And (Day(Parameters!StartDate.Value) <> 1 
And Day(DATEADD(DateInterval.Day,1,Parameters!EndDate.Value)))

所以整个表达式看起来像这样:

Switch(DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) <> 2  
And 
Parameters!IsQuarterly.Value = true 
And 
Day(Parameters!StartDate.Value) <> 1 
And
Day(DATEADD(DateInterval.Day,1,Parameters!EndDate.Value))<>1),
"Error: Quarterly report must include 3 months")

但是,当日期之间的差异仍为2个月时,它会出错,但StartDateEndDate不是整个期间的第一天和最后一天。

我很感激任何帮助:)

1 个答案:

答案 0 :(得分:2)

我会说改变实现添加另外两个带季度和年份的参数 季度如Q1,Q2,Q3&amp; Q4,价值1,2,3&amp;分别为4和2012,2013,2014&amp;等等

现在根据选择的参数Qtr&amp;年份设置默认值start&amp;结束日期

=DateSerial(Parameters!Year.Value), (3*Parameters!Qtr.Value)-2, 1)  --First day of Quarter
=DateAdd("d",-1,DateAdd("q",1,Parameters!Year.Value, (3*Parameters!Qtr.Value)-2, 1))) --Last day of quarter

这样做不需要进行任何验证bcz它总是得到正确的日期差异。

其他参考

First day of current quarter

=DateSerial(Year(Now()), (3*DatePart("q",Now()))-2, 1)

Last day of current quarter

=DateAdd("d",-1,DateAdd("q",1,DateSerial(Year(Now()), (3*DatePart("q",Now()))-2, 1)))