Подтвердить что ты не робот

SSRS hide #Error, отображаемый в ячейке

Я делаю вычисления по этим данным, что иногда приводит к #Error. Основная причина - деление на ноль. Я мог бы пропустить необходимую работу, чтобы избежать деления на ноль, но было бы проще маскировать текст #Error и показать пустую ячейку. Можно ли скрыть #Error и просто ничего не показывать?

Изменить

В выражении для текста может отображаться символ #Error:

Fields!Field1.Value / Fields!ValueThatMightBeZero.Value

Я мог бы обойти это с некоторой уродливой проверкой, но было бы проще просто поймать #Error. (Прямая проверка iif вокруг экспресса не работает, потому что SSRS сначала оценивает как истинные, так и ложные предложения, если он получает деление на ноль в любом предложении, он вернет #Error, даже если это предложение не будет иметь были использованы).

4b9b3361

Ответ 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 как пустое значение, используя этот тип ссылки. Затем я спрятал столбец, содержащий фактическую формулу, и вуаля, решена. Хотя самым хакерским способом.