#reporting-services
#службы отчетов
Вопрос:
У меня есть отчет, который требует от пользователя ввести начальную дату, а также разрешить им выбирать из календаря. Мне было интересно, возможно ли ввести дату в виде строки. Прямо сейчас у меня есть текстовое поле с календарем, и я хотел бы, чтобы пользователь вводил дату [06302015] вместо [06/30/2015]
можем ли мы опустить тире и сохранить формат отчета по дате?
Комментарии:
1. Если вы хотите, чтобы конечный пользователь вводил текстовые значения.. ваш запрос должен будет принять значение этого параметра и изменить его на формат даты, чтобы параметр работал правильно.. Вы наверняка будете сравнивать / фильтровать столбец даты .. и потребуется отслеживание ошибок, поскольку пользователи могут вводить что угодно … лучше всего придерживаться календаря… вы можете просто ввести дату с косой чертой, и она будет работать, и вам не нужно использовать средство выбора даты.
2. Имейте в виду, что в виде строки ‘06302015’ > ‘05302018’ (не является намерением). Но в качестве даты ‘2018-05-30’ > ‘2015-05-03’…
Ответ №1:
Тип параметра можно изменить в свойствах параметра, как показано ниже. При этом календарь будет удален, и останется только текстовое поле.
Комментарии:
1. итак, как это поможет OP фильтровать столбец даты и времени? Конечно.. это позволяет конечному пользователю вводить текст .. но фильтрация таблицы не будет работать как есть!
2. Я хотел бы, чтобы также отображался календарь, возможно ли также иметь средство выбора даты
3. Следует упомянуть, что если пользователь хочет указать дату в виде текста, то текстовую дату необходимо будет преобразовать в дату в коде. Возможно, было бы лучше оставить параметр current date и РАЗРЕШИТЬ значения NULL, затем добавить другой параметр для текстовой даты и проверять, имеет ли параметр Date значение NULL (
DECLARE @DATE_internal as DATE = ISNULL(@DATE, CAST(RIGHT(@TEXT_DATE, 4) '-' LEFT(@TEXT_DATE, 2) '-' SUBSTRING(@TEXT_DATE, 3, 2) AS DATE) )
Ответ №2:
- Измените тип параметра на «Текст».
- Добавьте второй «скрытый» параметр (как тип данных даты / времени), который принимает значение LAST_DATE_EDITED в качестве входных данных в значение по умолчанию для 2-го параметра, используя выражение:
=DateValue(Mid(Parameters!LAST_DATE_EDITED.Value,1,2) amp; "/" amp; Mid(Parameters!LAST_DATE_EDITED.Value,3,2) amp; "/" amp; Mid(Parameters!LAST_DATE_EDITED.Value,5,4))
(Не тестировалось, но оно должно быть близко) - Затем используйте второй параметр в своем отчете вместо LAST_DATE_EDITED.
Если пользователь вводит неправильно отформатированную строку чисел, использует текст и т.д., SSRS выдаст исключение.
ИМО, это не самое элегантное решение, и оно требует пользовательского ввода, который подвержен ошибкам. Не то, что я бы реализовал (я бы попросил пользователей использовать встроенный инструмент выбора даты и времени и обучил их использовать допустимые разделители, такие как точки, косые черты или тире, или просто использовать элемент управления календарем).