Есть несколько способов сделать это. Вы не указали, хотите ли вы, чтобы варианты, предлагаемые пользователю в приглашении, были динамическими. Динамические запросы обычно обеспечивают лучшее качество обслуживания клиентов и требуют меньшего количества обслуживания. Я объясню, как сделать динамический и, если вы хотите статический, просто введите значения в приглашение, а не исходить из запроса. Остальные инструкции применимы.
Динамический (предпочтительно)
- Создать новый запрос
- Назовите запрос тем, что указывает на его функцию, например, 'Квартальная подсказка'
- В запросе создайте новый элемент данных, который будет содержать то, что вы хотите, чтобы подсказка отображалась пользователю.
Например, если вы хотите, чтобы в подсказке отображалось «2018 Q1», вы можете создать эту строку из таблицы Date следующим образом:
[Year] + ' Q' + [Quarter]
Если вы сгенерируете табличные данные для этого запроса, вы получите список всех комбинаций год / квартал в вашей таблице дат:
2018 Q1
2018 Q2
2018 Q3
2018 Q4
2017 Q1
...
- Ограничить список только диапазоном кварталов, которые вы хотите запросить.
Например, если вы хотите показывать только кварталы в текущем году, добавьте этот фильтр:
[Year] = year(current_date)
После добавления этого фильтра вы увидите только первые четыре строки указанного выше результата. Вашим пользователям будет предоставлено четыре варианта выбора.
- Установите для свойства запроса Query значение нового запроса, а для свойств Use Value и Display Value - для элемента данных, который вы определили в запросе приглашения
Чтобы применить выбор подсказки к вашему отчету, вы просто добавляете фильтр к соответствующему запросу отчета, который принимает входные данные пользователя и сравнивает его с данными:
[Year] + ' Q' + [Quarter] = ?quarterPrompt?
Теперь такой способ может привести к неэффективной работе. Чтобы применить фильтр, каждая строка должна быть проверена, преобразована в формат строки и сравнена. Если вам нужна лучшая производительность, лучше сделать фильтр следующим образом:
[Year] = substring(?quarterPrompt?,1,4) AND [Quarter] = substring(?quarterPrompt?,7,1)
Поскольку мы преобразовываем только приглашение, которое содержит только одно значение, а не много, производительность оптимизируется.
Добавление
Моя интуиция подсказывала мне, что может быть даже лучший способ. После осмотра я понял, что есть еще более эффективный способ справиться с этим, исключив все разборы строк. Вот части процедуры, которая будет изменена:
- Вам необходимо добавить новый элемент данных в качестве значения использования, переданного в запрос отчета.
Создайте второй элемент данных в запросе приглашения со следующим выражением:
[Year] * 100 + [Quarter]
Для каждой комбинации года и квартала теперь у вас будет число, кодирующее комбинацию. Например, для года 2018 и квартала 2 новый элемент данных вернет 201802.
- Изменить свойства подсказки. Укажите значение использования для вновь созданного элемента данных.
- Измените фильтр в запросе отчета, чтобы использовать новое числовое значение
Это будет выглядеть примерно так:
floor(?quarterPrompt?/100) = [Year]
AND mod(?quarterPrompt?,100) = [Quarter]
Эта только числовая операция может иметь лучшую производительность, чем синтаксический анализ на основе подстрок в исходном ответе, но имеет тот же эффект.