Таблицы данных и сетки стали основой современного дизайна пользовательского интерфейса. Они позволяют нашим пользователям легко просматривать большие наборы данных, сравнивать значения и принимать решения на основе эмпирических данных. Однако иногда наборы данных, с которыми мы работаем, нелегко просмотреть в стандартной таблице, или могут быть случаи, когда мы хотим исключить определенные данные, чтобы было легче увидеть корреляции между точками данных. К счастью, инженеры-программисты и программисты разработали более совершенную форму таблицы данных, которая позволяет нам делать именно это: сводные таблицы.
Сводная таблица — это таблица данных, которая помогает пользователям в таких задачах, как обнаружение данных; это позволяет пользователям выполнять сложные аналитические вычисления с загруженным набором данных, определять, какие данные вы хотите отобразить, и определять ориентацию данных. Это позволяет пользователям видеть тенденции, которые обычно упускаются из виду, если вы используете традиционную таблицу данных.
К счастью, Wijmo предоставил вам PivotGrid, лучший доступный элемент управления сводной таблицей Angular. Он прост в реализации, легко настраивается и даже имеет обширный список функций, которые позволяют легко интегрировать его в ваше приложение.
Если вы хотите скачать готовый проект, чтобы помочь вам в дальнейшем, вы можете найти исходный код приложения здесь. Теперь приступим к работе!
Загрузка данных с помощью Pivot Engine
Прежде чем мы реализуем сводную таблицу Wijmo Angular, PivotGrid, нам нужно загрузить все необходимые ресурсы в приложение Angular. Первое, что нам нужно сделать, это установить библиотеку компонентов пользовательского интерфейса Wijmo, что мы и сделаем через NPM. Внутри вашего приложения Angular выполните следующую команду:
npm i @grapecity/wijmo.angular2.all
Это установит библиотеку Wijmo в ваше приложение. Вы могли заметить, что мы указываем пакет angular2 в пути установки; Wijmo поддерживает Angular, React и Vue вместе со своей основной библиотекой JavaScript, поэтому мы указываем пакет angular2, чтобы не устанавливать ненужные файлы.
Затем нам нужно включить файл CSS Wijmo и импортировать правильные модули Wijmo в наше приложение. Откройте файл app.module.ts и включите в него следующее:
import { WjOlapModule } from '@grapecity/wijmo.angular2.olap'; ... imports: [ ... WjOlapModule ],
А что касается стилей, включите следующее в начало файла styles.css вашего приложения:
@import '@grapecity/wijmo.styles/wijmo.css';
Большой! Теперь мы включили все соответствующие файлы Wijmo, которые нам понадобятся. И последнее, что мы сделаем, это создадим сервис, который мы будем использовать для подачи некоторых данных в нашу сводную таблицу Angular. Создайте сервис с помощью следующей команды:
ng g s data
Это создаст файл службы и файл тестирования службы. Мы можем игнорировать тестовый файл, но открыть новый сервисный файл и добавить следующее:
import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class DataService { products = [ { product: 'Wijmo', platform: 'Web' }, { product: 'ActiveReports', platform: 'Desktop' }, { product: 'ActiveReportsJS', platform: 'Web' }, { product: 'ComponentOne', platform: 'Desktop' }, { product: 'Spread', platform: 'Desktop' }, { product: 'SpreadJS', platform: 'Web' }, { product: 'GCDocs', platform: 'Desktop' } ]; agents = [ { agent: 'Ashlyn Dunlop', region: 'East' }, { agent: 'Keith Vang', region: 'East' }, { agent: 'Bobbi Rodrigues', region: 'West' }, { agent: 'Charli Medina', region: 'West' }, { agent: 'Kaitlin Salt', region: 'West' }, ]; constructor() { } randomInt(min: number, max: number) { return Math.floor(Math.random() * (max - min + 1) + min); } getOrdersList(count: number) { var year = new Date().getFullYear(), data = []; for(var i = 0; i < count; i++) { let productIdx = this.randomInt(0, 6); let agentIdx = this.randomInt(0, 4); data.push({ orderId: this.randomInt(1, 10000), platform: this.products[productIdx].platform, product: this.products[productIdx].product, agent: this.agents[agentIdx].agent, region: this.agents[agentIdx].region, date: new Date(year - this.randomInt(0, 2), this.randomInt(0, 11), this.randomInt(0, 27)), sales: this.randomInt(10, 50), downloads: this.randomInt(10, 200), revenue: this.randomInt(500, 3500) }); } return data; } }
Данные здесь не имеют реальной ценности; это просто сгенерированные фиктивные данные, чтобы показать функциональность компонентов, поэтому я не собираюсь тратить на это много времени. Важно знать, что у нас есть большой набор данных, причем каждая строка в нашем наборе данных составляет девять различных точек данных.
Теперь, когда приложение настроено, мы можем, наконец, реализовать сводную таблицу Wijmo Angular, PivotGrid.
Откройте файл app.component.ts своего приложения и добавьте следующий код:
import { Component } from '@angular/core'; import { DataService } from './data.service'; import * as wjOlap from '@grapecity/wijmo.olap'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { ng: wjOlap.PivotEngine; constructor(private dataService: DataService) { this.ng = new wjOlap.PivotEngine({ itemsSource: dataService.getOrdersList(1000) }); } }
Как видите, это всего несколько строк кода. Но мы должны объяснить, что здесь происходит. В файле мы инициализируем компонент Wijmo под названием PivotEngine. PivotEngine — это то, что управляет данными, и без PivotEngine элементы управления Wijmo PivotGrid и PivotPanel не смогли бы функционировать. Вы можете думать о PivotEngine как об основе нашей сводной таблицы; без него в таблице не было бы данных для отображения пользователям.
Наряду с инициализацией компонента Wijmo мы также устанавливаем его свойство itemsSource. Это говорит движку: «Эй, это данные, которыми мы хотим, чтобы вы управляли». В случае с этим приложением мы вызываем функцию getOrdersList() из нашего сервиса, которая возвращает 1000 строк данных для загрузки.
Теперь, когда у нас есть данные, загруженные в PivotEngine, пришло время отобразить эти данные на экране.
Настройка PivotPanel и PivotGrid
Теперь, когда PivotEngine настроен, пришло время его использовать. Как мы упоминали в предыдущем разделе, движок — это то, что управляет нашими данными. Итак, чтобы пользователи могли взаимодействовать с данными, нам нужно подключить их к нашим элементам пользовательского интерфейса: PivotPanel и PivotGrid.
Мы упомянули PivotGrid от Wijmo, но ничего не сказали о PivotPanel. Сводная панель — это то, как пользователи напрямую взаимодействуют с отображаемыми данными. Это включает в себя определение того, какие поля данных являются столбцами, строками, фильтрами и полями значений, а также доступ к меню Настройки поля для дальнейшей настройки данных выбранного поля.
Вместо дальнейших объяснений было бы лучше показать вам, что вы можете делать с PivotPanel и PivotGrid. Чтобы добавить их в свое приложение, откройте файл app.component.html и добавьте следующий код:
<div class="flextable"> <wj-pivot-panel [itemsSource]="ng"></wj-pivot-panel> <wj-pivot-grid #pivotGrid [itemsSource]="ng"></wj-pivot-grid> </div>
И это все, что нужно! Это действительно так просто реализовать сводную таблицу Wijmo Angular. Как и в случае с PivotEngine, PivotGrid и PivotPanel должны быть снабжены itemsSource. Однако, в отличие от PivotEngine, эти компоненты не используют простой массив; они берут PivotEngine! Итак, используя переменную ng, которую мы настроили в предыдущем разделе, мы можем назначить ее как itemsSource для обоих компонентов.
И последнее, что нужно сделать перед запуском приложения, это то, что мы хотим добавить немного стиля, чтобы очистить макет. Откройте файл styles.css и добавьте следующее:
.flextable { display: flex; } .wj-pivotpanel { width: 500px; margin: 0px 10px; }
Мы настраиваем приложение так, чтобы PivotPanel и PivotGrid отображались рядом, а также настраиваем ширину PivotPanel, чтобы было больше места для PivotGrid.
Теперь, если вы запустите приложение, вы должны увидеть следующее:
Как видите, в PivotGrid ничего не загружается; этого следовало ожидать. Ничего не будет отображаться, если мы не установим некоторые поля в сводной панели. Давайте исправим это и добавим пару полей:
Как вы можете видеть через сводную панель, мы добавили следующие поля в различные области панели:
Теперь мы можем увидеть разбивку всех показателей продаж по регионам, по агентам и даже по продуктам и платформам.
Последнее, что нужно обсудить, прежде чем двигаться дальше, — это меню Настройки поля. Доступ к этому меню можно получить, щелкнув правой кнопкой мыши любую ячейку в сводной сетке или щелкнув правой кнопкой мыши имя любого поля в сводной панели:
При выборе параметра Настройки поля… откроется модальное окно «Настройки поля»:
Здесь мы можем изменить способ суммирования данных, добавить вычисления (например, % разницы по сравнению с предыдущей строкой), добавить фильтры и даже отформатировать способ отображения данных, который включает предварительный просмотр на основе выбранного формата.
Поскольку это меню настроек поля для поля Продажи, мы просто собираемся изменить формат, чтобы он отображался в денежном формате вместо основного целочисленного формата:
Как видите, он также показывает нам предварительный просмотр обновленного формата. Если мы нажмем кнопку OK, мы должны увидеть следующее:
Как видите, все столбцы Продажи теперь отображаются в денежном, а не в целочисленном формате.
Создание настраиваемых полей
Теперь, когда мы реализовали PivotPanel и PivotGrid, а также рассмотрели основы их использования, пришло время настроить наши данные с помощью PivotEngine. Мы можем сделать это, настроив свойства вручную с помощью PivotEngine, вместо того, чтобы позволять ему генерировать их автоматически.
Откройте файл app.component.ts и добавьте следующее:
this.ng = new wjOlap.PivotEngine({ itemsSource: dataService.getOrdersList(1000), fields:[ { binding: 'date', header: 'Quarter', format: '\"Q\"q yyyy' }, { binding: 'date', header: 'Month', format: 'MMMM' }, { binding: 'agent', header: 'Agent' }, { binding: 'region', header: 'Region' }, { binding: 'platform', header: 'Platform' }, { binding: 'product', header: 'Product' }, { binding: 'sales', header: 'Sales', format: 'c2' }, { binding: 'downloads', header: 'Downloads', format: 'n0' }, { binding: 'revenue', header: 'Revenue', format: 'c2' }, ] });
Как видите, свойство fields принимает массив объектов, который используется для создания различных полей, которые пользователи могут выбирать в сводной панели. По умолчанию эти объекты должны иметь только два свойства: свойство binding и свойство header. Свойство привязки сообщает движку, к какому имени свойства будет привязано это поле. Для Агент, Регион, Платформа и Продукт это единственные свойства, которые мы устанавливаем.
Однако есть еще одно свойство, которое мы можем установить: свойство format. Подобно тому, как пользователи могут использовать меню «Настройки поля» для изменения форматирования, разработчики могут установить формат по умолчанию, в котором мы хотим отображать поле.
Наряду с настройкой формата мы можем фактически создать несколько полей из одной и той же точки данных и установить разные форматы для обоих. В этом приложении мы настраиваем квартальные и месячные поля даты. Теперь, если мы сохраним это и откроем приложение, мы выберем несколько полей, и вы должны увидеть следующее:
Как видите, мы создали квартальные и месячные поля, используя одну точку данных. Теперь пользователи могут просматривать еще более подробную разбивку данных о продажах по кварталам и месяцам.
Использование сводных диаграмм для отображения данных в форме диаграммы
Наряду со сводной таблицей Wijmo Angular, PivotGrid, Wijmo также предлагает элемент управления PivotChart для работы в сочетании с PivotPanel и PivotGrid. Как и сводная сетка, сводная диаграмма будет автоматически обновляться, чтобы отражать изменения в областях сводной панели.
Добавить сводную диаграмму так же просто, как добавить сводную сетку и сводную панель. Откройте файл app.component.html и измените его следующим образом:
<div class="flextable"> <wj-pivot-panel [itemsSource]="ng"></wj-pivot-panel> <wj-pivot-grid #pivotGrid [itemsSource]="ng"></wj-pivot-grid> </div> <wj-pivot-chart #pivotChart [itemsSource]="ng" [showTitle]=true [showLegend]="'Auto'"></wj-pivot-chart>
Вот и все! Мы передаем PivotEngine в качестве источника элементов для сводной диаграммы. Теперь, если вы сохраните приложение и перезагрузите его, если вы добавите какие-либо поля в область значений, вы увидите их отражение в сводной диаграмме. Взгляните на изображение ниже:
Как видите, мы установили поля Квартал и Платформа как поля строк, а затем Продажи и Загрузки fields как поля значений. Затем сводная диаграмма показывает разбивку, подобно тому, как это делает сводная сетка, данных, которые мы выбрали в сводной панели.
Заключение
И с этим мы подошли к концу. В этой статье мы рассмотрели некоторые преимущества использования сводных таблиц Angular, а также то, как вы можете использовать Wijmo для реализации собственной сводной таблицы, сводной диаграммы и сводной панели для управления данными.
Если вы хотите попробовать Wijmo, вы можете загрузить всю библиотеку компонентов пользовательского интерфейса, доступную на чистом JavaScript, Angular, React и Vue, здесь.
Удачного кодирования!
Хотите внедрить сводные веб-таблицы и диаграммы в стиле Excel? Скачай Wijmo сегодня!
Первоначально опубликовано на https://www.grapecity.com 21 ноября 2022 г.