Условие IIF в SSRS и обработка нулей

У меня есть довольно сложная формула в SSRS, и по какой-то причине она показывает ошибку, когда встречает нулевое значение, хотя я обрабатываю нули в своей формуле. Кто-нибудь может посоветовать, как исправить эту проблему?

= iif (datepart ("h", Now ()) = 6, iif (SUM (Fields! PYRevenue.Value) = 0, 0, ((SUM (Fields! Revenue.Value) - SUM (Fields! PYRevenue.Value) ) / SUM (Fields! PYRevenue.Value))), iif (SUM (Fields! PYRevenue.Value) = 0, 0, (SUM (Fields! Revenue.Value) / SUM (Fields! PYRevenue.Value))))


person Redraidas    schedule 11.12.2018    source источник
comment
Какую ошибку вы получаете и какие значения используются, оба ли PYRevenue и Revenue равны 0? Я использую этот запрос и не получаю ошибок. Declare @YourTable Table ([ID] int, PYRevenue int, Revenue int ) Insert Into @YourTable Values (1,6,7) ,(2,3,6) ,(3,0,0) SELECT * FROM @YourTable   -  person JonTout    schedule 11.12.2018


Ответы (2)


Извините, я неправильно прочитал вашу формулу, пока не сделал правильный отступ. Несмотря на то, что у вас есть проверка на PYRevenue = 0, вам также необходимо включить еще один IIF () после обоих вхождений «/», например:

iif (SUM (Fields! PYRevenue.Value) = 0, 0, ((SUM (Fields! Revenue.Value) - SUM (Fields! PYRevenue.Value)) / IIF (SUM (Fields! PYRevenue.Value) = 0, 1, СУММ (Поля! PYRevenue.Value)))

SSRS оценивает все выражения, поэтому вам нужно обрабатывать значение 0, даже если ваша родительская логика предотвращает попадание в этот блок.

person Chris Hackett    schedule 11.12.2018

Приносим извинения за поспешный ответ ... Делаю это на моем телефоне ...

Даже если ваше последнее выражение не будет использоваться, если SUM (PYRevenue) равно нулю, оно все равно будет вычислено и даст ошибку деления на ноль. 2 способа решения. Я лично использую SWITCH вместо IIF для всего непростого.

В качестве альтернативы вам нужно проверить SUM (PYRevenue) на обеих сторонах вашего подразделения. Псевдокод будет =IIF(SUM(PYRevenue)=0,0,SUM(Revenue)) / IIF(SUM(PYRevenue)=0, 1, SUM(PYRevenue)). Итак, если сумма PY равна нулю, тогда сделайте 0/1, иначе сделайте доход / доход

person Alan Schofield    schedule 11.12.2018
comment
После того, как я опубликовал, я увидел обновленный ответ Криса Хакетта, в основном такой же, за исключением того, что вам действительно не нужна внешняя IIF, если вы правильно получили обе стороны делителя. - person Alan Schofield; 11.12.2018