Share via


Построение скоркарды средствами 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

image

Рис.1

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

image

Рис.2

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

 

clip_image005

Рис.3

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

image

Рис.4

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

image

Рис.5

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

image

Рис.6

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

image

Рис.7

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

image

Рис.8

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

image

Рис.9

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

image

Рис.10

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

clip_image021

Рис.11

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

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

clip_image023

Рис.12

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

clip_image025

clip_image026

Рис.13

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

clip_image027

Рис.14

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

clip_image029

Рис.15

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

clip_image031

Рис.16

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

clip_image032

Рис.17

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

clip_image034

Рис.18

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

clip_image036

Рис.19

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

clip_image038

Рис.20

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

clip_image040

Рис.21

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

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

clip_image042

Рис.22

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

 

clip_image043

Рис.23

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

clip_image045

Рис.24

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

clip_image046

Рис.25

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

clip_image047

Рис.26

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

clip_image049

Рис.27

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

image

Рис.28

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

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

clip_image053

Рис.29

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

clip_image054

Рис.30

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

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

 

clip_image055

Рис.31

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

image

Рис.32

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

 

Алексей Шуленин