Журнал ВРМ World

Мировая история развития технологий управления эффективностью бизнеса – обзоры зарубежных публикаций

Сложные OLAP-операции

Во второй статье речь пойдет о некоторых оригинальных алгоритмах
OLAP-операций, реализованных в программной компоненте ContourCube, на базе
которой построены все продукты Аналитической платформы Контур компании
Intersoft Lab.

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

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

В этой статье рассказывается о нескольких оригинальных алгоритмах, содержащихся в OLAP-компоненте ContourCube, на базе которой разработаны все продукты Аналитической платформы Контур компании Intersoft Lab.

Сортировка по измерениям

В компоненте ContourCube куб и отображающая его OLAP-таблица отсортированы всегда. В этом смысле сортировка является не операцией, а состоянием. Поэтому пользователь должен задать алгоритм сортировки, и при выполнении стандартных операций поворотов и группировок данные будут выдаваться отсортированными по этому алгоритму.

Для измерений можно задать только один параметр сортировки - направление: по убыванию или возрастанию. Строчные измерения сортируются по алфавиту, а даты - в хронологическом порядке (см. рис. 1). При этом, для каждого измерения можно задать собственный порядок сортировки.



Рис. 1. Сортировка по всем измерениям в порядке возрастания

Сортировка является общей операцией для всей OLAP-таблицы. В заданном для измерений порядке рекурсивно сортируются их собственные значения, все дочерние измерения и факты (см. рис. 2).


Рис. 2. Измерение Год (Year) отсортировано по убыванию, а Квартал (Quarter) по возрастанию

Сортировка по фактам

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

Другими словами в этом режиме переставляются измерения: строки или колонки - по возрастанию или убыванию фактов в заданной колонке или строке. Режим сортировки: по возрастанию или убыванию - задается для каждого измерения, но не для факта.

Рассмотрим следующий пример: пусть у нас имеется таблица, в которой в области строк расположено измерение Товар (Product), в области колонок - Год (Year), а фактом является сумма продаж (см. рис. 3). Чтобы отсортировать товары в порядке уменьшения объемов продаж в 2002 году, нужно поместить курсор в колонку 2002 год и задать режим сортировки строк по фактам. Если курсор находится в колонке 2001 год, то товары отсортируются так, как они продавались в 2001 году.




Рис. 3. Продукты (строки) отсортированы в порядке уменьшения объемов продаж в 2002 году (колонки)


Если же, находясь на товаре Фрукты (Fruits), задать режим сортировки колонок по фактам, года будут переставлены в порядке убывания продаж фруктов.




Рис. 4. Годы (колонки) отсортированы в порядке уменьшения объемов продаж фруктов (значения строчного измерения)

В OLAP-машине ContourCube поддерживается 2 режима сортировки по фактам: рекурсивный - для всех измерений, и единичный - для заданного измерения. (Режим сортировки по фактам сортирует измерения!) В рекурсивном режиме по заданному факту все измерения сортируются единым образом. В единичном режиме можно отсортировать родительское измерение, не затрагивая дочерние измерения. Например, Продукты отсортированы в порядке уменьшения продаж, а под каждым продуктом магазины, в которых этот продукт продавался, отсортированы по алфавиту. В силу того, что методы управления этим алгоритмом (нужно задать сразу несколько параметров сортировки) могут быть неочевидны для рядового пользователя, он не был реализован в текущей версии визуальной компоненты.

Ранжирование

Ранжирование - это вычисление места элемента измерения по отношению к другим элементам измерений по заданному факту. Примером ранжирования является таблица с результатами спортивных соревнований, выборов, рейтингов банков по капиталу и прочее, где вместо количественных показателей отражается место: первое, второе, третье и так далее. С помощью ранжирования можно очень наглядно показывать лучшие магазины по продажам, годы по урожаю и тому подобное. При этом, исходный факт может как присутствовать рядом с номером в списке, так и быть исключенным из отчета (см. рис. 5 и 6, соответственно). Этот алгоритм, вероятно, из-за крайней сложности для проектирования и реализации, встречается редко и реализован, как правило, в виде команды на формирование статического отчета.

В ContourCube используется оригинальная методика динамического многомерного ранжирования. При этом Ранг является вычисляемым фактом. Он генерируется по заданному факту и остается в кубе навсегда (в случае сохранения куба) или до завершения сеанса работы пользователя. После появления такого факта над ним можно выполнять все стандартные или расширенные OLAP-операции. При этом значение факта вычисляется динамически с учетом установленных фильтров, направлений сортировки и так далее.

Ранжирование, как и сортировка по факту, является несимметричной операцией. Другими словами, оно выполняется вдоль заданного направления: по колонкам или по строкам. Вот почему было введено новое для OLAP понятие - Главная ось. Главная ось указывает, в каком направлении выполняются все несимметричные операции, в том числе и ранжирование.



Рис. 5. Ранжирование по объемам продаж - вычисляемый факт Ранг создан на основе факта Сумма продаж. По факту Ранг за 2001 год отсортированы строки. Отчет показывает лучшие товары 2001 года по продажам

Из рисунка 5 видно, что итоги по годам отсутствуют, но есть итоги по товарам. Это - эффект задания Главной оси по колонкам. Итоги по товарам показывают суммарное место товаров по результатам продаж за 3 года. Итог по году не имеет смысла.



Рис. 6. Кроме ранга в таблице показана Сумма продаж (Amount). По факту Ранг (Rank), вычисленному на базе факта Сумма, отсортированы колонки по строке Рыба (Fish). Отчет показывает лучшие годы по продажам рыбы

Реализация Ранга как вычисляемого факта дает системе огромную аналитическую мощность. По отношению к рангу работает не только сортировка, но и группировка, углубление в данные. При этом внутри каждой группы автоматически рассчитываются места внутри группы (см. рис. 7).



Рис. 7. Иерархическое ранжирование. Отчет показывает места стран по объемам продаж в 2000 году, лучшие товары по продажам в США и сорта рыбы, которые продавались лучше всего в этой стране

Заключение

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

Автор: Владимир Некрасов, технический директор компании Intersoft Lab