Почему мой оператор iif не оценивает истинность, когда условие верно?

Это мое заявление:

iif(sum(Fields!myfield1.Value) = 0, 0, sum(Fields!myField2.Value)/sum(Fields!myField1.Value))

Какие-либо предложения?


person badpanda    schedule 12.05.2010    source источник
comment
куда вы помещаете это заявление IIF?   -  person Raj More    schedule 12.05.2010
comment
@Raj Подробнее: скорее всего, текстовое поле SSRS или ячейка таблицы. SSRS использует VBA в качестве языка программирования.   -  person OMG Ponies    schedule 12.05.2010
comment
@OMB Ponies: Извиняюсь за неточность. Я хотел выяснить, использовалось ли это в строке SubTotal или в строке Detail.   -  person Raj More    schedule 12.05.2010
comment
Он находится в строке промежуточных итогов. Я нашел ОЧЕНЬ неэлегантный обходной путь, но лучшее решение все равно будет оценено.   -  person badpanda    schedule 13.05.2010
comment
VBA IIf оценивает оба своих условия независимо от того, какое из них он возвращает, поэтому в вашем примере он оценивает как 0, так и деление на ноль. Я не знаю SSRS, но это может иметь значение.   -  person jtolle    schedule 13.05.2010


Ответы (1)


Скорее всего, он принимает значение True. Как упоминалось в других комментариях, вы все равно получите сообщение об ошибке, потому что Iif() оценивает все выражения параметров независимо от результата теста.

Ошибки можно избежать, добавив еще один Iif() в делитель.

iif(
    sum(Fields!myfield1.Value) = 0,
    0,
    sum(Fields!myField2.Value) / iif(
                                     sum(Fields!myfield1.Value) = 0,
                                     1,
                                     sum(Fields!myField1.Value)
                                 )
)

Теперь вы получите ноль, если myfield1 равен нулю и ошибка не возникает.

(Возможно, вам следует показать "Н/Д" или просто пустую строку, если делитель равен нулю.)

person JC Ford    schedule 14.05.2010