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