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.
Połączenie z bazą danych dla kostki OLAP :
Połączenie z bazą danych dla kostki OLAP

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.
Mapowanie tabel Oracle :
Mapowanie tabel Oracle

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,###).
Tworzenie miar w Pentaho Cube Designer:
Tworzenie miar w Pentaho Cube Designer

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.

Tworzenie Wymiarów:
Tworzenie Wymiarów


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

Szkolenia, usługi konsultingowe i wdrożenia systemów Business Intelligence, hurtowni danych, raportowania i implementacja procesów ETL.