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

Разделить на нулевой/нулевой обходной путь в отчете SSRS 2008

У меня есть отчет с полем, значение которого было выражением:

Fields!TotalPrice.Value/Fields!TotalSlots.Value

Хотя иногда TotalSlots был пустым, и, таким образом, я получал деление на нулевую ошибку времени выполнения. Поэтому я изменил это выражение на следующее:

=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown")

но я все равно получаю деление на нулевую ошибку. Как мне обойти эту проблему с делителем нуля.

4b9b3361

Ответ 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 - правильный ответ.