Часто на портале нужно выводить графические виджеты с однотипными показателями для разных направлений деятельности, разных подразделений и т.п.
На скриншоте ниже один и тот же отчет отображается для разных направлений деятельности (с разными значениями параметра direction).
Портал с шестью однотипными блоками типа Отчет", которые вызываются с разными значениями параметра
Виджеты
Все виджеты имеют тип "Отчет" и вызывают один и тот же отчет. В фильтре передается значение параметра.
Портал с шестью блоками типа Отчет", которые вызываются с разными значениями параметра
Настройка фильтра:
{"27":{"name":"Direction","value":"3034","type":"Dropdown"}}
где 27 — ID фильтра, а 3034 — ID направления.
Отчет
Отчет содержит диаграмму, на которую наложены текстовые поля (в них будут отображаться числовые подписи).
Отчет с диаграммой
В отчете созданы два источника данных — таблица с показателями, которые отображаются на диаграмме, и таблица с цветовыми настройками.
Источники данных в отчете
Данные для диаграммы подгружаются из хранимой процедуры (в данном примере в процедуре подсчитывается число завершенных и просроченных задач из четырех категорий "Цели", "Задачи", "Вехи" и "Мероприятия").
ALTER PROCEDURE [dbo].[cm_getTaskInfo]
(@Direction INT = NULL)
AS
IF @Direction = 0
SET @Direction = NULL;
SELECT COUNT(DISTINCT c.TaskID) AS cTotal
, COUNT(DISTINCT z.TaskID) AS zTotal
, COUNT(DISTINCT v.TaskID) AS vTotal
, COUNT(DISTINCT m.TaskID) AS mTotal
, COUNT(DISTINCT vClosed.TaskID) AS vClosed
, COUNT(DISTINCT vOverdue.TaskID) AS vOverdue
, COUNT(DISTINCT mClosed.TaskID) AS mClosed
, COUNT(DISTINCT mOverdue.TaskID) AS mOverdue
FROM TasksInSubcat47Denormalized c
LEFT JOIN TasksInSubcat48Denormalized z
ON z.ParentTaskId = c.TaskID
AND z.StateID NOT IN (2, 50)
LEFT JOIN TasksInSubcat49Denormalized v
ON v.ParentTaskId = z.TaskID
AND v.StateID NOT IN (2, 50)
LEFT JOIN TasksInSubcat51Denormalized m
ON m.ParentTaskId = v.TaskID
AND m.StateID NOT IN (2, 50)
LEFT JOIN TasksInSubcat49Denormalized vClosed
ON vClosed.TaskID = v.TaskID
AND vClosed.StateId IN (4, 44, 45)
LEFT JOIN TasksInSubcat49Denormalized vOverdue
ON vOverdue.TaskID = v.TaskID
AND vOverdue.IsOverdue = 1
LEFT JOIN TasksInSubcat51Denormalized mClosed
ON mClosed.TaskID = m.TaskID
AND mClosed.StateId IN (4, 44, 45)
LEFT JOIN TasksInSubcat51Denormalized mOverdue
ON mOverdue.TaskID = m.TaskID
AND mOverdue.IsOverdue = 1
WHERE c.StateID NOT IN (2, 50)
AND (@Direction IS NULL OR c.ParentTaskId = @Direction)
Цветовая схема диаграммы определяется в зависимости от направления (значения параметра direction). В данном примере в процедуре настраиваются цветовые схемы для пяти блоков по отдельным направлениям и шестому блоку со сводными данными по всем направлениям (для него значение параметра direction равно 0).
ALTER PROCEDURE [dbo].[cm_getDiagramSettings]
(@Direction INT = NULL)
AS
IF @Direction = 0
SET @Direction = NULL;
DECLARE @Settings TABLE (SubcatName VARCHAR(50), Height INT, Color VARCHAR(50));
INSERT INTO @Settings
VALUES('Мероприятия', 1, CASE
WHEN @Direction = 3034 THEN 'PaleTurquoise'
WHEN @Direction = 3033 THEN 'LightGreen'
WHEN @Direction = 3030 THEN 'GreenYellow'
WHEN @Direction = 2969 THEN 'LemonChiffon'
WHEN @Direction = 3032 THEN 'PaleGoldenrod'
ELSE 'Aquamarine'
END);
INSERT INTO @Settings
VALUES('Вехи', 1, CASE
WHEN @Direction = 3034 THEN 'MediumTurquoise'
WHEN @Direction = 3033 THEN 'LimeGreen'
WHEN @Direction = 3030 THEN 'YellowGreen'
WHEN @Direction = 2969 THEN 'Khaki'
WHEN @Direction = 3032 THEN 'Gold'
ELSE 'MediumAquamarine'
END);
INSERT INTO @Settings
VALUES('Задачи', 1, CASE
WHEN @Direction = 3034 THEN 'LightSeaGreen'
WHEN @Direction = 3033 THEN 'ForestGreen'
WHEN @Direction = 3030 THEN 'OliveDrab'
WHEN @Direction = 2969 THEN 'DarkKhaki'
WHEN @Direction = 3032 THEN 'Goldenrod'
ELSE 'MediumSeaGreen'
END);
INSERT INTO @Settings
VALUES('Цели', 1, CASE
WHEN @Direction = 3034 THEN 'DarkCyan'
WHEN @Direction = 3033 THEN 'DarkGreen'
WHEN @Direction = 3030 THEN 'DarkOliveGreen'
WHEN @Direction = 2969 THEN 'Olive'
WHEN @Direction = 3032 THEN 'DarkGoldenrod'
ELSE 'SeaGreen'
END);
SELECT *
FROM @Settings
Данные из хранимой процедуры используются в настройках диаграммы.
Настройка цветовой схемы диаграммы
Подвал отчета с легендой отображается только на одном, последнем блоке. Для этого в код отчета добавляется процедура и назначается на событие AfterData для подвала отчета.
private void ReportSummary1_AfterData(object sender, EventArgs e)
{
string direction = ((String)Report.GetParameterValue("FilterDirection"));
if (direction != "3032")
{
ReportSummary1.Visible = false;
}
}