上一个日期SSRS修复

时间:2015-05-19 03:04:12

标签: sql date reporting-services switch-statement

尝试解决SSRS没有显示某些月份的正确结束日期的问题(即,它显示4月份罚款30日,然后显示3月30日,然后28日为2月,28日为1月等)。

我有一个报告,它有一个“按钮”,可以通过将以下代码解析为“enddate”参数表达式(在dateadd中尝试使用毫秒等等,没有正常工作)来回溯到前几个月的数据。

我正在尝试让以下内容正常工作但有错误“文本框'Textbox70'的ActionInfo.Action.Drillthrough.DrillthroughParameters.Value表达式包含错误:[BC30588]省略的参数无法匹配ParamArray参数。“

=SWITCH(format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="January", DateSerial(Year(DateAdd("m",-1,CDate(Parameters!enddate.Value))), Month(DateAdd("m",-1,CDate(Parameters!enddate.Value))), "31"), format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="March", DateSerial(Year(DateAdd("m",-1,CDate(Parameters!enddate.Value))), Month(DateAdd("m",-1,CDate(Parameters!enddate.Value))), "31"), format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="April", DateSerial(Year(DateAdd("m",-1,CDate(Parameters!enddate.Value))), Month(DateAdd("m",-1,CDate(Parameters!enddate.Value))), "30"), format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="May", DateSerial(Year(DateAdd("m",-1,CDate(Parameters!enddate.Value))), Month(DateAdd("m",-1,CDate(Parameters!enddate.Value))), "31"), format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="June", DateSerial(Year(DateAdd("m",-1,CDate(Parameters!enddate.Value))), Month(DateAdd("m",-1,CDate(Parameters!enddate.Value))), "30"), format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="July", DateSerial(Year(DateAdd("m",-1,CDate(Parameters!enddate.Value))), Month(DateAdd("m",-1,CDate(Parameters!enddate.Value))), "31"), format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="August", DateSerial(Year(DateAdd("m",-1,CDate(Parameters!enddate.Value))), Month(DateAdd("m",-1,CDate(Parameters!enddate.Value))), "31"), format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="September", DateSerial(Year(DateAdd("m",-1,CDate(Parameters!enddate.Value))), Month(DateAdd("m",-1,CDate(Parameters!enddate.Value))), "30"), format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="October", DateSerial(Year(DateAdd("m",-1,CDate(Parameters!enddate.Value))), Month(DateAdd("m",-1,CDate(Parameters!enddate.Value))), "31"), format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="November", DateSerial(Year(DateAdd("m",-1,CDate(Parameters!enddate.Value))), Month(DateAdd("m",-1,CDate(Parameters!enddate.Value))), "30"), format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="December", DateSerial(Year(DateAdd("m",-1,CDate(Parameters!enddate.Value))), Month(DateAdd("m",-1,CDate(Parameters!enddate.Value))), "31"), )

非常感谢任何帮助。

干杯:)

1 个答案:

答案 0 :(得分:0)

首先,语法问题是" 12月"选项以逗号结尾,没有其他参数,因此请删除逗号,该错误应该消失。也就是说,结尾,)应该只是)

获得二月份的结果很奇怪,因为在你的公式中没有2月选项,也没有28天的任何月份,所以我不知道你为什么在28天内获得结果。

另一个问题是VBA不是SQL - 你应该使用VBA语法,所以这个:

format(DateAdd("m",-1,CDate(Parameters!enddate.Value)),"MMMM")="January"

成为这个:

MonthName(Month(DateAdd(DateInterval.Month, -1, Parameters!enddate.Value))) = "January"

最后,你的公式不必要地复杂 - 你是在上个月的结束日期之后,所以你可以像这样计算它:

=DateAdd(DateInterval.Day, 0-Day(Parameters!enddate.Value), Parameters!enddate.Value)