在我的SSRS报告中,报告可以使用2个Null参数运行,或者用户可以使用YYYYMMDD格式输入start amd结束日期。
如果报告使用Null参数运行,我有一个文本框,如果数据集只显示月份和年份,如果用户放入日期参数,则文本框应显示格式为DD的开始和结束日期MMMM YYYY如下
From 02 October 2014 to 03 November 2014
但是尽管尝试了几个小时,但我没有成功地在表达式中使用IIF
函数来使文本框起作用。
以下是基本代码:
= IIF(IsNothing(Parameters!StartDate.Value),
" for " & MonthName(Month(DateAdd("m",-1,Today))) & " " & Year(DateAdd("m",-1,Today)),
"From " &
RIGHT(Parameters!StartDate.Value,2) + " " +
MonthName(CInt(Mid(Parameters!StartDate.Value,5,2))) & " " &
LEFT(Parameters!StartDate.Value,4) &
" to " &
Right(Parameters!EndDate.Value, 2) + " " &
MonthName(CInt(Mid(Parameters!EndDate.Value,5,2))) & " " &
Left(Parameters!EndDate.Value, 4)
)
以下是自己的作品:
"From " & Right(Parameters!StartDate.Value, 2) + "-" +
MonthName(CInt(Mid(Parameters!StartDate.Value,5,2))) & "-" &
Left(Parameters!StartDate.Value, 4)
&
" to " &
Right(Parameters!EndDate.Value, 2) + "-" &
MonthName(CInt(Mid(Parameters!EndDate.Value,5,2))) & "-" &
Left(Parameters!EndDate.Value, 4)
并且这可以自己工作(对于缺少参数或Null的情况):
=" for " & MonthName(Month(DateAdd("m",-1,Today))) & " " & Year(DateAdd("m",-1,Today))
所以我知道两个IIF选项的逻辑和代码没有问题。
当使用Null参数运行报表时,它应显示for October 2014
,当它使用参数(例如 20141002 和 20141103 )运行时,它应显示{ {1}}
更新:
我似乎记得VB6中from 02 October 2014 to 03 November 2014
函数在返回评估结果之前评估所有表达式。这意味着如果IIF
Null ,那么即使将使用True部分,错误部分也会引发错误...
我应该如何编写IIF功能才能正常工作?
如何使用Parameters!EndDate.Value
答案 0 :(得分:1)
是的,IIF在渲染之前会对两边进行评估,并且由于参数可以为null,因此eval会失败。我认为这很愚蠢,但是......
以下是编写大约100行代码以使IIF工作的解决方法。
SSRS允许自定义VB(仅VB,而不是C#)代码。
在报告属性中,在自定义代码块中输入此
Public Shared Function DateString(startDate As String, endDate As String) As String
Dim s As New DateTime()
Dim e As New DateTime()
Dim now As DateTime = DateTime.Now
If String.IsNullOrEmpty(startDate) OrElse String.IsNullOrEmpty(endDate) Then
Return " for " & now.ToString("MMMM yyyy")
End If
s = DateTime.ParseExact(startDate, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture)
e = DateTime.ParseExact(endDate, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture)
Return String.Format("From {0} to {1}", s.ToString("MMMM yyyy"), e.ToString("MMMM yyyy"))
End Function
在字段表达式中输入此
= Code.DateString(Parameters!StartDate.Value, Parameters!EndDate.Value)
答案 1 :(得分:0)
尝试:
FORMAT(CDate(Max(IIf(((CSTR(Fields!Planned_End_Date.Value)="2050-01-01 00:00:00.000")
或:(CSTR(Fields!Planned_End_Date.Value)="")),"1900-01-01",Fields!Planned_End_Date.Value))),"MMM-dd-yyyy"))