Premessa ............................................................................................................ 3 1 2 Dominio applicativo ....................................................................................... 3 Analisi e riconciliazione delle fonti dati .......................................................... 4
2.1 Ricognizione degli schemi .............................................................................................. 4
2.1.1 2.1.2
2.2 2.3
Preintegrazione .................................................................................. 7 Comparazione degli schemi ................................................................ 7 Allineamento degli schemi .................................................................. 8 Fusione e ristrutturazione degli schemi .............................................. 9 Definizione delle corrispondenze ........................................................ 9
Progettazione concettuale............................................................................ 11
3.1 3.2 3.3 3.4 3.5 Definizione dei fatti ..................................................................................................... 11 Costruzione dellalbero degli attributi........................................................................... 11 Potatura ed innesto ..................................................................................................... 12 Definizione delle dimensioni e delle misure .................................................................. 12 Creazione dello schema di fatto ................................................................................... 12
5 6 7
Progettazione dellalimentazione .................................................................. 15 Creazione cubo multidimensionale e query MDX ......................................... 23 Navigazione cubo multidimensionale Mondrian con JPivot .......................... 29
7.1 7.2 7.3 7.4 7.5 Query MDX ................................................................................................................. 29 Vista aggregata del cubo con JPivot ............................................................................. 30 Il navigatore olap ........................................................................................................ 31 Costo testing per anni rispetto a tutti i tecnici e manutenzioni ..................................... 32 Costo testing per tecnici rispetto a tutti gli anni e manutenzioni ................................... 33
Bibliografia e sitografia...................................................................................... 34
Premessa
Lo scopo del lavoro che seguir quello di realizzare e progettare un data mart esclusivamente per scopi didattici. Per questo motivo non saranno sviluppate nel dettaglio tutte le 7 fasi di progettazione di un data mart. In particolare, si enfatizzeranno solo alcune fasi quali lanalisi e riconciliazione delle fonti dei dati, progettazione concettuale, progettazione logica ed infine la progettazione dellalimentazione. La progettazione dellalimentazione insieme allanalisi dei dati verr realizzata attraverso lutilizzo di Pentaho BI che una piattaforma di business intelligence che integra al proprio interno strumenti software come Kettle e Mondrian, ma anche altri, in grado di fornire funzionalit appropriate in tal senso. In particolare Kettle un componente di Pentaho BI responsabile del processo di Estrazione, Trasformazione e Caricamento dei dati, bench pu anche essere usato per altri scopi. Mondrian OLAP server, invece, insieme a JPivot , che una interaccia grafica via web, fornisce un motore di analisi dei dati multidimensionali.
1 Dominio applicativo
Lazienda interessata alla realizzazione del data mart la NauticaSun S.p.A. che si occupa principalmente di vendite e manutenzione di piccole e medie imbarcazioni. Lazienda ha una capillarit su tutto il territorio italiano ed composta da pi filiali dislocate per lo pi in localit marittime. In particolare, ogni filiale offre diversi servizi ed composta da tre reparti: amministrativo, esposizione ed officina. Il reparto amministrativo costituito da due uffici che si occupano di faccende che riguardano la contabilit della relativa filiale, invece il reparto di esposizione non altro che un grosso salone di circa 1000 metri quadri che funge da concessionaria dove vengono esposte le imbarcazioni da presentare ai clienti che sono interessati allacquisto. Infine il reparto officina si occupa di riparazioni delle imbarcazioni sia vendute dalla stessa azienda che da altre aziende. Comunque, la sede principale della NauticaSun S.p.A. non offre nessun tipo di servizio di esposizione e riparazioni ma composta solo da uffici amministrativi e contabili dellintera azienda.
2.1.1
Di seguito viene illustrato lo schema DB Nautica per il quale stata svolta una attenta analisi da cui non emersa nessuna particolare inconsistenza o errori.
codice cantiere Nome cantiere indirizzo codice manutenzione nome tecnico Modello imbarcazione pezzo ricambio
Tipo guasto
CANTIERE
(1,1)
(1,n)
compie
(1,1)
MANUTENZIONI
(1,n)
ha seguite da
nome P. Iva
citt
(1,n)
costo (1,n)
CONCESSIONARIA
emette
data
VERIFICA
(1,1)
modello imbarcazione
nome concessionaria
data
VENDITE
(1,n)
include
2.1.2
Di seguito viene illustrato lo schema DB CheckUp per il quale stata svolta una attenta analisi da cui non emersa nessuna particolare inconsistenza o errori.
OFFICINA
(1,N)
LAVORA PER
data
Codice test
anno
TEST
(1,N)
(1,1)
ESEGUE
(1,N)
TECNICO
(1,N)
ESPERTO EFFETTUA
Codice modello lunghezza (1,N) (1,N) (1,N)
MODELLO
stazza
IMBARCAZIONE
(1,1)
APPARTIENE
pescaggio
nome imbarcazione
Matricola imbarcazione
2.3 Integrazione
Il processo di integrazione suddiviso in pi fasi il cui obbiettivo creare uno schema riconciliato globale risolvendo i problemi evidenziati nella precendente fase.
2.3.1
Preintegrazione
La fase di integrazione consiste di una ulteriore analisi mirata a definire la politica di integrazione. In questo caso si decide di non eliminare porzione degli schemi sorgenti per cui vengono integrati cosi come sono. La strategia di integrazione adottata , per forza, quella binaria.
2.3.2
Questa fase consiste in una vera propria analisi comparativa degli schemi sorgenti mirata a individuare eventuali conflitti o correlazioni dei concetti espressi negli stessi schemi. I tipi di conflitti che possono essere evidenziati ricadono nelle seguenti quattro categorie: Conflitti di eterogeneit: dalla analisi comparativa degli schemi non sorgono conflitti di eterogeneit in quanto essi essendo modellati con lo stesso formalismo grafico non presentano discrepanze causate da diversi poteri espressivi. Conflitti sui nomi: CANTIERE: nello schema DB Nautica il nome di una entit, nello schema DB CheckUp viene usato il nome officina come sinonimo per indicare lo stesso concetto tramite l entit OFFICINA. Nello schema riconciliato si utilizza il nome officina. Lo stesso ed identico discorso vale per gli attributi id cantiere e nome cantiere dellentit CANTIERE.
VERIFICA: nello schema DB Nautica il nome di una entit, nello schema DB CheckUp viene usato il nome test come sinonimo per indicare lo stesso concetto tramite l entit TEST. Nello schema riconciliato si utilizza il nome test. Lo stesso ed identico discorso vale per lattributo codice verifica dellentit VERIFICA. Conflitti semantici: i due schemi non presentano conflitti semantici in quanto modellano con lo stesso livello di dettaglio ed astrazione. Conflitti strutturali: TECNICO: nello schema DB CheckUp rappresenta il nome di una entit mentre nello schema DB Nautica il nome di un attributo della entit MANUTENZIONI. Nello schema riconciliato globale si sceglie di rimanere tale concetto come entit TECNICO. MODELLO: nello schema DB CheckUp rappresenta il nome di una entit mentre nello schema DB Nautica il nome di un attributo della entit MANUTENZIONI. Nello schema riconciliato globale si sceglie di rimanere tale concetto come entit MODELLO. Propriet inter schema: la relazione LAVORA PER tra lentit TECNICO ed OFFICINA stata rimossa e non compare nello schema riconciliato perche non ritenuta necessaria. Invece, stata creata una nuova relazione EFFETTUATA DA tra le entit TECNICO e MANUTENZIONI. Infine, stata creata la relazione DI tra le entit VENDITA e IMBARCAZIONE. Eliminazione delle ridondanze: nello schema DB Nautica lattributo nome concessionaria dell entit VENDITE del tutto ridondante perche il concetto di concessionaria espresso dalla entit CONCESSIONARIA in relazione con VENDITE. Nello schema riconciliato viene eliminato tale attributo.
2.3.3
Lobbiettivo di questa fase quello di risolvere i conflitti evidenziati o trovati al passo immediatamente precedente a questo attraverso delle primitive di trasformazione applicate agli schemi locali o quello riconciliato. Comunque, nel nostro caso, abbiamo anticipato questa fase includendo tutto nella fase precedente evidenziando ma anche risolvendo i conflitti, discutendo
delle soluzioni applicate per la risoluzione dei conflitti mediante delle trasformazioni direttamente allo schema riconciliato. Quindi per maggiori dettagli leggere il paragrafo precedente.
2.3.4
La fusione degli schemi DB Nautica e DB CheckUp avvenuta attraverso la sovrapposizione o fusione dei concetti espressi mediante le entit OFFICINA E TEST collegando i restanti concetti provenienti dagli schemi di partenza. Lo schema riconciliato illustrato alla pagina successiva.
2.3.5
Loutput della fase di analisi e riconciliazione delle fonti oltre ad essere lo schema riconciliato costituito anche dalle corrispondenze tra gli elementi di questultimo e quelli degli schemi locali. In generale, quello che si fa per stabilire una corrispondenza tra i due livelli definire i concetti dello schema globale in termini dei concetti degli schemi locali. Questo approccio conosciuto come GAV ovvero Global As View il quale pi precisamente prevede che ad ogni concetto dello schema globale associata una vista il cui significato definito in base ai concetti rappresentati negli schemi locali.
codice manutenzione
tipo guasto
pezzo ricambio
OFFICINA
(1,N)
compie
(1,1)
MANUTENZIONE
(1,N)
effettuata da
(1,1)
(1,N)
codice fiscale nome tecnico cognome
ha
P. Iva nome concessionaria
seguite da
punteggio
(1,N) (1,N)
TECNICO
qualifica
(1,N)
CONCESSIONARIA
data
codice test
(1,N)
(1,N)
include
(1,1)
(1,1)
TEST
(1,1)
esegue
(1,N)
emette
codice vendite data
esperto
lunghezza nome modello codice modello stazza
costo
nome venditore
effettua
(1,1)
VENDITE
(1,N) (1,N)
matricola imbarcazione nome imbarcazione
MODELLO
pescaggio
(1,1)
(1,N)
(1,N)
di
(1,1)
IMBARCAZIONI
(1,1)
appartiene a
3 Progettazione concettuale
La progettazione concettuale consiste nella creazione degli schemi di fatto, a partire dallo schema riconciliato, per quei fatti che sono di interesse al processo decisionale della azienda. In particolare la tecnica per la progettazione concettuale di un data mart consiste di pi passi che descriveremo di seguito.
nome concessionaria
numero dipendenti
codice manutenzione
codice test
codice vendite
nome tecnico
codice fiscale
punteggio
nome officina
tipo guasto
codice test
tecnico
nome officina
tipo guasto
anno
citt
4 Progettazione logica
La progettazione logica, in generale, prevede di costruire uno schema a stella a partire dagli schemi di fatto creati nella progettazione concettuale. In particolare uno schema a stella composto da: Un insieme di relazioni DT1,..,DTn, chiamate dimension table, ciascuna corrispondente ad una dimensione. Ogni DTi caratterizzata da una chiave primaria e da un insieme di attributi che descrivono le dimensioni di analisi a diversi livelli di aggregazione. Una relazione FT, chiamata fact table, che importa le chiavi di tutte le dimension table. La chiave primaria di FT data dallinsieme delle chiavi esterne dalle dimension table. FT contiene un attributo per ogni misura. Nel nostro caso lo schema a stella per il fatto TESTING il seguente:
dim_manutenzione
manutenzione_id tipo guasto nome officina nome concessionaria citt
dim_tecnico
tecnico_id nometecnico
dim_durata
anno_id
fact_TESTING
tecnico_id anno_id manutenzione_id costo testing punteggio
anno
Non viene effettuata nessuna snowflakeizzazione dello schema a stella ma rimane cosi come .
-- fact table CREATE TABLE fact_TESTING ( fact_id BIGINT NOT NULL PRIMARY KEY, anno_id BIGINT, tecnico_id BIGINT, manutenzione_id BIGINT, costo_testing BIGINT, punteggio BIGINT );
5 Progettazione dellalimentazione
Il processo di alimentazione del data warehouse TESTING pu avvenire sia direttamente dalle sorgenti operazionali e sia dal livello riconciliato che come sappiamo consiste di una fusione delle sorgenti operazionali, per dirla molto brevemente, con particolari aggiustamenti. In particolare in questo caso di studio dellazienda NauticaSun il datawarehouse TESTING stato alimentato proprio a partire dal livello riconciliato. Comunque, nel processo di alimentazione di un datawarehouse giocano un ruolo fondamentale i cos detti strumenti ETL(Extraction Transformation Loading) i quali consistono di 4 processi distinti, ovvero: extraction, transformation, cleaning e
loading.
Tutto ci stato fatto usando il tool automatico Pentaho Data Integration meglio conosciuto come Kettle che un componente della Suite PentahoBI server. Una procedura ETL in Kettle un file XML prodotto dalleditor grafico Spoon e mandato in esecuzione con Pan, nel caso di trasformazioni sottoforma di file xml .ktr o da repository, oppure con Kitchen, nel caso di job sottoforma di file .kjb o da repository. Per cui quello che abbiamo fatto estrarre i dati di interesse dal database riconciliato e caricarli nel datawarehouse tramite kettke e tale processo illustrato nella figura della pagina seguente:
In pratica il processo di alimentazione tramite kettle consistito di una sola trasformazione(non intesa come operazione di ETL ma come procedura di kettle) con una serie di Step ed Hop. Loperazione fondamentale fatta in questo processo di alimentazione stata quella di Lookup/update tramite luso degli Step Combination LookUp/Update e Update, come si pu notare dallimmagine. Pi in particolare lintero processo stato eseguito a partire da una estrazione dei dati dalla sorgente operazionale attraverso il passo chiamato Table Input. Tramite tale passo abbiamo proprio materialmente prelevato i dati dalla sorgente, ovviamente siamo andati a prendere solo quelli che ci interessavano per il popolamento del datawarehouse attraverso una serie di Join tra le relazioni(tabelle ) presenti nella sorgente dati. Tutto ci quanto avvenuto in tale passo e che abbiamo appena descritto mostrato nella figura seguente:
Naturalmente lestrazione dei dati sorgente stata possibile perch kettle consente di effettuare connessioni a database esistenti in un modo molto semplice fornendogli alcuni parametri per la connessione. Comunque il database usato in questo caso MySql. Fatto ci, una volta prelevati i dati, il passo successivo stato quello di andare a inserire tali dati nel datawarehosuse attraverso lutilizzo dei passi di LookUp e Update, collegati tra loro tramite degli Hop che sono una rappresentazione grafica del flusso dei dati che viaggia attraverso i passi collegati mediante loro. Un generico passo di Combination Lookup/udate raffigurato di seguito
In pratica la configurazione di questo passo consiste di fornire il data base destinazione dei dati nel campo Connessioni, la tabella( dimensione ) destinazione, il campo chiave per effettuare il lookup ed infine il nome della chiave surrogata nella riga campo della chiave tecnica. In pratica, se non esiste una combinazione di lookup nella tabella destinazione lo scopo di questo passo generare una nuova chiave surrogata e inserire una riga con il campo chiave e quello della chiave surrogata. Fatto ci, una volta completato il passo di lookup, bisogna aggiornare i restanti campi della tabella destinazione e lo si fa attraverso il passo di Update che raffigurato di seguito:
Come al solito nel campo connessione mettiamo il nome del database a cui volgiamo connetterci, nel campo tabella destinazione il nome della dimensione che deve essere aggiornata, ed infine gli forniamo anche la chiave surrogata per il lookup del valore e il nome del o dei campi da aggiornare. Attraverso questo processo di utilizzo di una serie di passi di lookup ed update siamo andati a popolare le dimensioni adesso ci rimane da popolare la tabella dei fatti e lo facciamo attraverso il passo Table Output il quale non fa altro che ricevere lo stream di dati provenienti dai passi precedenti e andare a scriverlo nella tabella dei fatti. Ovviamente questo avviene configurando opportunamente tale passo e ci mostrato nella figura successiva:
Solito procedimento, indicare nome database e tabella destinazione nelle apposite label ed infine quali sono i campi da riempire nella tabella destinazione. Questultimo passo mostrato nella figura alla pagina successva:
Di seguito sono raffigurate delle immagini che mostrano una preview dei dati prelevati dalla sorgente tramite il passo Table Input e loutput dei dati nella tabella dei fatti, ovviamente nella tabella dei fatti verranno inseriti solo quei valori dei campi che sono stati specificati nel passo. Per concludere, la cosa bella di kettle che ogni processo creato con un tool grafico dove possiamo specificare cosa fare e come farlo senza scrivere codice, ma semplicemente con degli strumenti grafici.
Una volta creata la connessione andiamo nella barra dei menu in altro e visitiamo il menu a tendina file, clicchiamo new schema e ci compare la interfaccia
grafica attraverso cui possiamo con una facilit estrema editare e creare il cubo graficamente, specificando quindi il fatto, le dimensioni e le misure. Alla pagina successiva mostrata una immagine di questo procedimento.
Di seguito, alla pagina successiva, possiamo vedere anche il file XML associato allo schema del cubo:
Per questioni di leggibilit riportiamo il file XML alla pagina successiva mostrandolo con pi chiarezza
<Schema name="New Schema1"> <Dimension type="StandardDimension" highCardinality="false" name="dim_durata" description="tramite questa dimensione si analizzano i test effettuati alle imbarcazioni a secondo della durata impiegata "> <Hierarchy name="dim_anno" hasAll="true"> <Table name="dim_anno"> </Table> <Level name="dim_anno" table="dim_anno" column=" anno " nameColumn=" anno " type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Dimension type="StandardDimension" highCardinality="false" name="dim_tecnico" description="permette di analizzare i test effettuati rispetto ai tecnici meccanici che l'hanno effettuato"> <Hierarchy name="dim_tecnico" hasAll="true"> <Table name="dim_tecnico"> </Table> <Level name="dim_tecnico" table="dim_tecnico" column="nome_tecnico" nameColumn="nome_tecnico" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Dimension type="StandardDimension" highCardinality="false" name="dim_manutenzione" description="permette di effettuare analisi dei test rispetto alla loro causa dovuta a guasti delle imbarcazioni "> <Hierarchy name="Hierarchy " hasAll="true"> <Table name="dim_manutenzione"> </Table> <Level name="tipo_guasto" table="dim_manutenzione" column="tipo_guasto" nameColumn="tipo_guasto" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> <Level name="nome_officina" table="dim_manutenzione" column="nome_officina" nameColumn="nome_officina" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> <Level name="nome_concessionaria" table="dim_manutenzione" column="nome_concessionaria" nameColumn="nome_concessionaria" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> <Level name="citta" table="dim_manutenzione" column="citta" nameColumn="citta" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Cube name="testing" description="si vogliono analizzare i dati rispetto all'andamento dei test effettuati ad imbarcazioni a seguito di una manutenzione o riparazione per un guasto" cache="true" enabled="true"> <Table name="fact_testing"> </Table> <DimensionUsage source="dim_anno " name="dim_anno " foreignKey=" anno_id" highCardinality="false"> </DimensionUsage> <DimensionUsage source="dim_tecnico" name="dim_tecnico" foreignKey="tecnico_id" highCardinality="false"> </DimensionUsage> <DimensionUsage source="dim_manutenzione" name="dim_manutenzione" foreignKey="manutenzione_id" highCardinality="false">
</DimensionUsage> <Measure name="costo_testing" column="costo_testing" datatype="Integer" aggregator="avg" description="descrive il costo che ci è voluto per effettuare il test su una certa imbarcazione" visible="true"> </Measure> <Measure name="punteggio_massimo" column="punteggio_massimo" datatype="Integer" aggregator="avg" visible="true"> </Measure> </Cube> </Schema>
Come detto in precedenza schema workbench oltre a definire un cubo multidimensionale Mondrian permette anche di definire e testare le query MDX usando ovviamente il motore mondrian per processarle. Un esempio di creazione e testing di query MDX mostrato nella figura seguente:
Comunque, la sintassi generale delle query MDX la seguente: SELECT<membercollection> ON COLUMNS, <member collection> ON ROWS FROM <cubename> WHERE<conditions>
Alla pagina successiva sar mostrato il navigatore OLAP che possibile ottenerlo semplicemente cliccando sul tasto su cui e disegnato il cubo.
7.5 Costo testing per tecnici rispetto a tutti gli anni e manutenzioni
Bibliografia e sitografia
M. Golfarelli , S. Rizzi, (2006) Data Warehouse Teoria e pratica di progettazione McGraw-Hill Dispense Professore http://mondrian.pentaho.com/documentation http://www.pentaho.com http://etl-tools.info/en/pentaho/jpivot-navigator.htm