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

Является ли iif-функция вычислять оба пути в SSRS или она закорочена?

Я пытаюсь оценить цену за кило ($/Kg), основанную на продажах продукта. Это отлично работает, если продукт был продан в течение указанного периода. Однако, если продукт не продается, Kg (знаменатель) заканчивается 0 (ноль) и возникает ошибка. - Деление на нулевую ошибку.

Я пробовал это

=iif(KgSold=0,0,Revenue/KgSold)

Похоже, что функция iif вычисляет как истинные, так и ложные результаты. Как мне обойти это.

Должен ли я использовать функцию switch вместо этого?

=switch(KgSold=0,0
        KgSold<>0,Revenue/KgSold)
4b9b3361

Ответ 1

Вы правы, это не короткое замыкание. Это отстой.

Вам нужно будет сделать что-то вроде этого:

= Iif(KgSold = 0, 0, Revenue) / Iif(KgSold = 0, 1, KgSold )

Функция переключателя также должна работать.

Ответ 2

Это происходит потому, что в VBScript все условия внутри IIF будут оцениваться сначала перед тем, как произойдет какая-либо функциональность.

Ответ 3

Добавьте в свой код следующее:

Public Function SafeDiv(byval num as double, byval den as double) as object

    If den = nothing then return nothing
    If den = 0 then return nothing

    return num / den

End Function

Затем вызовите

=Code.SafeDiv(Revenue,KgSold) 

в текстовом поле epression