2016-12-14 2 views
1

Проделайте эту проблему в SSRS и я надеюсь на некоторую помощь.# Ужасно даже после использования IIF, чтобы избежать деления на ноль в выражении

Просто хотите вернуть 0 или 0,00 в текстовом поле «Всего», когда в текстовом поле 167 или 168. У меня есть ISNULL в наборе данных для обоих полей. Текстовое поле форматируется в отчете «Валюта в отчете». Я получаю результаты, если 167 и 168 оба не равны 0, но #Error, если они есть. Есть предположения?

=IIF((ReportItems!Textbox167.Value > 0) AND (ReportItems!Textbox168.Value > 0) 
    ,CDEC(ReportItems!Textbox173.Value/ReportItems!Textbox167.Value) - 
    CDEC(ReportItems!Textbox176.Value/ReportItems!Textbox168.Value), 0) 

Спасибо!

+0

Возможно ли они имеют NULL значения? – Anand

+0

Используете ли вы номер Float? – FLICKER

ответ

1

Проблема в том, что IIF не похож на тернарный оператор в C# в качестве примера, где условные выражения оцениваются только в зависимости от состояния булевого выражения.

Другими словами, это:

=IIF(a, b, c) 

будет первым оценить a, b, иc перед IIF оценивается. Урон уже сделан к моменту IIF, чтобы посмотреть на значения.

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

2

IIF оценивает обе возможности даже в том случае, если это не обязательно - в результате возникает ваша ошибка.

Теория состоит в том, что вы хотите, чтобы выражение нормально оценивалось, если знаменатель не равен нулю, но используйте 0/1, если знаменатель равен нулю.

Ваше выражение будет выглядеть следующим образом:

=IIF(ReportItems!Textbox167.Value = 0, 0, CDEC(ReportItems!Textbox173.Value)) 
/
IIF(ReportItems!Textbox167.Value = 0, 1, CDEC(ReportItems!Textbox167.Value)) 
- 
IIF(ReportItems!Textbox168.Value = 0, 0, CDEC(ReportItems!Textbox176.Value)) 
/
IIF(ReportItems!Textbox168.Value = 0, 1, CDEC(ReportItems!Textbox168.Value)) 
+0

Perfect ... Решил мою проблему. Благодаря!! – Kevin

Смежные вопросы