Объединение двух кубов в один на Pentaho
Mondrian позволяет объединять кубы по измерениям. В результате создается виртуальный куб по этим измерениям.
Нам надо разобраться с двумя вопросами:
- Как происходит объединение на уровне схемы?
- Как ведет себя куб при несовпадении измерений, и как ведет себя расчет мер? Это проще описать на примере: в магазине №1 30 декабря 1997 года была продажа товара “продукт 1” на 30 руб., а его себестоимость - 29 руб. - попала в нашу базу 31 декабря 1997. Каким образом в виртуальном кубе будет рассчитываться прибыль 30 и 31 декабря?
На практике объединение кубов происходит следующим образом. Прибыль 30 декабря по товару “продукт 1” составит 30 - 0 = 30, Прибыль 31 декабря по “продукту 1” будет 0 - 29 = - 29. Прибыль за 30 - 31 декабря - составит 30 - 29 = 1.
Схема куба
Начнем разбираться, как происходит объединение кубов на уровне схемы.
<Schema name="two_virtual_cube_test" description="two virtual cube"> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="Store" description="Store name"> <Hierarchy name="Store" visible="true" hasAll="true" primaryKey="id_dim_store" description="Store"> <Table name="dim_store" schema="test" /> <Level name="Store" visible="true" column="store_name" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" caption="Store name" description="Store" /> </Hierarchy> </Dimension> <Dimension type="TimeDimension" visible="true" highCardinality="false" name="Time"> <Hierarchy name="Time" visible="true" hasAll="true" primaryKey="id_dim_time"> <Table name="dim_time" schema="test" /> <Level name="Year" visible="true" column="year" type="String" uniqueMembers="false" levelType="TimeYears" hideMemberIf="Never" /> <Level name="Month" visible="true" column="month" type="String" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="Never" caption="Month" description="Month" /> <Level name="Day" visible="true" column="day" type="String" uniqueMembers="false" levelType="TimeDays" hideMemberIf="Never" caption="Day" description="Day" /> </Hierarchy> </Dimension> <Cube name="sale_fact" caption="sale_fact" visible="true" description="sale_fact" cache="true" enabled="true"> <Table name="fact_sale" schema="test" /> <DimensionUsage source="Store" name="Store" visible="true" foreignKey="id_dim_store" highCardinality="false" /> <DimensionUsage source="Time" name="Time" visible="true" foreignKey="id_dim_time" highCardinality="false" /> <Measure name="Sum_sale" column="sum_sale" aggregator="sum" description="Sum sale" visible="true" /> </Cube> <Cube name="cost_sale" caption="cost_sale" visible="true" description="cost_sale" cache="true" enabled="true"> <Table name="fact_cost" schema="test" /> <DimensionUsage source="Store" name="Store" visible="true" foreignKey="id_dim_store" highCardinality="false" /> <DimensionUsage source="Time" name="Time" caption="Time" visible="true" foreignKey="id_dim_time" highCardinality="false" /> <Measure name="Sum_cost" column="sum_cost" aggregator="sum" description="Sum cost" visible="true" /> </Cube> <VirtualCube enabled="true" name="Profit" caption="Profit" description="Profit"> <VirtualCubeDimension cubeName="sale_fact" caption="Time" name="Time" /> <VirtualCubeDimension caption="Store" name="Store" /> <VirtualCubeMeasure cubeName="sale_fact" name="[Measures].[Sum_sale]" visible="true" /> <VirtualCubeMeasure cubeName="cost_sale" name="[Measures].[Sum_cost]" visible="true" /> <CalculatedMember name="Profit" formatString="" caption="Profit" formula="[Measures].[Sum_sale] - [Measures].[Sum_cost]" dimension="Measures" visible="true" /> </VirtualCube> </Schema>
Практически все мы с вами уже разбирали (см. урок рассмотрение OLAP куба в системе Pentaho). Осталось разобрать саму конструкцию VirtualCube. Поехали!
Объявление витруального куба
<VirtualCube enabled="true" name="Profit" caption="Profit" description="Profit">
<VirtualCube>...</VirtualCube> описание представлено на языке xml, которое говорит, что мы будем в схеме использовать виртуальный куб. enabled="true" - куб будет доступен в системе и name="Profit" - имя куба. <CubeUsages> - это не обязательная конструкция, поэтому здесь её рассматривать не будем.
Добавление измерений в виртуальный куб
Измерения задаются тегом <VirtualCubeDimension>.
Начнем с <VirtualCubeDimension caption="Store" name="Store" />. Эта запись говорит о том, что объединение производится по внешнему измерению "Store", причем должно совпадать написание name в тегах VirtualCubeDimension и Dimension. Другими словами, "Store" в общем измерении должен быть написан так же, как и в VirtualCubeDimension.
Второй вариант - это: <VirtualCubeDimension cubeName="sale_fact" caption="Time" name="Time" />. Данная запись говорит о том, что происходит объединение измерения "Time", которое присутствует в кубе "sale_fact". Так как измерение name="Time" является внешним для куба "sale_fact", то весь тег <VirtualCubeDimension cubeName="sale_fact" caption="Time" name="Time" /> эквивалентен <VirtualCubeDimension caption="Time" name="Time" />.
Меры
Меры начинаются с тега <VirtualCubeMeasure>.
<VirtualCubeMeasure cubeName="sale_fact" name="[Measures].[Sum_sale]" visible="true" />
Теперь мы должны знать, из какого куба берется измерение. За это отвечает параметр cubeName. Мы из куба "sale_fact" должны взять измерение с именем name. Заметим, что имя должно задаться на языке MDX. Берем меру [Sum_sale] из куба sale_fact.
Дополнительно в кубе задаем вычисляемую меру.
<CalculatedMember name="Profit" formatString="" caption="Profit" formula="[Measures].[Sum_sale] - [Measures].[Sum_cost]" dimension="Measures" visible="true" />
Мы уже с вами это тоже рассматривали (см. урок рассмотрение OLAP куба в системе Pentaho).
Теперь можно приступать к практике. Предлагаю вам следующее видео (Практика объединения виртуальных кубов), где мы проверим поведение виртуального куба и заодно ознакомимся с инструментами PDI, schema-workbench и опубликуем куб на сервере.
Дополнение к уроку
Материалы к видео (Загрузка/Download)
План видео /Video plan (ссылка на youtub http://youtu.be/n34nrlBWCnc)
Как сделать виртуальный куб в Pentaho Schema Workbench / How to do the virtual cube in the program Pentaho Schema Workbench
00:00 Введение / Introduction
01:21 Проверка наличия данных / Check of the data
02:03 ER схема БД / ER schema of the database
02:14 Добавление подключения / Add Connection
04:30 Добавление измерений /Adding dimensions
09:17 Добавление первого OLAP куба / Adding the first OLAP cube
12:05 Добавление второго OLAP куба / Adding the second OLAP cube
14:57 Создание виртуального OLAP куба /Create the virtual OLAP cube
16:23 Создание мер виртуального OLAP куба / Creating measures of the virtual OLAP cube
19:51 Публикация куба /The cube publication
Ссылки и литература:
- «Mondrian 3.0.4 Technical Guide».
-
How to Design a Mondrian Schema (Выдержки из мануала по Mondrian) http://www-master.ufr-info-p6.jussieu.fr/2009/Ext/naacke/mondrian/doc/schema.html
- Подробности
- Опубликовано: 23 Январь 2014
- Просмотров: 5017