Функция iif вычисляет оба пути в SSRS или это короткое замыкание? - PullRequest
19 голосов
/ 30 июля 2009

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

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

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

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

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

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

Ответы [ 3 ]

16 голосов
/ 30 июля 2009

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

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

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

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

4 голосов
/ 18 августа 2009

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

0 голосов
/ 11 июня 2015

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

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) 

в текстовом поле с выражением

...