Выражение SSRS дает ошибку с условием iif

У меня есть это выражение для текстового поля в отчете SSRS

=IIF((Fields!Spot.Value = True), "SPOT", 
     MonthName(Fields!Codes_MonthFromIDfk.Value,true).ToUpper().ToString() & "-"
         & MonthName(Fields!Codes_MonthToIDfk.Value,true).ToUpper().ToString())

Столбец «Пятно» в базе данных является столбцом типа данных. У него либо 0, либо 1. Когда у меня есть 1 / True, он должен печатать SPOT или месяцы, такие как JAN-FEB. Я получаю эту ошибку, когда значение столбца Spot равно 1.

«Выражение значения для текстового запуска‘ Textbox32.Paragraphs [0] .TextRuns [0] ’содержит ошибку: аргумент« Месяц »не является допустимым значением».

Когда я удаляю ложную часть и набираю «ABCD», я получаю правильный вывод для текстового поля. Либо SPOT (истина), либо ABCD (ложь). В настоящее время, когда он НЕ 1, он показывает JAN-FEB (что является желаемым результатом). Если 1, он отображается как #Error. Что не так в этом выражении? Если вам нужна дополнительная информация, спрашивайте. Спасибо.

РЕДАКТИРОВАТЬ:

Public Function FormatMonths(ByVal spot As Boolean, ByVal from As Integer, ByVal to As        Integer) As String
    If spot Then
    Return "SPOT"
Else
    Return  MonthName(from,true).ToUpper().ToString() & "-" & MonthName(to,true).ToUpper().ToString()
End If
End Function

Выражение :

=Code.FormatMonths(Fields!Spot.Value, 1,2)

person RookieAppler    schedule 11.02.2014    source источник


Ответы (1)


Оператор IIF всегда оценивает оба выражения, прежде чем решить, какое из них использовать. Одно из возможных решений вашей проблемы - создать настраиваемую функцию, которая делает то, что вам нужно, и использовать ее в текстовом поле:

=Code.FormatMonths(Fields!Spot.Value, Fields!Codes_MonthFromIDfk.Value, Fields!Codes_MonthToIDfk.Value)

Чтобы создать собственную функцию, перейдите в Отчеты> Свойства отчета> Код и введите определение ниже:

Public Function FormatMonths(ByVal spot As Boolean, ByVal fromMonth As Integer, ByVal toMonth As Integer) As String
    If spot Then
        Return "SPOT"
    Else
        Return  MonthName(fromMonth,true).ToUpper().ToString() & "-" & MonthName(toMonth,true).ToUpper().ToString()
    End If
End Function
person rla4    schedule 11.02.2014
comment
Спасибо. Я получаю следующие ошибки: [BC30183] Ключевое слово недействительно в качестве идентификатора. [rsCompilerErrorInExpression] Выражение значения для текстового запуска «Textbox32.Paragraphs [0] .TextRuns [0]» содержит ошибку: [BC30057] Слишком много аргументов для «Public Function FormatMonths (spot As Boolean, from As Integer) As String». - person RookieAppler; 12.02.2014
comment
У функции FormatMonths, которую вы только что написали, всего 2 параметра, это правильно? Разве вы не должны передать в эту функцию все свои 3 поля? Убедитесь, что вы передаете 3 аргумента (как в моем примере), и дайте мне знать, если это все еще не работает. - person rla4; 12.02.2014
comment
Нет, я взял тот же код, который вы здесь указали, и вставил его в свой код. Изменены типы данных. Пожалуйста, проверьте отредактированный вопрос, который я разместил. Я тестировал, давая значения 1 и 2 (январь и февраль) на данный момент - person RookieAppler; 12.02.2014
comment
Проблема с названием параметров. Вы не можете использовать зарезервированные слова (в нашем случае) в качестве имен переменных. Отредактировал свой ответ, посмотрим, поможет ли. - person rla4; 12.02.2014