0

В моем отчете SSRS отчет может работать с 2 параметрами Null или пользователи могут вводить даты начала и окончания даты в формате YYYYMMDD.IIF в SSRS Отчет не работает

Если отчет работает с параметрами 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.

При выполнении отчета с нулевыми параметрами он должен показать for October 2014 и когда он запускается с параметрами (например, как и) он должен показать from 02 October 2014 to 03 November 2014

Update: Кажется, я помню из VB6, что функция IIF оценивает все выражения перед возвратом оцененного результата. Что это означает, что если Parameters!EndDate.Value является Null, то выдается ошибка ложной части, даже если Истинная часть будет использоваться ...

Как я должен написать, что функция IIF работать правильно?

Как это может быть написано с использованием Switch

ответ

1

Да IIF делает Eval обе стороны перед ней оказывается и так, что параметр может быть обнулить 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) 
+0

Это великолепно, но пришлось изменить его на 'Dim now As DateTime = DateTime.Now.AddMonths (-1)', чтобы получить имя предыдущего месяца ... Большое спасибо за вашу помощь - я попробовал вложенное IIF с внутренним, возвращающее true или false, но все равно не может заставить его работать, поэтому ваше решение очень полезно –

0

Try:

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"))

Смежные вопросы