SSRS: кэширование общего набора данных Oracle с параметром даты

#reporting-services #ssrs-2008-r2

#службы отчетов #ssrs-2008-r2

Вопрос:

  • Я использую SSRS (2008R2) для создания большого отчета по базе данных Oracle.

  • Из-за размера отчета я хотел кэшировать общий набор данных на ночь.

  • Набор данных имеет один параметр, который по умолчанию должен иметь сегодняшнюю
    дату, но может быть изменен в отчете (хотя это приведет к запуску
    другого кэша).

Я боролся с этим в течение 3 дней и хотел задокументировать, как я заставил его работать, а также получить отзывы о моем подходе.

Ответ №1:

1. Oracle Datasource:

  • Я обнаружил, что передача параметров в набор данных хорошо работает только для меня, используя собственные драйверы Oracle, а не драйверы OLE DB.

Настройки источника данных

2. Общий набор данных:

  • Я так и не смог заставить SSRS передавать параметр даты в Oracle. Поэтому в моем запросе Oracle я использовал преобразование TO_DATE(:EffectiveDate,'YYYY-MM-DD"T"HH24:MI:SS') (позже вы поймете, почему мне пришлось использовать формат ISO 8601).
  • При добавлении переменной :EffectiveDate в мой SQL-запрос параметр автоматически добавлялся в общий набор данных. Первоначально это вызвало ошибку Oracle ORA-01008: not all variables bound . Проблема была решена путем удаления параметра dataset, а затем нажатия кнопки «обновить поля» на экране запроса набора данных, чтобы создать его заново. Единственная разница, по-видимому, заключается в том, что теперь имя параметра имеет двоеточие.
  • Я установил параметр dataset, как показано ниже на скриншоте:

Параметр общего набора данных

  • Параметр имеет тип «текст» и по умолчанию имеет значение сегодня в полночь в формате ISO 8601 ( =Format(Today(),"yyyy-MM-ddT::") )

3. Набор данных отчета:

  • Набор данных отчета использует указанный выше общий набор данных, а также имеет параметр dataset. В этом случае я хочу, чтобы параметр набора данных отчета принимал дату из параметра отчета, но передавал строку в параметр общего набора данных, как показано ниже:

Параметр набора данных отчета

  • Для параметра Dataset устанавливается значение =Format(Parameters!EffectiveDate.Value,"yyyy-MM-ddT::")

4. Параметр отчета:

  • Для параметра отчета задается тип «дата», как показано ниже, по умолчанию =Today() :

Параметр отчета
Параметры отчета по умолчанию

5. Кэширование общего набора данных:

  • Сначала я настроил общий набор данных на использование кэшированных данных (на сервере отчетов через ваш браузер):

Кэширование общего набора данных

  • Затем я настроил «План обновления кэша»:

План обновления кэша

  • План обновления кэша кажется очень требовательным к формату параметров, и именно этот последний шаг, похоже, работает только при передаче дат в виде строк, совместимых с ISO 8601.

6. Примечания:

  • :EffectiveDate это имя моей переменной привязки строки Oracle и EffectiveDate имя моего параметра отчета. Измените свой код соответствующим образом.
  • Меня интересовала только дата (т. Е. Не Время). Если вам также нужно время, вам может потребоваться внести некоторые изменения.
  • Чтобы конечный пользователь знал, сколько лет данным, я добавил дополнительный столбец ,SYSDATE AS DATA_AGE в свой SQL-запрос. Затем я смог указать возраст данных в заголовке моего отчета с помощью First(Fields!Report_Date.Value, "<report_dataset_name")
  • Я могу создавать моментальные снимки отчета, но все запросы отображаются серым цветом, хотя все остальные запросы влияют только на фильтрацию отчетов.
  • Чтобы иметь разные значения по умолчанию в моих моментальных снимках, я использовал тест IsNothing(User!UserID) . Я хотел бы знать, есть ли лучший способ.
  • Мой пример не обязательно в том порядке, в котором я настраивал (т. Е. Я ссылаюсь на параметр отчета, прежде чем показывать его настройку).