我有一份SSRS报告,其中包含2个可选的文本参数,如下所示:
我正在尝试格式化一个标题文本框,显示如下:
如果参数为Null,那么我默认获得月份名称和年份(因为报告将数据默认为上个月)
如果设置了参数,那么我想将它们格式化为dd MMMM YYYY(因此20141103
将格式化为03 November 2014
以下是我在文本字段中尝试用于表达式的代码:
= IIF(IsNothing(Parameters!StartDate.Value),
" for " & MonthName(Month(DateAdd("m",-1,Today))) & " " & Year(DateAdd("m",-1,Today)),
"From " &
RIGHT(Parameters!StartDate.Value,2) + " " +
MonthName(Month(
LEFT(Parameters!EndDate.Value,4) + "-" +
MID(Parameters!EndDate.Value,5,2) + "-" +
RIGHT(Parameters!EndDate.Value,2)
)) + " "
+ LEFT(Parameters!StartDate.Value,4) +
" to " +
RIGHT(Parameters!EndDate.Value,2) + " "
+ MonthName(Month(
LEFT(Parameters!EndDate.Value,4) + "-" +
MID(Parameters!EndDate.Value,5,2) + "-" +
RIGHT(Parameters!EndDate.Value,2)
)) + " " +
LEFT(Parameters!EndDate.Value,4))
所以你可以看到,如果参数是Null(允许报告默认运行调度时的最后几个月数据)那么函数应该只显示类似December 2014
但是如果输入为YYYMMDD然后我需要格式化它们。
我收到以下错误(在Visual Studio 2013中的SSRS中):
[rsRuntimeErrorInExpression] The Value expression
for the textrun ‘Textbox15.Paragraphs[0].TextRuns[0]’
contains an error: Conversion from string "--" to type 'Date' is not valid.
我也尝试过使用CDate
LEFT(Parameters!EndDate.Value,4) + "-" +
MID(Parameters!EndDate.Value,5,2) + "-" +
RIGHT(Parameters!EndDate.Value,2)
(例如,这些应该以{{1}}出现)但是再一次,没有运气
那么我在哪里出错了,如果输入这些日期我该如何格式化呢?
答案 0 :(得分:1)
我会使用这样的表达式:
=Format(CDate(Left(20150131, 4) + "-" + Mid(20150131, 5, 2) + "-" + Right(20150131, 2)), "dd MMMM yyyy")
我认为最好使用整数或日期参数而不是文本参数。因此,您可以通过执行以下操作将日期文本参数转换为日期文本参数在报表中显示之前的日期:
select cast('20150131' as date)