У меня есть отчет, выводящий в файл Excel, причем некоторые поля в базе данных пусты.SSRS Iif всегда верно, когда ложная часть содержит выражение
Я пытаюсь фильтровать эти нулевые значения, используя следующее выражение IIF в клетке:
=Iif(
IsNothing(Fields!START_DATETIME.Value),
0,
Fields!START_DATETIME.Value
)
Это не работает, я получаю «#VALUE
» в клетках, где данные нулевой, и значение времени ячейки, где были данные.
Если я использую такое же выражение без выражения в качестве третьего параметра:
=Iif(
IsNothing(Fields!START_DATETIME.Value),
0,
1
)
Я получаю 1
где S Eсть дата в таблице и 0
с, где нет ничего.
Я сожалею, если это дубликат, я не мог найти ничего, что работал для меня ...
Edit: Я использую VisualStudio Professional 2013
Update
Что у меня есть для каждой записи в базе данных: datetime для время авторизации, другое для время начала и другое для остановлено время. Всегда есть запись для время авторизации, но не всегда для начало и остановлено.
Я расколоть дату и время из различных DateTimes в столбцы так:
- Авторизованный Дата
- Авторизованный время
- Время начала
- Время остановки
Идея состоит в том, что если время начала и остановки отсутствует, просто используйте авторизованное время
В столбце «Время начала» помещаются следующие выражения. Извините, мне не хватает репутации для отправки изображений или более двух ссылок. Я поставил вывод программы в этом альбоме:
Выполнение:
=Iif(Fields!START_DATETIME.Value is Nothing,
DateAdd(DateInterval.Day,693594,TimeValue(Fields!AUTH_DATETIME.Value)),
DateAdd(DateInterval.Day,693594,TimeValue(Fields!AUTH_DATETIME.Value))
)
Выдает уполномочил время, так что работает отлично.
Однако делать:
=Iif(Fields!START_DATETIME.Value is Nothing,
DateAdd(DateInterval.Day,693594,TimeValue(Fields!AUTH_DATETIME.Value)),
DateAdd(DateInterval.Day,693594,TimeValue(Fields!START_DATETIME.Value))
)
Выходы времяначало, где есть запись, и #VALUE!(нуль или некоторые такие), когда нет ничего.
И делает:
=Iif(Fields!START_DATETIME.Value is Nothing,
DateAdd(DateInterval.Day,693594,TimeValue(Fields!START_DATETIME.Value)),
DateAdd(DateInterval.Day,693594,TimeValue(Fields!AUTH_DATETIME.Value))
)
Выдает уполномочил время где есть запись в время начала и #value! когда нет ничего.
Я не могу понять это. Я понимаю (1) и (3), но мне нужно, чтобы (2) отображалось правильное время начала , хотя есть одно, и авторизованного времени, когда его нет.
Update 2
Оказывается, что IIF() оценивает каждое условие, даже если он не выбран, и любая ошибка, обнаруженная передается независимо. См комментарии к Why isn't my iif statement evaluating true when the condition is correct?
Чтобы исправить это я сделал:
=DateAdd(
DateInterval.Day,
693594,
TimeValue(
Iif(
Fields!START_DATETIME.Value is Nothing,
Fields!AUTH_DATETIME.Value,
Fields!START_DATETIME.Value
)
)
)
Это, кажется, работает для меня, и должно быть здравый смысл способ сделать это в первую очередь ...
Еще раз спасибо за помощь.
Почему вы хотите «0» в столбце с DATETIME? Что это будет представлять? Вам не нужно ни NULL, ни пустая строка, ни какое-то время по умолчанию? – Jeroen
Если вы хотите отфильтровать их, как в «не показывать их», не можете ли вы сделать это в своем запросе? –
@Jeroen Все, кроме #VALUE! было бы неплохо, это было просто попробовать, я бы, вероятно, оставил его пустым. – user111395