Перейти к содержанию

Настройка однотипных виджетов

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

На скриншоте ниже один и тот же отчет отображается для разных направлений деятельности (с разными значениями параметра 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;
  }
}