Построение скоркарды средствами SQL Server Reporting Services 2008R2. Часть 3.
Нам осталось превратить циферки в числовых колонках отчета Рис.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
Ну красота же неописуемая! Можно было бы еще риски в рентабельности сделать почетче и стрелку тоже красить динамически. Заодно можно было подложить какую-нибудь интересную заливку в качестве фона ячеек и отчета, поиграться со шрифтами и т.д. Можно было перемножить продуктовое измерение по вертикальной оси на время и сделать еще колонку со спарклайнами, чтобы условно показывать продажи в динамике – см. http://blogs.technet.com/b/isv_team/archive/2010/04/04/3322989.aspx. Совершенствовать можно до бесконечности. Наведение остальной красоты предоставляется читателям в качестве самостоятельного упражнения.
Алексей Шуленин