Построение скоркарды средствами SQL Server Reporting Services 2008R2. Часть 3

Ссылка на 2-ю часть.

Нам осталось превратить циферки в числовых колонках отчета Рис.17 предыдущего поста в красивые, исполненные глубокого смысла значочки. В Reporting Services 2005 никаких особых возможностей для этого не имелось. Приходилось в отчет вставлять изображения, например, иконки разных светофорчиков, добавлять их в новую колонку и в зависимости от значения колонки, допустим, статус рисовать ту или иную иконку. Что-нибудь где-то так:

=Switch(ReportItems!textbox15.Value = -1, "images/Stoplight_Single0.gif", ReportItems!textbox15.Value = 0, "images/Stoplight_Single1.gif", ReportItems!textbox15.Value = 1, "images/Stoplight_Single2.gif")

Скрипт 1

Это было не очень удобно. (Зато тогда нормально работала функция Aggregate()). С тех пор наука шагнула далеко вперед. В Reporting Services 2008 в плане визуализации , помимо табликса и прочих улучшений, появился элемент управления датчик (Gauge) от Dundas, а в 2008 R2, помимо картографии с поддержкой геопространственных типов SQL Server, - инфокривые (Sparklines), инфопрямые (Data bars) и индикаторы (Indicators) - Рис.1

Рис. 1

Отметим элемент управления индикатор и нарисуем его в ячейке Product_Gross_Profit_Margin_Status (столбец Статус). Из предложенных внешних видов выберем по желанию трехдиапазонный индикатор (т.к. функция KPIStatus возвращает для данного KPI значения из набора -1, 0, 1).

Рис. 2

Сопоставим значение в ячейке внешнему виду индикатора. Для этого надо кликнуть по ячейке с индикатором правой кнопкой и из контекстного меню выбрать Indicator Properties, либо отметить в ячейке с индикатором область Gauge Data и выбрать Indicator Properties:

Рис. 3

либо перейти в панель свойств справа, выбрать свойство Indicators и в раскрывшемся Indicator Collection Editor - свойство IconSet:

Рис. 4

Поставьте значения, соответствующие тому или иному внешнему виду индикатора на закладке Value and States:

Рис. 5

Обратите внимание, что последовательность значков не является фиксированной. Как форму, так и цвет значка внутри индикатора можно при желании корректировать. Кнопки Add и Delete позволяют изменить число диапазонов. В поле Value находится привязка к соответствующему численному значению:

Рис. 6

В комбобоксе States Measurement Unit замените Percentage на Numeric, т.к. границы, заданные в колонках Start и End - это не проценты, а абсолютные значения:

Рис. 7

Аналогичные корректировки можно произвести, если выделить в ячейке с индикатором область Gauge Data и в панели свойств выбрать свойство IndicatorStates.

Рис. 8

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

Рис. 9

Скопируйте (Copy/Paste в контекстном меню ячейки) данную ячейку наверх, в агрегатную.

Рис. 10

Откройте свойства агрегатной ячейки, кликните на значок функции справа от текстового поля Value и измените значение, которое будет отображаться индикатором, на =Aggregate(Fields!Product_Gross_Profit_Margin_Status.Value):

Рис. 11

Аналогичным образом добавьте стрелочный 3-диапазонный индикатор в столбец Тренд.

Добавьте элемент управления датчик в колонку Рентабельность. Выберите вид датчика, чтобы он вписывался в ячейку таблицы:

Рис. 12

В свойствах шкалы задайте минимальное и максимальное значение, отображаемое датчиком. Согласно формуле [Gross_Profit_Margin] изменяется в диапазоне от 0 до 1.

Рис. 13

Кликните правой кнопкой на внутреннюю область датчика и выберите из контекстного меню Gauge Properties.

Рис. 14

На закладке Back Fill измените Fill style на Solid, а Color - на No Color, чтобы цвет фона датчика не заслонял цвет фона ячейки:

Рис. 15

Перейдите на закладку Frame Fill и проделайте то же самое:

Рис. 16

Отметьте ячейку целиком, кликнув по ее границе, кликните правой кнопкой и выберите Gauge Panel Properties:

Рис. 17

Выберите закладку Border, измените цвет границы ячейки на светло-серый и отметьте нужные стороны границы:

Рис. 18

Откройте свойства указателя датчика.

Рис. 19

На закладке Pointer Options задается отображаемое указателем значение (Value), форма, толщина и другие свойства указателя. Увеличьте толщину стрелки, чтобы она была заметнее.

Рис. 20

Перейдите на закладку Pointer Fill и сделайте цвет стрелки поярче.

Рис. 21

Скопируйте ячейку с датчиком ячейкой выше. Зайдите на Рис.20 и измените Value на агрегатное значение Gross_Profit_Margin аналогично Рис.11.

Отметьте Data Bar и перенесите его в детальную ячейку столбца Доля.

Рис. 22

Выберите из контекстного меню свойства горизонтальной оси графика:

Рис. 23

Задайте минимальное и максимальное значения по оси. Доля продукта также изменяется в интервале от 0 до 1.

Рис. 24

Отметьте внутреннюю область ячейки и отметьте в контекстном меню Show Data Labels, чтобы величина, которую символизирует длина столбца, отображалась вместе с ним:

Рис. 25

Зайдите в свойства метки (Series Data Labels)

Рис. 26

и откорректируйте шрифт (допустим, жирный размера 8) и формат представления числа:

Рис. 27

Для пущей красоты сделаем динамической закраску столбца в зависимости от значения ячейки. В свойствах Chart Data выберите Color, кликните Expression

Рис. 28

и введите формулу, допустим,

=iif (Fields!ProductShare.Value < 0.1, "Red", iif (Fields!ProductShare.Value < 0.33, "Yellow", "Green")):

Рис. 29

Аналогично предыдущим столбцам скопируйте ячейку строчкой выше в агрегатную строку для группы Category. Не забудьте поменять Fields!ProductShare.Value на Aggregate(Fields!ProductShare.Value) в Value

Рис. 30

и выражении цветности столбца (Рис.29).

Сделайте градиентную закраску столбца:

Рис. 31

Запускаем отчет:

Рис. 32

Ну красота же неописуемая! Можно было бы еще риски в рентабельности сделать почетче и стрелку тоже красить динамически. Заодно можно было подложить какую-нибудь интересную заливку в качестве фона ячеек и отчетов, поиграться со шрифтами и т.д. Можно было перемножить продуктовое измерение по вертикальной оси на время и сделать еще колонку со спарклайнами, чтобы условно показывать продажи в динамике – см. https://blogs.technet.com/b/isv_team/archive/2010/04/04/3322989.aspx. Совершенствовать можно до бесконечности. Наведение остальной красоты предоставляется читателям в качестве самостоятельного упражнения.

Автор: Алексей Шуленин