Разделить на нулевой/нулевой обходной путь в отчете SSRS 2008
У меня есть отчет с полем, значение которого было выражением:
Fields!TotalPrice.Value/Fields!TotalSlots.Value
Хотя иногда TotalSlots был пустым, и, таким образом, я получал деление на нулевую ошибку времени выполнения. Поэтому я изменил это выражение на следующее:
=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown")
но я все равно получаю деление на нулевую ошибку. Как мне обойти эту проблему с делителем нуля.
Ответы
Ответ 1
VB IIF оценивает все аргументы, поэтому он выдает ошибку, если какой-либо аргумент вызывает ошибку:
Ваша формула может быть записана как:
=IIF(Fields!TotalSlots.Value > 0,
Fields!TotalPrice.Value /
IIF(Fields!TotalSlots.Value > 0,
Fields!TotalSlots.Value,
1 ),
"unknown")
Тогда даже если TotalSlots равно нулю, формула все равно не столкнется с проблемой деления.
Ответ 2
Ответ Jamie F верен. В качестве подсказки вы можете добавить функцию в свой код отчета, чтобы сделать разделение немного проще реализовать в нескольких ячейках, например.
Public Function Divider (ByVal Dividend As Double, ByVal Divisor As Double)
If IsNothing(Divisor) Or Divisor = 0
Return 0
Else
Return Dividend/Divisor
End If
End Function
Затем вы можете вызвать это в ячейке следующим образом:
=Code.Divider(Fields!FieldA.Value, Fields!FieldB.Value)
Ответ 3
Я не думаю, что ваша ошибка при вычислении. Прежде всего, SSRS автоматически справляется с этой ситуацией. См. Мою третью колонку. И четвертое показывает ваше выражение:
![enter image description here]()
Ваша проблема, вероятно, в другом месте
Ответ 4
Это происходит только тогда, когда деление является одним из результатов IIF, а не если вы просто пишете формулу для деления одной на другую, например.
=IIF(thing=1,10/0,0)
Прежде чем он оценил предмет, он уже попытался вычислить оба результата, вызвав ошибку. Вы не можете использовать IIF таким образом, чтобы защитить от нуля, вам нужно поместить IIF в нижнюю строку деления, например.
=IIF(thing=1, 10/IIF(divisor=0,-99999999999,divisor),0)
Это неудовлетворительно, так как в результате мы вводим в игру небольшое число, отличное от нуля, но это может быть нормально, если вы просто хотите получить ошибку.
Технически, #error - правильный ответ.