Расширяемость
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',
...
});