<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="it" lang="it">
<head>
<title>Mondrian OLAP</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="Mondrian_OLAP"/>
<meta name="wx_page_id" content="1751815"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="Mondrian OLAP" id="wxsec1"><h1 class="pagetitle" id="wx1">Mondrian OLAP</h1>

<wx:template id="wx_t1" pagename="Template:S" page_id="473933"/>
<div class="toccolours itwiki_template_avviso rad noprint" style="margin-bottom:.5em" id="wx2">
<div style="align:left; margin:-3px 0 -4px" id="wx3"><a href="/wit/Immagine:Stub_informatica.png" title="Stub" wx:linktype="image" wx:pagename="Immagine:Stub_informatica.png" wx:page_id="584308" id="wx4"><img src="/wit/Immagine:Stub_informatica.png" alt="Stub" width="30" id="wx5"/></a>
<p id="wx6"> Questa voce di <a href="/wit/Informatica" title="Informatica" wx:linktype="known" wx:pagename="Informatica" wx:page_id="1681180" id="wx7">informatica</a> è solo un <a href="/wit/Aiuto:Abbozzo" title="Aiuto:Abbozzo" wx:linktype="known" wx:pagename="Aiuto:Abbozzo" id="wx8">abbozzo</a>: <b id="wx9"><a href="http://wit/wit/index.php?title=Mondrian_OLAP&amp;action=edit" class="external text" wx:linktype="external" rel="nofollow" id="wx10">contribuisci</a></b> a migliorarla secondo le <a href="/wit/Aiuto:Manuale_di_stile" title="Aiuto:Manuale di stile" wx:linktype="known" wx:pagename="Aiuto:Manuale_di_stile" id="wx11">convenzioni di Wikipedia</a>.</p>
</div>
</div>

<wx:templateend start="wx_t1"/>
<p id="wx12"><b id="wx13">Pentaho Mondrian Analysis</b> è un motore per On Line Analytical Processing (<a href="/wit/OLAP" title="OLAP" wx:linktype="known" wx:pagename="OLAP" wx:page_id="81787" id="wx14">OLAP</a>) sviluppato in Java.<br id="wx15"/>
Implementa le funzionalità indispensabili all'analisi dati (aggregazione, drill-down drill-through, slicing, dicing) ed è in grado di eseguire <a href="/wit/Query" title="Query" wx:linktype="known" wx:pagename="Query" wx:page_id="116895" id="wx16">query</a> espresse in <a href="/wit/MDX" title="MDX" wx:linktype="known" wx:pagename="MDX" wx:page_id="880659" id="wx17">MDX</a> leggendo i dati da un <a href="/wit/RDBMS" title="RDBMS" wx:linktype="known" wx:pagename="RDBMS" wx:page_id="126232" id="wx18">RDBMS</a> e presentando i risultati in forma multidimensionale per mezzo di <a href="/wit/API" title="API" wx:linktype="known" wx:pagename="API" wx:page_id="122833" id="wx19">API</a> Java.</p>

<p id="wx20">La connessione alla base di dati di <a href="/wit/Data_Warehouse" class="new" title="Data Warehouse" wx:linktype="unknown" wx:pagename="Data_Warehouse" id="wx21">Data Warehouse</a> avviene via JDBC, il che rende indipendente Mondrian dal particolare RDBMS utilizzato. Lo schema multidimensionale della base dati può essere sia a stella che a ficco di neve, e la sua descrizione viene fornita al motore sotto forma di un file <a href="/wit/XML" title="XML" wx:linktype="known" wx:pagename="XML" wx:page_id="4607" id="wx22">XML</a>.</p>

<div id="wx_toc"/>

<a id="I_Tool_di_sviluppo" name="I_Tool_di_sviluppo"/>
<wx:section level="2" title="I Tool di sviluppo" id="wxsec2"><h2 id="wx23">I Tool di sviluppo</h2>

<p id="wx24">I Tool di sviluppo di Mondrian permettono di definire i metadata per la creazione degli schemi OLAP. Attualmente sono disponibili due strumenti, il primo proprietario della piattaforma, fornito con Mondrian e il secondo realizzato da terze parti:</p>

<ul id="wx25">
<li id="wx26">
<p id="wx27">Mondrian Cube Designer</p>
</li>

<li id="wx28"><a href="/wit/Ramsetcube" title="Ramsetcube" wx:linktype="known" wx:pagename="Ramsetcube" wx:page_id="1813474" id="wx29">Ramsetcube</a></li>
</ul>

<p id="wx30">Mentre il primo permette la gestione di un cubo alla volta, il secondo permette la gestione di un intero progetto.</p>

<a id="Gli_schemi" name="Gli_schemi"/>
</wx:section><wx:section level="2" title="Gli schemi" id="wxsec3"><h2 id="wx31">Gli schemi</h2>

<p id="wx32">Uno schema definisce un database multidimensionale. Contiene il modello logico, costituito da cubi, gerarchie e membri, e le relazioni tra questo modello e quello fisico dei dati. Gli schemi di Mondrian sono scritti in file XML. Gli elementi principali di uno schema sono i cubi, le misure e le dimensioni.</p>

<a id="Principali_novit.C3.A0" name="Principali_novit.C3.A0"/>
</wx:section><wx:section level="2" title="Principali novità" id="wxsec4"><h2 id="wx33">Principali novità</h2>

<p id="wx34">Al di là di considerazioni che riguardano l'architettura in senso generale, la principale novità risiede nel fatto che le strutture <a href="/wit/ROLAP" class="new" title="ROLAP" wx:linktype="unknown" wx:pagename="ROLAP" id="wx35">ROLAP</a> di un progetto vengono portate nella memoria RAM in modo tale che queste possano essere gestite con prestazioni paragonabili ai moderni motori <a href="/wit/MOLAP" class="new" title="MOLAP" wx:linktype="unknown" wx:pagename="MOLAP" id="wx36">MOLAP</a>. Si parla quindi di <a href="/wit/HOLAP" class="new" title="HOLAP" wx:linktype="unknown" wx:pagename="HOLAP" id="wx37">HOLAP</a> per indicare un sistema ibrido (HO - hibrid OLAP), sottolineato peraltro dallo stesso nome della società "Penta-ho" <a href="/wit/Pentaho" title="Pentaho" wx:linktype="known" wx:pagename="Pentaho" wx:page_id="1300143" id="wx38">Pentaho</a> che comprende Mondrian. Al giorno d'oggi questa possibilità è praticabile grazie ai più potenti elaboratori in commercio e ai sempre più ridotti costi delle memorie RAM.</p>

<a id="Mondrian_Architecture" name="Mondrian_Architecture"/>
</wx:section><wx:section level="2" title="Mondrian Architecture" id="wxsec5"><h2 id="wx39">Mondrian Architecture</h2>

<p id="wx40">Il sistema OLAP Mondrian consiste in quattro livelli; cominciando da quello più vicino all’utente abbiamo:</p>

<ul id="wx41">
<li id="wx42">
<p id="wx43">presentation layer</p>
</li>

<li id="wx44">
<p id="wx45">dimensional layer</p>
</li>

<li id="wx46">
<p id="wx47">star layer</p>
</li>

<li id="wx48">
<p id="wx49">storage layer</p>
</li>
</ul>

<p id="wx50">Il livello di presentazione determina cosa vede l’utente finale sul suo monitor e come può interagire per formulare nuove domande. Ci sono molti modi per rappresentare dati multidimensionali come ad esempio tabelle con <a href="/wit/Pivoting" title="Pivoting" wx:linktype="known" wx:pagename="Pivoting" wx:page_id="1822850" id="wx51">pivoting</a>, <a href="/wit/Istogrammi" class="new" title="Istogrammi" wx:linktype="unknown" wx:pagename="Istogrammi" id="wx52">istogrammi</a>, grafici a torta, ecc… e modi avanzati come mappe cliccabili e grafici dinamici.</p>

<p id="wx53">Il secondo livello è il dimensional layer. Questo livello analizza, valida ed esegue un’interrogazione MDX. Una query viene valutata in molteplici passi. Prima vengono valutati gli assi, poi i valori delle celle all’interno degli assi. Il query transformer permette all’applicazione di manipolare query esistenti per costruire uno statement MDX invece di ripartire da zero per ogni richiesta. I metadati descrivono il modello dimensionale e come viene mappato nel modello relazionale.</p>

<p id="wx54">Il terzo livello è lo star layer ed è responsabile del mantenimento di una cache di aggregazioni. Un’aggregazione è un insieme di valori (celle) in memoria, qualificate da un insieme di colonne con il valore delle dimensioni. Il dimensional layer manda una richiesta per un insieme di celle. Se le celle richieste non sono contenute nella cache, l’aggregation manager invia una richiesta allo storage layer.</p>

<p id="wx55">Lo storage layer è un <a href="/wit/RDBMS" title="RDBMS" wx:linktype="known" wx:pagename="RDBMS" wx:page_id="126232" id="wx56">RDBMS</a>. È responsabile di fornire aggregazioni di celle e i membri delle tabelle dimensionali. Questo componente può essere installato sulla stessa macchina o essere distribuito tra più macchine. Mentre i livelli 2 e 3, compongono il Mondrian server e devono risiedere sulla stessa macchina. Lo storage layer può essere installato su un’altra macchina e accessibile tramite una connessione remota JDBC.</p>

<p id="wx57"><br id="wx58"/>
</p>

<a id="API_Mondrian" name="API_Mondrian"/>
</wx:section><wx:section level="2" title="API Mondrian" id="wxsec6"><h2 id="wx59">API Mondrian</h2>

<p id="wx60">Mondrian fornisce delle <a href="/wit/API" title="API" wx:linktype="known" wx:pagename="API" wx:page_id="122833" id="wx61">API</a> per permettere alle applicazioni lato client di eseguire le query. Visto che non ci sono API universalmente accettate per eseguire query OLAP, le API di Mondrian sono le prime realizzate propriamente per lo scopo. La differenza principale è il linguaggio per la query. Mondrian usa MDX per specificare le query dove <a href="/wit/JDBC" title="JDBC" wx:linktype="known" wx:pagename="JDBC" wx:page_id="61512" id="wx62">JDBC</a> usa <a href="/wit/SQL" title="SQL" wx:linktype="known" wx:pagename="SQL" wx:page_id="3882" id="wx63">SQL</a>. Il seguente frammento di codice Java si connette a Mondrian, esegue una query e stampa i risultati:</p>

<p id="wx64">&lt;source lang="java"&gt;import mondrian.olap.*; import java.io.PrintWriter;</p>

<p id="wx65">Connection connection = DriverManager.getConnection("Provider=mondrian;" +</p>

<pre id="wx66">
      "Jdbc=jdbc:odbc:MondrianFoodMart;" + 
       "Catalog=/WEB-INF/FoodMart.xml;",null,false); 
</pre>

<p id="wx67">Query query = connection.parseQuery("SELECT "+ "{[Measures].[Unit Sales],[Measures].[Store Sales]} on columns," + "{[Product].children} on rows FROM [Sales] " + "WHERE ([Time].[1997].[Q1], [Store].[CA].[San Francisco])"); Result result = connection.execute(query); result.print(new PrintWriter(System.out)); &lt;/source&gt;</p>

<p id="wx68"><br id="wx69"/>
</p>

<p id="wx70">Una Connection è creata via DriverManager, simile a <a href="/wit/JDBC" title="JDBC" wx:linktype="known" wx:pagename="JDBC" wx:page_id="61512" id="wx71">JDBC</a>. Una query, analogamente a uno Statement con JDBC, viene creata facendo il parsing di una stringa MDX. L’oggetto Result è analogo al ResultSet per JDBC, tranne che per il fatto che tratta dati multidimensionali. Questi consistono di assi e celle, invece di colonne e righe.</p>

<p id="wx72">Per completare con standard emergenti, sono state aggiunte due API a Mondrian:</p>

<ul id="wx73">
<li id="wx74"><a href="/wit/JOLAP" class="new" title="JOLAP" wx:linktype="unknown" wx:pagename="JOLAP" id="wx75">JOLAP</a>
<p id="wx76">è uno standard emergente per il processo <a href="/wit/JSR" title="JSR" wx:linktype="known" wx:pagename="JSR" wx:page_id="883439" id="wx77">JSR</a> ed è diventata parte di J2EE;</p>
</li>

<li id="wx78"><a href="/wit/XML" title="XML" wx:linktype="known" wx:pagename="XML" wx:page_id="4607" id="wx79">XML</a>
<p id="wx80">for Analysis è uno standard per accedere a un <a href="/wit/OLAP" title="OLAP" wx:linktype="known" wx:pagename="OLAP" wx:page_id="81787" id="wx81">OLAP</a> server via <a href="/wit/SOAP" title="SOAP" wx:linktype="known" wx:pagename="SOAP" wx:page_id="52694" id="wx82">SOAP</a> (Simple Object</p>
</li>
</ul>

<p id="wx83">Access Protocol). Esso vuole permettere a un componente come Excel di eseguire query con Mondrian.</p>

<p id="wx84"><br id="wx85"/>
</p>

<a id="Tabelle_degli_aggregati" name="Tabelle_degli_aggregati"/>
</wx:section><wx:section level="2" title="Tabelle degli aggregati" id="wxsec7"><h2 id="wx86">Tabelle degli aggregati</h2>

<p id="wx87">Al contrario di molti server OLAP, Mondrian non memorizza dati sul disco, lavora solo con i dati del database relazionale e, quando ha letto un po' di dati, li memorizza nella cache. Questo garantisce semplificazioni nell’installazione di Mondrian, ma limita le sue prestazioni quando viene utilizzato con grandi moli di dati.</p>

<p id="wx88">Consideriamo cosa succede quando un utente richiede il report delle vendite di quest’anno. Questo report contiene un unico dato: il totale delle vendite, di tutti i prodotti, in tutte le regioni durante l’anno 2008. Per prima cosa, per poter reperire questo numero, Mondrian genera una query come la seguente:</p>

<p id="wx89">&lt;source lang="SQL"&gt; SELECT sum(store_sales) FROM sales_fact, time WHERE sales_fact.time_id = time.time_id AND time.year = 2005 &lt;/source&gt;</p>

<p id="wx90">e la invia al DBMS. Il DBMS impiega alcuni minuti per eseguirla visto che deve andare a leggere milioni di record dalla fact table e aggregarli in una singola cella. Chiaramente, in questo caso e in quelli simili è necessario un preaggregato dei dati.</p>

<p id="wx91">Una tabella degli aggregati coesiste con la fact table, e contiene misure preaggregate costruite a partire dalla fact table. Viene registrata nello schema utilizzato da Mondrian, in modo che Mondrian possa scegliere quando usare la fact table e quando la tabella degli aggregati, a seconda della particolare interrogazione da eseguire.</p>
</wx:section></wx:section></div>
<div id="wx_categorylinks">
<a href="/wit/index.php?title=Speciale:Categories&amp;article=Mondrian_OLAP" title="Speciale:Categories" wx:linktype="known" wx:pagename="Speciale:Categories" id="wx92">Categorie</a>: <span dir="ltr" id="wx93"><a href="/wit/Categoria:Stub_informatica" title="Categoria:Stub informatica" wx:linktype="known" wx:pagename="Categoria:Stub_informatica" wx:page_id="239278" id="wx94">Stub informatica</a></span> | <span dir="ltr" id="wx95"><a href="/wit/Categoria:Gestione_d%27azienda" title="Categoria:Gestione d'azienda" wx:linktype="known" wx:pagename="Categoria:Gestione_d'azienda" wx:page_id="296585" id="wx96">Gestione d'azienda</a></span> | <span dir="ltr" id="wx97"><a href="/wit/Categoria:Informatica" title="Categoria:Informatica" wx:linktype="known" wx:pagename="Categoria:Informatica" wx:page_id="24695" id="wx98">Informatica</a></span></div>
<div id="wx_languagelinks">
</div>
</body>
<wx:templatearguments for="wx_t1"><wx:argument name="1">
<p id="wx99">informatica</p>
</wx:argument></wx:templatearguments>
</html>
