Работа с eMondrian
Таблица 1. – Основные элементы схемы.
Элемент схемы
Назначение
Расположение
<Schema>
Коллекция кубов, виртуальных кубов, общих измерений и ролей.
Основной элемент, все остальные расположены внутри него, идет сразу после декларации XML
<Cube>
Набор измерений, сосредоточенных в таблице фактов.
Располагается внутри <Schema>
<VirtualCube>
Куб, определяемый путем объединения измерений одного или нескольких кубов.
Располагается внутри <Schema> после кубов
<Dimension>
Измерение.
Локальное измерение располагается в <Cube> и будет доступно для данного куба,
Глобальное измерение располагается в <Schema> и его можно использовать в нескольких кубах
<Hierarchy>
Иерархия.
Находится в <Dimension>, название первой иерархии должно совпадать с названием измерения
<Level>
Уровень иерархии.
Находится в <Hierarchy>; уровни иерархии нужно располагать последовательно друг за другом
<Measure>
Мера.
Располагается в <Cube>
<CalculatedMember>
Вычисляемый элемент, значение которого выводится с использованием формулы.
Располагается в <Cube>
<CalculatedMember>
Вычисляемый элемент, значение которого выводится с использованием формулы.
Располагается в <Cube>
<Table>
Таблица фактов или измерений.
Располагается внутри <Cube> или <Dimension> перед другими элементами
Рисунок 1 (а, б). – Подключение в Excel.
а) - выбор From Analysis Services.
б) -адрес службы Mondrian
Рисунок 2. – Работа eMondrian.
select <список уровней нужных измерений>, <список агрегатов>
from <список через запятую таблиц фактов и справочников>
where <условия объединения > and <условия для фильтрации>
group by <по всем нужным уровням измерений>
Таблица 2. – Формирование условия фильтрации
Фильтр
Вид условия
Когда одно значение в фильтре
колонка = значению
Когда несколько значений в фильтре
колонка in (значение1, значение2)
Когда одно значение выбрано в иерархии
колонка выше по уровню = значению для уровня выше and колонка = значению
Когда несколько значений выбраны в иерархии
((колонка выше по уровню = значению для уровня выше and колонка = значение1) or (колонка выше по уровню = значению для уровня выше and колонка = значение2))
select from [Movement]
where ([Measures].[Movement quantity])
select
sum("v_fct_movement_test_olap"."sale_quantity") as "m0",
sum("v_fct_movement_test_olap"."cost_quantity") as "m1"
from
(select sale as sale, quantity as sale_quantity, 0 as cost, 0 as cost_quantity, did, store_id, good_id, manufacturer_id from dbo.fct_sales_test_olap
union all
select 0 as sale, 0 as sale_quantity, cost as cost, quantity as cost_quantity, did, store_id, good_id, manufacturer_id from dbo.fct_income_test_olap) as "v_fct_movement_test_olap"
select NON EMPTY Hierarchize(AddCalculatedMembers({DrilldownLevel({[Store].[All Stores]})})) DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS,
NON EMPTY Hierarchize(AddCalculatedMembers(DrilldownMember({{DrilldownLevel({[Date].[All Date]})}}, {[Date].[2021]}))) DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON ROWS
from [Movement]
where ([Measures].[Movement quantity])
Рисунок 3. – Результат расчета в Excel.
Тестирование
Измерение календарь имеет иерархию Год-Квартал-Месяц-День, изначально имела несколько иерархий, но при наличии нескольких иерархий, расчетный остаток вычислялся корректно только для первой иерархии, поэтому было принято решение оставить только одну.
Справочник «группы номенклатур» было принято реализовать как одну из частей иерархии «номенклатур». Так как группы номенклатур имеют связь с фактами только через номенклатуру. Изначально в схеме было предпринято объединение номенклатур с группами номенклатур, используя XML-элемент <Join>, но во время подключения к Excel начала выскакивать ошибка, что в измерении используется две таблицы, поэтому было принято решение создать самостоятельно запрос для объединения двух справочников, используя XML-элементы <View> и <SQL>.
Кубы продаж и поставок являются простыми кубами, связанные с соответствующими таблицами фактов, которые были предназначены для проверки агрегатов для подсчета мер. Куб товарооборот и виртуальный куб «продаж и поставок» имеют одно и тоже предназначение: расчет мер (продаж, поставок и товарооборота) и вычислительных элементов расчетного остатка и расчетного счета.
В ходе работы каждый куб в схеме был отдельно протестирован на:
Результаты тестирования, по каждому критерию для всех вышеописанных кубов, приведены ниже в таблице 3.
Таблица 3. – Сравнение кубов по заданным критериям
Критерий\Название куба
Продажи
Поставки
Товарооборот
Продажи и поставки
Корректность получаемых значений
Соответствуют
Соответствуют
Соответствуют
Некорректно при множественной фильтрации
Время расчета
Приемлемое, но растет от сложности и количества посылаемых запросов к базе
Приемлемое, но растет от сложности и количества посылаемых запросов к базе
Приемлемое, но растет от сложности и количества посылаемых запросов к базе
Приемлемое, но координально растет по причине формирования некорректных запросов
Нагружаемость сервера
От 10% до 70%, зависит от количества и сложности вычислений запроса
От 10% до 70%, зависит от количества и сложности вычислений запроса
От 10% до 80%, зависит от количества и сложности вычислений запроса
От 10% до 100%, если формирует некорректные запросы
Нагружаемость компьютера
Центральный процессор до 30% при сложных вычислениях
Центральный процессор до 30% при сложных вычислениях
Центральный процессор до 30% при сложных вычислениях
Центральный процессор до 30% при сложных вычислениях
Эффективность посылаемых запросов
Составляет корректные запросы, но неоптимальные
Составляет корректные запросы, но неоптимальные
Составляет корректные запросы, но неоптимальные
Посылает некорректные запросы при множественной фильтрации
Нагружаемость компьютера в основном происходит при получении и при расчете значений, записи их в кэш, а также при формировании ответа Excel.
Нагружаемость сервера связана с количеством и сложностью посылаемых запросов, а также с параллельными вычислениями от других обращений к базе.
Основными кубами для тестирования являются куб «товарооборота» и виртуальный куб «продаж и поставок». Виртуальный куб не оправдал своих возможностей: когда происходит расчет мер, eMondrian посылает запросы в виде перекрестного соединения таблицы фактов со справочниками, но когда нужно рассчитать несколько мер из разных кубов, в таких случаях он составляет запрос, в котором должны перекрестно соединяться все необходимые таблицы фактов со справочниками, но данные запросы составляются некорректно:
Куб товарооборот был реализован с использованием xml-элементов схемы <View> и <SQL> с помощью которых был создан запрос для объединения таблиц фактов продаж и поставок, а значения товарооборота являлись вычисляемыми элементами, также был создан его аналог, где было создано представление в хранилище, в котором вычислялись значения товарооборота и с которым велась работа как с таблицей фактов, но во время тестирования данный аналог давал такие же результаты, но время расчета было немного больше.
Расчетный остаток вычислялся с помощью алгоритма накопительного итога, было протестированы три разных вариации алгоритма и их результаты, представленные в таблице 4.
Алгоритм накопительного итога в MDX можно описать следующим образом: возвращает сумму значения выражения (в данном случае мера), вычисленное по набору (в данном случае диапазон дат от начала до текущего значения).
Таблица 4. – Альтернативы расчета диапазона дат для накопительного итога
Подход к расчету
Результат
NULL – как начало времен для диапазона дат
Ошибка, так как в данном диалекте MDX нет NULL
PeriodsToDate – рассчитывает диапазон дат, от начала до текущего значения
Корректно работал, но перестал на сложных запросах с множественной фильтрацией
OpeninigPeriod – как начало для диапазона дат
Корректно работает
По умолчанию мера имеет тип Numeric, но для каждой меры можно задать один из трех типов: String, Integer, Numeric; а также можно задать формат отображения. В качестве разделителя тысячных разрядов используется «,», примеры встроенных форматов, для значения 12342345.25:
Существует возможность использовать свои форматы, создаваемые через подключаемые модули, более подробно об этом можно ознакомиться в соответствующем разделе документации.
Тоже самое касается языков: значения на русском языке, хранящиеся в базе, отображаются в Excel корректно, но, когда в схеме имеются названия иерархий, измерений, мер, кубов имена которых используют кириллицу, то они отображаются некорректно. В документации на эту тему написано, что можно создать и подключить свой драйвер локализации.
Заключение
В данной работе был произведен анализ продукта eMondrian, была проверена основная часть функционала, в результате можно выделить преимущества и недостатки данного программного продукта.
Преимущества:
Недостатки:
Разработчики оригинального Mondrian для быстрой и корректной работы советуют перенести всю вычислительную логику в базу, использовать агрегированные таблицы, а также логика куба должна соответствовать схеме звездочка.
Мнение о продукте: интересный инструмент для обращения базы как к кубу, можно использовать, если нужно просматривать/анализировать данные для несложных структур моделей, а также, если для анализа необходимы несложные MDX-запросы.
Личные советы, проверенные при работе: