# Ужасно даже после использования IIF, чтобы избежать деления на нуль в выражении
Иди в эту проблему в SSRS, и я надеюсь на некоторую помощь.
Просто хотите вернуть 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)
Благодаря!
- Как получить данные из собственной таблицы ссылок в sql
- Применение различного форматирования к различным столбцам в группе столбцов
- Форматирование цвета SSRS на основе параметра
- Нарушение отчета SSRS в зависимости от параметра Multi Value
- Отобразить имя столбца SQL как значение строки в SSRS-матрице
- Отладка отчета не работает, показывая сообщение об ошибке «Убедитесь, что предоставлены достаточные разрешения» Как решить эту проблему?
- Запрос SQL для исключения определенных дат для ssrs
- Как создать гистограмму на SSRS
- Как найти недопустимый символ Char в таблице SQL
- Разрешить множественные значения в SSRS
- Какие учетные данные необходимо передавать при доступе к отчету SSRS через URL-адрес?
- SSRS Subreport выполняется несколько раз, я хочу, чтобы он выполнялся один раз
- Обновление каскадных параметров в отчете SSRS для выбора даты
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))
Проблема здесь в том, что IIF не похож на тернарный оператор в C # в качестве примера, где условные выражения оцениваются только в зависимости от состояния булевского выражения.
Другими словами, это:
=IIF(a, b, c)
Сначала оценим a
, b
и c
, пока не будет оценен IIF
. Урон уже сделан к тому времени, когда IIF
получает возможность посмотреть на значения.
Вместо этого вы должны испечь дивиденд в выражении IIF
чтобы убедиться, что вы никогда не получите 0
в выражении деления вообще, вместо того, чтобы избегать использования выражения.