SSRS hide #Error, отображаемый в ячейке
Я делаю вычисления по этим данным, что иногда приводит к #Error. Основная причина - деление на ноль. Я мог бы пропустить необходимую работу, чтобы избежать деления на ноль, но было бы проще маскировать текст #Error и показать пустую ячейку. Можно ли скрыть #Error и просто ничего не показывать?
Изменить
В выражении для текста может отображаться символ #Error:
Fields!Field1.Value / Fields!ValueThatMightBeZero.Value
Я мог бы обойти это с некоторой уродливой проверкой, но было бы проще просто поймать #Error. (Прямая проверка iif
вокруг экспресса не работает, потому что SSRS сначала оценивает как истинные, так и ложные предложения, если он получает деление на ноль в любом предложении, он вернет #Error, даже если это предложение не будет иметь были использованы).
Ответы
Ответ 1
Существует функция IsError, но она не уменьшит код, необходимый для обработки. Если вам не нравится обычная работа iif
, я думаю, вам нужно использовать свой собственный встроенный код в отчете. В этом коде у вас может быть обработчик try catch. Создайте функцию, которую вы можете вызвать с помощью =Code.MyDivider(Fields!Field1.Value , Fields!ValueThatMightBeZero.Value)
Public Function MyDivider(top As Double, bottom As Double) As Double
If top = 0 Then Return 0
If bottom = 0 Then Return 0
Return top / bottom
End Function
Ответ 2
Измените шрифт как цвет фона, если Fields!Value_Denominator.Value=0
, и вы не увидите сообщение об ошибке.
Ответ 3
Это уродливо, но вот способ, который я нашел, чтобы заставить его работать в выражении и без пользовательской функции.
Вы также должны проверить значение знаменателя и заменить ненулевой делитель таким образом, чтобы деление на 0 никогда не происходило (хотя мы бы хотели, чтобы первая половина IIF коротко замыкалась и не попадала туда вообще): Я использую 1.
Конечно, это даст некорректное значение, но затем я держу внешний IIF, чтобы показать все, что захочу, когда знаменатель равен 0 (я показываю 0 в моем примере).
=IIF(Fields!Value_Denominator.Value=0, 0, Fields!Value_Numerator.Value/IIF(Fields!Value_Denominator.Value=0,1,Fields!Value_Denominator.Value))
Ответ 4
Добавьте небольшое значение во второе выражение -
Поля! Field1.Value/(Поля! ValueThatMightBeZero.Value +.00001)
Это вернет 0.
Ответ 5
Это хорошее решение.
Однако я думаю, что это возможно даже для его улучшения. Вместо того чтобы помещать условное форматирование в "Белый", я предлагаю вместо условного выражения Hidden вместо True.
В этом случае при экспорте в excel ячейка не будет содержать ничего, в отличие от случая изменения шрифта forecolor.
Под видимостью → Скрытый = IIF (Fields! Denominator.Value = 0, True, False)
Ответ 6
Используйте TRY & CATCH в пользовательском коде SSRS
Public Function My_Function(ByVal My_Divisor As int) As int
Dim My_Result as integer
TRY
My_Result = 100/My_Divisor
CATCH
My_Result = -1
END TRY
Return My_Result
End Function
Ответ 7
Вы можете использовать IsNumeric, чтобы проверить каждое выражение и отобразить 0 или лучше, но не отображать ничего, поскольку 0 может иметь какое-то значение.
IsNumeric - возвращает логическое значение, указывающее, может ли выражение оцениваться как число.
Например:
=Iif(IsNumeric(Fields!YourValue.Value), Fields!YourValue.Value, Nothing)
или
=Iif(IsNumeric(Fields!YourValue.Value), Fields!YourValue.Value, 0)
Ответ 8
Используйте функцию NULLIF
:
DECLARE @a int
DECLARE @b int
SET @a = 1
SET @b = 0
SELECT @a/@b --this returns an error
SELECT @a/NULLIF(@b,0) -- this returns NULL
Ответ 9
Еще одна альтернатива предложениям заключается в том, чтобы добавить часть формулы, которая могла бы создать ошибку.
Пример: a/b, если b = 0, то уравнение дает ошибку.
{= IIF (b = 0, TRUE, FALSE)}
Ответ 10
Это может работать не во всех случаях, но для меня это помогло.
Я добавил еще один столбец, который ссылался на текстовое поле с ошибкой (ReportItems! XYZ.Value), SSRS показывает #Error как пустое значение, используя этот тип ссылки. Затем я спрятал столбец, содержащий фактическую формулу, и вуаля, решена. Хотя самым хакерским способом.