Mondrian, OLAP, cubi e dimensioni
Breve introduzione a Mondrian, un server OLAP interamente scritto in Java che rappresenta uno dei principali strumenti di data mining utilizzati nel mondo business.
In uno degli ultimi progetti sui quali sto lavorando mi è capitato di dover utilizzare Mondrian, server OLAP collaudato e realizzato all'interno di una realtà solida come Pentaho (pentaho.org).
Un server OLAP rappresenta un livello dati che si pone tra la base dati relazionale e l'applicazione e permette di effettaure query (tramite un linguaggio specifico che in Mondrian si chiama MDX) multidimensionali o ovviamente a riceverne i risultati in maniera totalmente astratta dalla base di dati utilizzata e dal dialetto SQL. Ma cosa rappresenta una query multimensionale?
I database al giorno d'oggi rappresentano uno strumento di persistenza necessario per qualsiasi applicazione ma essi gestiscono i dati in maniera unidirezionale. Essi infatti ad ogni interrogazione rispondono con una tabella a singola entrata che presenta un'intestazione (molto spesso nomi di colonne già presenti nel database) e un elenco di record inseriti in questa struttura.
La realtà spesso non è però cosi facilmente modellabile.
Grazie ad uno strumento come Mondrian è possibile effettuare interrogazioni che rispondano con tabelle o "cubi" multidimensionali che permettono di analizzare dei dati sotto diversi punti di vista. Basta pensare ad una tabella a doppia entrata come può essere quella che interseca magari un elenco di prodotti commercializzati con un insieme di indicatori (vendite, spese di produzione, spese di marketing...). Realizzare una tabella di questo genere utilizzando query unidimensionali è abbastanza arduo e poco flessibile soprattutto se i dati non sono normalizzati a dovere.
Mondrian implementa un set di specifiche standard per questo tipo di interrogazioni: OLAP4J (olap4j.org) e presenta una facilità d'uso disarmante. L'unico ostacolo che ho trovato (e che ancora ahimè si fa sentire) riguarda la definizione e l'utilizzo di alcuni termini specifici che identificano i vari componenti che rappresentano il modello dei dati. Alcuni esempi sono le dimensioni, le misure, i membri, gli assi e le gerarchie. Sembrano tutti concetti semplici e stradiffusi, ma inserirli tutti nello stesso contesto crea un po' di confusione almeno inizialmente.
La configurazione del server OLAP fa capo alla definizione di un "cubo" ovvero di un oggetto virtuale che rappresenta in maniera descrittiva l'insieme di tutte le componenti che verranno gestite dall'applicazione e a quali tabelle/colonne verranno mappate. Si utilizza un file XML per la definizione di questo cubo virtuale.
Una volta definito correttamente il cubo è possibile, tramite API esposte dal server, interrogare lo stesso tramite appunto query MDX. Mondrian risponderà con un oggetto di tipo Result che può essere paragonato all'oggetto ResultSet caposaldo del panorama JDBC.
Come prima panoramica credo sia più che sufficente. Spero di poter tornare in futuro su questo argomento che sicuramente presenta aspetti molto interessanti
Per approfondire non posso che segnalare il sito web ufficiale del progetto (mondrian.pentaho.org) che presenta una documentazione non troppo completa e chiara ma che comunque rappresenta l'unica amica nel caso si volesse sperimentere con OLAP e Mondrian.