SSRS - динамические панели данных - PullRequest
0 голосов
/ 16 октября 2018

Мне нужно выполнить следующие требования к отчетности -

Отчет

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

Я также пытался раскрасить цвет фона текстовых полей (для столбца временной шкалы) с помощью выражений.Это правильный путь?

Спасибо, Амрита

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Я бы подошел к этому с помощью матрицы и соответственно установил фон каждой ячейки.

Для этого нам понадобится набор дат для работы.В вашем случае, поскольку вы, похоже, переходите только на уровень месяца, моя таблица дат содержит только месяцы и годы.

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

DECLARE @dates TABLE(Year int, Month int)
INSERT INTO @dates VALUES
(2018,1), (2018,2), (2018,3), (2018,4), (2018,5), (2018,6),
(2018,7), (2018,8), (2018,9), (2018,10), (2018,11), (2018,12),
(2019,1), (2019,2), (2019,3), (2019,4)


DECLARE @t TABLE (GroupName varchar(10), ActivityName varchar(10), StartDate date, EndDate date, RGB varchar(10))

INSERT INTO @t VALUES
('Group 1', 'Activity 1', '2018-01-03', '2018-12-14', '#ED7D31'),
('Group 1', 'Activity 2', '2018-02-03', '2018-06-14', '#AFABAA'),
('Group 2', 'Activity 3', '2018-01-03', '2018-04-14', '#9DC3E8'),
('Group 2', 'Activity 4', '2018-06-03', '2018-07-14', '#2E75B5'),
('Group 2', 'Activity 5', '2018-08-03', '2018-12-14', '#C55B11'),
('Group 2', 'Activity 6', '2018-03-03', '2018-07-14', '#F4B184'),
('Group 3', 'Activity 7', '2018-10-03', '2019-03-14', '#596DF2'),
('Group 3', 'Activity 8', '2009-01-03', '2019-02-14', '#3d7080')

SELECT * 
    FROM @dates d
       LEFT JOIN (
                SELECT 
                    *
                    , (Year(StartDate) * 100) + Month(StartDate)  as StartYrMn
                    , (Year(EndDate) * 100) + Month(EndDate)  as EndYrMn
                    FROM @t
                ) a
                    ON ((d.[Year] * 100) + d.[Month]) BETWEEN StartYrMn AND EndYrMn
    ORDER BY ActivityName, d.Year, d.Month

Эта первая часть - наша таблица дат.Я только что создал это в наборе данных, но вы, вероятно, хотите иметь постоянную таблицу базы данных для этого.

Вторая часть воссоздает ваши образцы данных, я расширил их до межгодовых границ (естьгде-то наступает 2019 год), поэтому он все еще будет работать, если данные не попадают в течение одного года.Я также добавил столбец RGB для хранения нужных нам цветов (есть другие способы сделать это, но это самый простой способ)

Последний оператор SELECT берет основные данные о деятельности, вычисляет столбцы StartYrMn и EndYrMn, которые простоудерживайте такие значения, как, например, 201812 для декабря 2018 года.Это делается в подзапросе

Затем мы берем нашу таблицу дат и LEFT JOIN в наш подзапрос, чтобы создать набор данных, который содержит 1 строку для каждого года / месяца и действия.Вы можете запустить приведенный выше код в SSMS, чтобы увидеть результаты.

ОК, все на стороне данных сделано ...

Затем добавьте элемент Matrix в свой отчет.

Установите группы строк для GroupName и ActivityName (GroupName требуется родительский объект для ActivityName).

Теперь добавьте группы столбцов для [Year] и [Month].Опять же, [Год] должен быть родителем для [Месяц]

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

enter image description here

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

=FORMAT(DATESERIAL(2017, Fields!Month.Value, 1), "MMM")

. Вы можете игнорировать 2017 год, мыпросто нужно создать дату, чтобы получить название месяца. Вы могли бы использовать 1999, он все еще будет работать.

Теперь все, что осталось сделать, это покрасить фон ячеек. Установите цвет фона Data в следующем выражении.

=IIF(IsNothing(Fields!ActivityName.Value), nothing, Fields!RGB.Value)

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

Вот и все!

Ваш конечный результат должен выглядеть примерно так ...

enter image description here

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

0 голосов
/ 18 октября 2018

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

Для начала я создал два вычисляемых поля в своем наборе данных, полученных из полей StartDate и EndDate из источника -

StartYrMn = Year(Fields!Start_Date.Value)*100 + Month(Fields!Start_Date.Value)

EndYrMn = Year(Fields!End_Date.Value) *100 + Month(Fields!End_Date.Value)

Вышеприведенное помогло бы мне сравнить значения дат для текущего месяца.

Далее, в области дизайна отчета я создал матрицу, используя GroupName в качестве родительской группы иActivityName как его дочерняя группа.(Алан описательно показал это в приведенном выше примере. Пожалуйста, обратитесь к тому же.)

Из-за ограничений SSRS я не смог создать поле, чтобы получить все названия месяцев, поэтому мне пришлось жестко кодировать всемесяцы.После вышеуказанных изменений отчет должен выглядеть примерно так: Дизайн отчета

После того, как все вышеперечисленное выполнено, нам нужно теперь написать выражения Fill для каждого текстового поля Месяц, как показано нижепроверить, находится ли currentYrMn в пределах между StartYrMn и EndYrMn.

=Switch( Fields!StartYrMn.Value <= Year(Today()) & "01" And 
Fields!EndYrMn.Value>= Year(Today()) & "01" And Fields!GroupName.Value= "Group1",
"DarkBlue", 
Fields!StartYrMn.Value<= Year(Today()) & "01" And 
Fields!EndYrMn.Value>= Year(Today()) & "01" And Fields!GroupName.Value= "Group2",
"Gold")

Вышеприведенное выражение относится к январскому месяцу.Точно так же конвертируйте то же самое для других месяцев.

Наконец, я удалил border lines из середины data ячеек (используя настройки Border текстового поля), чтобы мои цвета выглядели как разбросанные по диапазону месяца и выглядели как данныебары.

При таком подходе мой итоговый отчет будет выглядеть примерно так:

Итоговый отчет

0 голосов
/ 16 октября 2018

Вы используете выражение в свойствах textBox.

enter image description here

enter image description here

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