Расширяемость
OLAP куб написан таким образом, что мы легко можем внедриться в самые узкие места процессов расчета и отрисовки элементов.
Создание агрегатов
По умолчанию все данные в OLAP кубе суммируются. Имеется механизм позволяющий программировать данный процесс.
Сумма нескольких мер в одном источнике:
{ header: "Сумма по годам", dataIndex: "sum", type: "decimal", area: "data", aggregate: function(data, value, rec, field){ data.value += (rec['data_2012'] + rec['data_2013'] + rec['data_2014']) } }
Расчет процента от меры:
{ header: "Процент", dataIndex: "percent", type: "decimal", area: "data", aggregate: function(data, value, rec, field){ data.value += (rec['data'] / 100 * 13.5) } }
Создание сортировок
Для начала, необходимо зарегестрировать описание сортировки:
ui.ArraySorters['custom_sort'] = { cls: 'custom_cls', // CSS класс иконки сортировки sort: function(arr){ arr.sort(function(){ // Механизм сортировки }); } };
Создадим класс поля с новой сортировкой:
ui.define({ name: 'custom.olap.Field', type: 'custom.olap.field', base: 'olap.field', data: { getSorters: function(){ // ['ASC', 'DESC'] сортировки по умолчанию var sorters = this.base(); if(true){ // Добавляем сортировку sorters.push('custom_sort'); } return sorters; } } });
Перекроем класс поля в кубе:
ui.instance({ type: 'olap', fieldType: 'custom.olap.field', ... });