Поделиться через


Построение диаграмм в отчетах для WinForms

В этой статье описывается построение статистических диаграмм, одна из замечательных новых функций, появившихся в выпуске v3 2009 ComponentOne Reports for WinForms (отчетов ComponentOne для WinForms).

Инструмент ComponentOne Reports for WinForms всегда поддерживал поля диаграмм благодаря своей расширяемой настраиваемой архитектуре полей. Поле Chart ("Диаграмма") реализовано как настраиваемое поле в сборке C1.Win.C1Report.CustomFields.2.dll, которая устанавливается с приложением конструктора отчетов, а также включается в качестве образца с полным исходным кодом (CustomFields). В этой статье будет показано, как можно настраивать поля диаграмм в отчетах с помощью приложения C1ReportDesigner. Приложение C1ReportDesigner устанавливается с инструментами ComponentOne Reports for WinForms и ComponentOne Reports for WPF.

Диаграммы в простых отчетах

Создать простую диаграмму очень легко. Необходимо выполнить следующие действия.

  1. Открыть приложение C1ReportDesigner и создать или открыть файл определения отчетов.
  2. Добавить в отчет поле Chart ("Диаграмма"), а затем выбрать его, чтобы отобразить его свойства в окне свойств конструктора.
  3. Установить в качестве значения свойства DataX диаграммы имя поля, значения которого должны отображаться по оси X (категории диаграммы).
  4. Установить в качестве значения свойства DataY диаграммы имя поля, значения которого должны отображаться по оси Y (значения диаграммы).
  5. При желании установить дополнительные свойства, такие как ChartType (тип диаграммы) и DataColor (цвет данных).

Например, приведенная ниже диаграмма была создана на основе таблицы продуктов NorthWind. В данном случае были установлены следующие свойства:

DataX = "ProductName"
DataY = "UnitPrice"

Обратите внимание, что для этого типа диаграмм (Bar — линейчатая диаграмма) ось значений (по которой отображается поле DataY) расположена горизонтально, а ось категорий — вертикально.

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

Другие полезные свойства диаграмм

Кроме упомянутых выше свойств DataX и DataY, объект Chart предоставляет несколько других часто используемых свойств.

  • ChartType. Это свойство позволяет выбрать тип отображаемой диаграммы. Существует шесть вариантов: Bar (линейчатая диаграмма), Column (гистограмма), Scatter (точечная диаграмма), Line (график), Area (диаграмма с областями) и Pie (круговая диаграмма).
  • DataColor. Это свойство задает цвет, который будет использоваться для рисования полос, столбцов, областей, точек и секторов диаграмм. Если в диаграмме имеется несколько рядов данных, то поле Chart автоматически создает разные оттенки выбранного цвета для всех рядов. Если требуется выбрать определенный цвет для каждого ряда данных, то вместо DataColor используется свойство Palette, в котором задается список нужных цветов, разделенных точкой с запятой (например "Red;Green;Blue").
  • FormatY, FormatX. Эти свойства задают формат, который будет использоваться для отображения значений по соответствующим осям. Например, при установке значения "c" для FormatY поле Chart будет форматировать значения по оси Y как денежные. Эти свойства аналогичны свойству Format в обычных полях отчета.
  • XMin, XMax, YMin, YMax. Эти свойства позволяют задавать диапазон для каждой оси. При установке -1 для какого-либо из этих свойств Chart будет вычислять диапазон автоматически. Например, если для свойства YMax установлено значение 100, то все значения больше 100 будут обрезаны и не появятся в диаграмме.

Эти свойства применяются ко всем типам диаграмм. Круговая диаграмма (Pie) имеет несколько дополнительных свойств.

  • ShowPercentages. Каждый сектор круговой диаграммы имеет легенду, показывающую значение X для этого сектора. Если свойство ShowPercentages установлено в значение true, то легенда также будет включать процентное значение, указывающее размер сектора по отношению ко всей круговой диаграмме. Процентное значение форматируется с помощью значения, заданного свойством FormatY. Например, если свойство FormatY имеет значение "p2", то легенды будут включать значение X и процентное значение с двумя знаками после запятой (например "North Region (15.23%)").
  • RadialLabels. Это свойство указывает, что вместо отображения легенды с правой стороны диаграммы следует к каждому сектору присоединить метки с подключенными строками. Это хорошо работает для круговых диаграмм с небольшим количеством секторов (примерно не более десяти).

Поле Chart фактически является оболочкой для элемента управления C1Chart, который предоставляет все службы построения диаграмм и имеет собственную исключительно обширную объектную модель. Если требуется дополнительно настроить поле Chart, можно с помощью свойства ChartControl получить доступ к внутреннему объекту C1Chart и использовать скрипты.

Например, поле Chart не имеет свойства, управляющего расположением легенды. Но элемент управления C1Chart имеет такое свойство, и к нему можно получить доступ с помощью свойства ChartControl. Приведенный ниже скрипт заставляет располагать легенду под диаграммой, а не справа от нее.

' place legend below the chart
chartField.ChartControl.Legend.Compass = "South"

Если назначить этот скрипт свойству OnLoad, то диаграмма будет выглядеть аналогично показанной на следующем рисунке.

Остальные свойства, которые использовались для создания этой диаграммы:

ChartType = Pie
FormatY = "p1"
ShowPercentage = true
Palette = "Red;Gold;Orange;Beige;DarkGoldenrod;Goldenrod;"

Диаграммы с несколькими рядами данных

Чтобы создать диаграммы с несколькими рядами данных, просто установите в качестве значения свойства DataY строку, содержащую имена всех полей данных, которые следует включить в диаграмму, разделив их точкой с запятой. Например, чтобы создать диаграмму, показывающую цены на продукты и скидки, следует установить свойство DataY, как показано ниже.

DataY = "UnitPrice;Discount"

Если нужно задать цвет для отображения каждого ряда данных, установите в качестве значения свойства Palette список цветов, разделенных точкой с запятой. Например, если задать это свойство, как показано ниже, то на диаграмме ряд данных "UnitPrice" будет показан красным цветом, а ряд данных "Discount" — синим.

Palette = "Red;Blue"

Ряды данных с вычисляемыми значениями

Свойство DataY не ограничено только именами полей. Строки, задающие ряды данных, фактически воспринимаются как полные выражения, которые вычисляются, как любое обычное поле в отчете.

Например, чтобы создать диаграмму, показывающую фактическую цену каждого продукта, можно установить свойство DataY, как показано ниже.
DataY = "UnitPrice * (1 - Discount)"

Диаграммы в сгруппированных отчетах

Инструмент создания отчетов Reports for WinForms позволяет создавать отчеты с несколькими группами. Например, вместо использования списка всех продуктов в единственном простом отчете можно сгруппировать продукты по категориям. Каждая группа имеет верхний и нижний колонтитулы, позволяющие отображать сведения о группе, например заголовки и промежуточные итоги.

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

Для иллюстрации здесь приводится диаграмма, отражающая определение отчета, которое показано в конструкторе отчета, и показывающая результат добавления поля Chart в верхний колонтитул отчета и в верхний колонтитул группы.

Продолжим с примером, приведенным выше. Если добавить диаграмму в верхний колонтитул группы, а затем установить свойство DataX в значение "ProductName" и свойство DataY в значение "UnitPrice", то окончательный отчет будет содержать по одной диаграмме для каждой категории, и в каждой диаграмме будут отображаться цены единиц продуктов в этой категории.

На следующих рисунках показаны снимки экрана отчета, который описывался выше, с верхними колонтитулами групп, диаграммами, которые в них содержатся, и несколькими подчиненными записями для иллюстрации.

Диаграмма, показывающая цены единиц продуктов в категории "Beverages" (напитки)

Диаграмма, показывающая цены единиц продуктов в категории "Condiments" (приправы)

DataX = "Product Name"
DataY = "Unit Price"

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

Статистические диаграммы

Поле Chart, включенное в выпуск v3 2009 инструмента Reports for WinForms, имеет новую мощную функцию, которая называется "aggregated charting" ("построение статистических диаграмм"). Эта функция позволяет создавать диаграммы, которые автоматически выполняют статистические вычисления со значениями данных (DataY), которые имеют одну и ту же категорию (DataX), используя выбранную агрегатную функцию (сумма, среднее, стандартное отклонение и т.п.).

Для иллюстрации этой функции рассмотрим отчет "Invoices" ("Накладные"), который группирует данные по странам, клиентам и идентификаторам заказов. Общий результат отчета выглядит следующим образом:

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

Можно было бы начать с добавления поля Chart в раздел верхнего колонтитула группы "Country" ("Страна"), а затем установить свойства DataX и DataY следующим образом:

DataX = "CustomerName"
DataY = "ExtendedPrice"

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

Чтобы реализовать данный сценарий, мы добавили свойство Aggregate в поле Chart. Это свойство указывает диаграмме, как следует статистически обрабатывать значения, имеющие одну категорию, в одной точке данных диаграммы. В качестве значения свойства Aggregate можно задать выполнение любой из функций статистической обработки данных: sum (сумма), average (среднее), count (счетчик), maximum (максимальное значение), minimum (минимальное значение), standard deviation (стандартное отклонение) и variance (дисперсия).

Продолжая работу с примером, теперь мы можем просто установить свойство диаграммы Aggregate в значение "Sum". Это приведет к тому, что диаграмма будет складывать все значения "ExtendedPrice" для записей, относящихся к одному заказчику, в одной точке данных. Результат показан ниже.

Обратите внимание, что каждый клиент появляется только один раз. Значения, показанные в диаграмме, соответствуют сумме значений "ExtendedPrice" для всех полей с одним и тем же клиентом ("Customer").

Поскольку диаграмма отображается в поле верхнего колонтитула группы "Country", она повторяется для каждой страны, показывая всех клиентов в этой стране.

Если поместить эту диаграмму в раздел верхнего колонтитула отчета, то в ней будет выполняться статистическая обработка данных по всему отчету. Например, предположим, что требуется начать отчет "Invoices" ("Накладные") с диаграммы, которая показывает общее количество, заказанное каждым продавцом. Чтобы это выполнить, можно добавить поле Chart в раздел верхнего колонтитула отчета и установить следующие свойства:

DataX = "Salesperson"
DataY = "ExtendedPrice"
Aggregate = "Sum"

На следующем рисунке показана полученная диаграмма.

Поскольку диаграмма помещена в разделе верхнего колонтитула отчета, отображаемые значения включают все страны и всех клиентов. Если переместить поле диаграммы из верхнего колонтитула отчета в верхний колонтитул группы "Country", то будут получены аналогичные диаграммы для каждой страны, показывающие общие объемы, реализованные каждым продавцом в данной стране.

Построение статистических диаграмм — это мощная, но простая и легкая в использовании функция. Мы надеемся, что она вам понравится, и будет использоваться для создания впечатляющих отчетов!