Tworzenie cube’ów Mondrian za pomocą aplikacji Pentaho Cube Designer
Plik konfiguracyjny Mondrian Cube
W celu stworzenia własnego modelu danych w Pentaho należy zdefiniować źródło i konfigurację kostek OLAP w pliku konfiguracyjnym Mondrian Cube Schema. Plik ten opisuje wymiary, hierarchię wymiarów, poziomy, definiuje fakty i mapuje cube OLAP na relacyjną bazę danych.
Plik konfiguracyjny schematu Mondrian jest plikiem XML, który można utworzyć własnoręcznie. Może to się jednak okazać bardzo trudne i czasochłonne, dlatego też warto wykorzystać aplikację open source o nazwie Pentaho Cube Designer, która znacznie powinna ułatwić stworzenie definicji kostki wielowymiarowej OLAP.
Aplikacja ta jest bardzo pomocna w tworzeniu definicji kostek OLAPowych, jednak niestety bieżąca wersja (Pentaho Cube Designer 0.7.2.0) nie wspiera bardziej zaawansowanych właściwości modeli danych. Na dzień dzisiejszy z poziomu Cube Designer nie ma możliwości tworzenia agregatów, współdzielonych wymiarów czy wielu kostek OLAP w jednym pliku definicji schematu.
Najprostszym uzupełnieniem tych braków jest więc z pewnością użycie Cube Designer do tworzenia mniej skomplikowanych modeli i mapowań, a zaawansowane opcje trzeba wtedy dodawać manualnie bezpośrednio edytując plik XML.
Pomimo wszystko, Pentaho Cube Designer jest bardzo użyteczną aplikacją wspierającą i upraszczającą tworzenie wielowymiarowych modeli danych w środowisku Pentaho.
Poniżej zawarte zostały instrukcje krok po kroku jak stworzyć kostkę OLAP serwera Mondrian wykorzystując Pentaho Cube Designer.
W poniższym przykładzie użyta została architektura płatka śniegu hurtowni danych:
Przykładowy schemat płatka śniegu
W kostce OLAP (cube) będą zawarte następujące dane:
- Trzy pola faktów – Sprzedaż (Sales), Koszty (Costs) i Upusty (Discounts)
- Wymiar czasu (TIME) – z następującą hierarchią: Rok, kwartał, miesiąc
- Dwa wymiary klienta (CUSTOMER) – jeden zawierający dane o lokalizacji (Region, Kraj) a drugi z klasyfikacją grupy i nazwy klienta (CUSTOMER_GROUP i CUSTOMER_NAME)
- Wymiar produktu (PRODUCT) – zawierający nazwę produktu (PRODUCT_NAME)
1. Podstawowe informacje o kostce OLAP oraz definicja połączenia z bazą danych
Pierwszym krokiem konfiguracyjnym kostki OLAP Mondrian jest wprowadzenie jej nazwy i opisu. Nazwa powinna być możliwie krótka i trafnie opisywać zawarte w niej dane. Nazwa ta będzie używana w definicjach i plikach konfiguracyjnych pozostałych komponentów platformy Pentaho BI.
Dolna sekcja (select a data source) ekranu pozwala na zdefiniowanie połączenia z bazą danych dla danych źródłowych. Kreator połączenia ułatwia znacznie zdefiniować poprawnie komunikację z bazą danych i pozwala również na przetestowanie nowo powstałego połączenia.
W niniejszych lekcjach stworzony został cube o nazwie EtlTools_Sales, połączenie zostało nazwane DwDev oraz użyta została baza danych Oracle jako źródło danych.

2. Definicja relacyjnego modelu danych źródłowych
Na ekranie mapowania tabel (Map Tables) można odzwierciedlić relacyjny model danych źródłowych, z którego zasilona zostanie kostka OLAP. Powiązania pomiędzy tabelami mogą być w bardzo łatwy sposób tworzone poprzez przeciąganie kolumn kluczowych pomiędzy tabelami, natomiast pola docelowe mogą być wybierane poprzez zaznaczenie pola występującego obok.
W tym miejscu można również definiować warunki filtrujące dane (WHERE), grupowanie (GROUP BY) i sortowanie (ORDER BY)
Poniżej przedstawiony został relacyjny model reprezentujący schemat płatka śniegu w architekturze hurtowni danych.

3. Wybór tabeli faktów i utworzenie miar (measures)
Kolejnym krokiem po wybraniu i skonfigurowaniu tabel źródłowych będzie wskazanie tabeli faktów i wybór pól do sumaryzacji. W niniejszym tutorialu użyte zostały następujące pola numeryczne: Sprzedaż (TOTAL_SALES), Koszty (TOTAL_COSTS) i Upusty (TOTAL_DISCOUNT)
Można również wybrać metodę agregacji i poza domyślnym sumowaniem dostępna jest także średnia arytmetyczna (AVG), zliczanie rekordów (COUNT), wartość minimalna i maksymalna dla danej grupy (MIN, MAX). W tym miejscu definiuje się również format wyświetlania wartości liczbowych (domyślnie jest to # ##0,###).

4. Tworzenie wymiarów
W tym kroku zdefiniowane zostaję wymiary w kostce wielowymiarowej. W celu stworzenia nowego wymiaru należy wybrać kolumnę z obszaru ‘source fields’ i kliknąć ‘Add New Dimension’. Należy pamiętać o tym, żeby na początku wybrać pole o największym grupowaniu i schodzić zgodnie z hierarchią do pól szczegółowych.
Przykładowo, dla stworzenia wymiaru czasu najpierw wybieramy rok (kolumna YEAR_ID), następnie klikamy ‘Add New Dimension’, nazywamy go TIME i zatwierdzamy przyciskiem OK. Kolejno wybieramy odpowiednio pola kwartał i miesiąc (QUARTER_ID, MONTH_ID) i klikamy na przycisku strzałki zwróconej w prawo, co powoduje tworzenie nowych poziomów w wymiarze czasu.

5. Zapisanie pliku schematu OLAP Mondrian
Po kliknięciu przycisku ‘View XML’ wyświetlona zostanie zawartość nowo utworzonego pliku XML z definicją kostki OLAP. W przypadku wykrycia nieścisłości w pliku, w każdej chwili można cofnąć się do każdego z poprzednich kroków za pomocą przycisku ‘Back’ i wprowadzić zmiany. Jeżeli wszystko wygląda zgodnie z naszymi oczekiwaniami, to klikamy na przycisk ‘Finish’, co spowoduje wygenerowanie pliku w żądanym miejscu.
Plik definicji schematu dla naszego tutoriala nazywa się ETLTOOLS_SALES.mondrian.xml i ma następującą zawartość:
<?xml version="1.0" encoding="UTF-8"?> <Schema name="ETLTOOLS_SALES"> <Cube name="ETLTOOLS_SALES"> <Table name="F_SALES"/> <Dimension name="TIME" foreignKey="DATE_ID"> <Hierarchy name="TIME" hasAll="true" allMemberName="All time" primaryKey="DATE_ID"> <Table name="D_TIME"/> <Level name="YEAR" table="D_TIME" column="YEAR_ID" uniqueMembers="false"/> <Level name="QUARTER" table="D_TIME" column="QUARTER_ID" uniqueMembers="false"/> <Level name="MONTH" table="D_TIME" column="MONTH_ID" uniqueMembers="false"/> </Hierarchy> </Dimension> <Dimension name="PRODUCT" foreignKey="PROD_ID"> <Hierarchy name="PRODUCT" hasAll="true" allMemberName="All product" primaryKey="PROD_ID"> <Table name="D_PRODUCT"/> <Level name="PRODUCT_NAME" table="D_PRODUCT" column="PROD_TEXT" uniqueMembers="false"/> </Hierarchy> </Dimension> <Dimension name="CUSTOMER_LOCATION"> <Hierarchy name="CUSTOMER_LOCATION" hasAll="true" allMemberName="All customer_location"> <Table name="D_COUNTRY"/> <Level name="CUSTOMER_REGION" table="D_COUNTRY" column="REGION_TEXT" uniqueMembers="false"/> <Level name="CUSTOMER_COUNTRY" table="D_COUNTRY" column="COUNTRY_TEXT" uniqueMembers="false"/> </Hierarchy> </Dimension> <Dimension name="CUSTOMER" foreignKey="CUST_ID"> <Hierarchy name="CUSTOMER" hasAll="true" allMemberName="All customer" primaryKey="CUST_ID"> <Table name="D_CUSTOMER"/> <Level name="CUSTOMER_GROUP" table="D_CUSTOMER" column="CUST_GROUP_ID" uniqueMembers="false"/> <Level name="CUSTOMER_NAME" table="D_CUSTOMER" column="CUST_NAME" uniqueMembers="false"/> </Hierarchy> </Dimension> <Measure name="TOTAL_SALES" column="TURNOVER_EUR" aggregator="sum" datatype="Numeric" formatString="# ##0,###"/> <Measure name="TOTAL_COSTS" column="SALES_COSTS_EUR" aggregator="sum" datatype="Numeric" formatString="# ##0,###"/> <Measure name="TOTAL_DISCOUNT" column="SALES_DISCOUNT_EUR" aggregator="sum" datatype="Numeric" formatString="# ##0,###"/> </Cube> </Schema>
Szkolenia Business Intelligence