SSRS - DateValue

时间:2013-05-16 13:25:52

标签: sql-server reporting-services datediff

在SSRS中,我试图返回一个DateValue,它是所选月份/年后的下个月的第一天。一切都与我的公式有关,除非我试着在12月份进行评估。该公式适用于所有其他月份(评估“4”产生的输出为1/1 /(年选+1),但12月每次都返回#Error。

我的公式是:

=IIF(Parameters!Month.Value="12",(DateValue("1" & "/" & Parameters!Year.Value+1)),(DateValue(Parameters!Month.Value+1 & "/" & Parameters!Year.Value)))

3 个答案:

答案 0 :(得分:2)

我会考虑使用DateAddDateSerial

所以表达如下:

=DateAdd(DateInterval.Month
  , 1
  , DateSerial(Parameters!Year.Value, Parameters!Month.Value, 1))

这使用DateSerial构建所选的第一个月,然后使用DateAdd添加另一个月此

我在测试表达式的基本报告上工作得很好:

enter image description here

enter image description here

答案 1 :(得分:0)

我不承认DateValue(),但你不是要包括日期,月份和年份吗?

=IIF(Parameters!Month.Value="12",(DateValue("1/1/" & Parameters!Year.Value+1)),(DateValue(Parameters!Month.Value+1 & "/1/" & Parameters!Year.Value)))

您还可以使用CDate(datestring)将字符串转换为日期。请参阅SSRS ExpressionsType Conversion Functions

答案 2 :(得分:0)

IIf和Switch始终会评估所有路径,因此对于12月的这一部分公式

DateValue(Parameters!Month.Value+1 & "/" & Parameters!Year.Value)

失败,因为Parameters!Month.Value + 1将为13,并且没有第13个月。 为了避免这种情况,您必须将该部分更改为以下内容:

DateValue(IIf(Parameters!Month.Value<12,Parameters!Month.Value+1,12) & "/" & Parameters!Year.Value)

它将永远不会在12月显示,但仍会进行评估。