Visual basi c код для отображения изменения диапазона дат Dynami c в отчете SSRS - PullRequest
0 голосов
/ 26 мая 2020

Привет, я создал заполнитель SSRS [Дата] в одном отчете SSRS.

Date Range: [Date]

И выражение заполнителя:

=Microsoft.VisualBasic.Strings.format(Parameters!start_date.Value, "Long Date") + " - " + Microsoft.VisualBasic.Strings.format(Parameters!end_date.Value, "Long Date")

Однако я установил для start_date и end_date значение по умолчанию Null. Когда я просматриваю отчет, этот заполнитель будет показывать что-то вроде этого:

Date Range: - 

Если я изменю дату начала на 01.03.2020 и дату окончания на 31.03.2020, то отобразится:

Date Range: Sunday, March 1, 2020 - Tuesday, March 31, 2020

Как я могу изменить свое выражение, чтобы установить диапазон дат по умолчанию от самой старой даты до самой последней даты, если какой-либо из них или оба являются пустыми? Вот мой код Visual Basi c, я старался изо всех сил, но у меня не было большого опыта программирования, так что это может быть неправдой:

=If start date is null 
then Microsoft.VisualBasic.Strings.format(min(Fields!arrival_date.Value), "Long Date") + " - " + Microsoft.VisualBasic.Strings.format(Parameters!end_date.Value, "Long Date")
if end date is null
then Microsoft.VisualBasic.Strings.format(Parameters!start_date.Value, "Long Date") + " - " + Microsoft.VisualBasic.Strings.format(max(Fields!arrival_date.Value), "Long Date")
if start date and end date is null
then Microsoft.VisualBasic.Strings.format(min(Fields!arrival_date.Value), "Long Date") + " - " + Microsoft.VisualBasic.Strings.format(max(Fields!arrival_date.Value), "Long Date")
else Microsoft.VisualBasic.Strings.format(Parameters!start_date.Value, "Long Date") + " - " + Microsoft.VisualBasic.Strings.format(Parameters!end_date.Value, "Long Date")

1 Ответ

1 голос
/ 26 мая 2020

Я не уверен, что вам нужен VBA для sh этого. Я бы сделал это следующим образом.

Создайте отчет.

Добавьте 2 параметра StartDate и EndDate

Затем я бы создал набор данных вроде (взято из sam, [база данных le adventureworks)

SELECT        CustomerID, OrderDate, SubTotal
FROM            Sales.SalesOrderHeader
WHERE        (SubTotal < 100) -- just to reduce the sample data
and 
    (
        (OrderDate >= @StartDate OR @StartDate IS NULL)
    AND
        (OrderDate <= @EndDate OR @EndDate IS NULL)
    )

Будет использоваться указанная дата или NULL, мы будем использовать первую или последнюю найденную запись.

Тогда для заполнителей заполнитель [Начало] будет выглядеть примерно так.

=IIF(
    Parameters!StartDate.Value=Nothing
    ,First(Fields!OrderDate.Value, "DataSet1")
    , Parameters!StartDate.Value
    )

и аналогично заполнителю [Конец]

=IIF(
    Parameters!EndDate.Value=Nothing
    ,Last(Fields!OrderDate.Value, "DataSet1")
    , Parameters!EndDate.Value
    )

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

Наконец, я отформатировал заполнители, чтобы они отображались как длинные даты.

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

enter image description here

(фактические данные по-прежнему отображается до 30 июня 2014 г.) Мы как Дата первого и последнего заказа для всего набора данных, поскольку не были указаны параметры.

enter image description here

Здесь дата первого заказа после 20 мая 2011 г. - 1 июля, но дата параметра отображается как то, что выбрал пользователь

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...