В SSRS параметр даты и времени в режиме предварительного просмотра не соответствует развернутому отчету - PullRequest
0 голосов
/ 10 февраля 2019

В SSRS параметр даты и времени в режиме предварительного просмотра не соответствует развернутому отчету.Это кто-то еще сталкивался?Код RDL идентичен.Является ли тот факт, что иногда локальный предварительный просмотр является просто симуляцией функциональности?Это потому, что при предварительном просмотре иногда используются кэшированные данные?

У меня есть отчет SSRS, в котором при предварительном просмотре в Visual Studio локально дата отображается как 2/10/2019, но при развертывании кода RDLна сервере дата показывается как 07.02.2009.Переменная даты и времени основана на параметре в отчете, называемом rundate, и имеет значение по умолчанию 2/10/2019.Поэтому я думаю, что то же самое должно произойти на сервере отчетов, что происходит локально в режиме предварительного просмотра.

В отчете есть четыре набора данных, и в качестве теста я установил каждые четыре, чтобы в строке SQL была задана строказначение примерно так: SET @rundate = '2019-02-10', но на сервере отчетов, когда я загружаю отчет, он выдает эту ошибку: необходимо объявить скалярную переменную "@rundate".Необходимо объявить скалярную переменную "@rundate".Оно находится в каскадном сообщении об ошибке со вкладкой, которое выглядит следующим образом: во время рендеринга клиента произошла ошибка.Произошла ошибка во время обработки отчета.Не удалось выполнить запрос для набора данных 'ThirdDataset.Необходимо объявить скалярную переменную "@rundate".Необходимо объявить скалярную переменную "@rundate".

Итак, почему она запускается локально, а не на сервере?«ThirdDataset» - это ложное имя, которое я дал здесь.Фактическое имя отредактировано.Но я заметил, что это будет первый запуск набора данных, если он будет выполняться в алфавитном порядке.Таким образом, это приводит меня к вопросу: почему отчет не распознает это как параметр и почему он жалуется, что не объявлен?

=========== *

ОБНОВЛЕНИЕ:

Я настроил рундат как часть управляемой данными подписки в отчете, например так:

ВЫБРАТЬ преобразование (дата, DATEADD (ДЕНЬ, -2,SYSDATETIME ())) rundate

enter image description here

То есть два дня назад.Поскольку сегодня 2/11/2019, параметр rundate, передаваемый в отчет SSRS на сервере, должен быть 2/9 / 2019.

Для интереса, чтобы проверить это, я установил параметр rundate Default Valueбыть 8/8/2018 в надежде, что отчет, управляемый данными, установит его правильно.

enter image description here

В режиме предварительного просмотра локально в Visual Studio,текстовое поле, в котором должно отображаться выражение [@rundate], показывает 8/8/2018, чего я и ожидал, но наборы данных предназначены для запуска этого параметра.Поскольку нет ничего, что sql должен извлечь из базы данных, которая является старой, графики и диаграммы в режиме предварительного просмотра должны оказаться полностью пустыми.Почему они показывают данные?!

Далее, давайте посмотрим, что говорит оповещение по электронной почте о подписке.У него была дата 2/11/2019 12:00:00 утра.Если подписка, управляемая данными, запускается так, как если бы она выполнялась, она должна иметь дату 02.09.2009 из

SELECT convert (date, DATEADD (DAY, -2, SYSDATETIME ())) какrundate

Почему это не сработало?

На сервере SSRS RDL-файл имеет значение по умолчанию для параметра 2/11/2019 12:00:00 AM, но почему отчет получилЭто значение по умолчанию?Что я делаю не так и как я могу это исправить?

enter image description here

В качестве теста я установил для этого параметра даты / времени по умолчанию значение 12:12:34 для своего времени, чтобы увидеть, что произойдет.Выяснилось, что да, это отметка даты и времени, которая отправляется в отчет.Поэтому я снял флажок «Имеет значение по умолчанию» enter image description here

Затем я заметил, что на шаге 5 управляемой данными подписки я не смог перейти к следующему> без внесения небольших изменений:

enter image description here

Итак, что должно произойти?Это покажет странное значение 8/8/2018?Будет ли отображаться дата двух дней назад?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

После долгих проб и ошибок я обнаружил, что ответом НЕ было установить для параметра значение по умолчанию на сервере отчетов SSRS.

0 голосов
/ 11 февраля 2019

Значения по умолчанию для параметров отчета развертываются только один раз на сервере отчетов, а затем они сохраняют свои значения по умолчанию после последующих развертываний.Это делается для того, чтобы значения параметров по умолчанию, используемые в разработке, не перезаписывали значения по умолчанию для требуемых параметров на рабочем сервере.

Похоже, что при первом развертывании отчета значение @rundate по умолчанию было 2/7/2019, но с тех пор в локальном отчете оно было изменено на 2/10/2019.Зайдите на сервер отчетов, найдите отчет и перейдите в раздел «Параметры отчета», чтобы отредактировать параметры и изменить значение по умолчанию на то, что вам нужно (удаление отчета с сервера отчетов и повторное развертывание с обновленным параметром приведет кимеют тот же эффект, но обратите внимание, что параметр будет поддерживать это значение по умолчанию в дальнейшем).Также можно установить параметр отчета с помощью выражения, чтобы он постоянно обновлялся.

Что касается обновления значения вашего параметра в операторе Sql с помощью оператора SET, вы не можете сделать это таким образом - вам нужно установить его в списке параметров отчета, чтобы SSRS мог установить значение параметра.Следовательно, ваш сервер базы данных жалуется, что вы пытаетесь установить значение локальной переменной, которая не была определена в вашем операторе Sql, и, таким образом, выдает сообщение об ошибке.

Таким образом, вам нужно настроить параметры отчета в разделе параметров отчета в конструкторе отчетов.Ваш Sql может затем ссылаться на ваши параметры следующим образом:

SELECT * FROM MyTable WHERE SomeDate >= @rundate

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

...