Для тех, кто хочет большего

Расширяемость

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',
    ...
});