# Cubo OLAP

Un Cubo OLAP (OnLine Analytical Processing) è una struttura per la memorizzazione di dati che permette di eseguire analisi in tempi rapidi, superando un limite dei database relazionali.
I database relazionali non sono adatti ad elaborazioni istantanee e alla visualizzazione di una grande mole di dati. Al contrario, sono adatti all'elaborazione di record derivanti dall'esecuzione di transazioni note come OLTP.
Il Cubo OLAP può essere immaginato come un'estensione del foglio di lavoro a due dimensioni. Il cubo OLAP ha da tre a un arbitrario numero di caratteristiche o dimensioni di analisi.
Ad esempio, una società può essere interessata ad analizzare alcuni dati finanziari per prodotto, periodo di tempo, città e tipologie di ricavo di costo, e alla comparazione di questi dati con una previsione di budget. Questi metodi di analisi dei dati sono noti come dimensioni. Poiché in un cubo OLAP possono esserci in generale più di tre dimensioni, il termine più appropriato è quello di ipercubo.

## Funzionalità

Il Cubo OLAP è composto da dati numerici, detti misure, che sono categorizzati all'interno di dimensioni.
Consente di creare una reportistica come tabella pivot, l'inserimento di elementi e campi calcolati che rielaborano i dati di partenza, e operazioni di roll-up e drill-down, se le dimensioni sono organizzate all'interno di una gerarchia.
Lo schema dei metadati del Cubo OLAP può essere creato a partire da uno schema a stella oppure da un insieme di tabelle di un database relazionale. Le misure sono ricavate dai singoli record presenti nella tabella dei fatti dello schema a stella, e le dimensioni sono dedotte dalle dimensioni delle singole tabelle.
Ad esempio i dati finanziari possono essere aggregati per prodotto, località, data, tipologia di costo e ricavo, dato preventivo/consuntivo. Lo schema a stella avrà una tabella per ogni dimensione di analisi contenente i valori ammissibili (il dominio della variabile): una tabella con tutti i prodotti, una con tutte le tipologie di costo o ricavo, etc.
Le dimensioni di analisi sono tra loro indipendenti, per cui in un database relazionale le tabelle relative alle dimensioni di analisi sono collegate da relazioni molti-a-molti. Il dato numerico è un attributo della relazione fra queste tabelle.
Nello schema a stella, infine, alle tabelle relative alle dimensioni di analisi se ne aggiunge una centrale, detta dei fatti. Il cubo OLAP è composto da una sola tabella di n + 1 colonne, dove ogni numero è identificato da un valore per ogni dimensione di analisi.
Nell'esempio, il dato di costo/ricavo in euro sarà identificato dal codice di un prodotto, dal nome di una località, da una data, da una tipologia, da una sigla che indica se è preventivo o consuntivo. Il cubo OLAP sarà un'enorme tabella con 5 dimensioni di analisi + 1 colonna per la memorizzazione del dato numerico.
Chiaramente, il database relazionale può contenere più di un dato numerico, e il passaggio a uno schema a stella può rivelarsi non banale.

## Gerarchia

Ciascuno degli elementi di una certa dimensione può essere categorizzato all'interno di una gerarchia. Una gerarchia è una serie di relazioni padre e figlio, dove tipicamente l'elemento padre rappresenta il consolidamento degli elementi che sono suoi figli. Gli elementi padre possono essere a loro volta aggregati come figli di un ulteriore padre.
Ad esempio, maggio 2005 può appartenere alla gerarchia del Secondo Quadrimestre 2005, che a sua volta è contenuta nella gerarchia dell'Anno 2005.

## Tabelle pivot

La tabella pivot è la reportistica che risulta da una query OLAP elaborata su dati organizzati all'interno di un ipercubo OLAP.
La sorgente dei dati della tabella pivot è una sola, la tabella dei fatti che contiene il dato numerico presente nella tabella pivot e le dimensioni di analisi che lo identificano.

## Definizione tecnica

Per la teoria delle basi di dati, un cubo OLAP è una rappresentazione astratta della proiezione di un database relazionale. Data una relazione di cardinalità N, si consideri la proiezione delle variabili X, Y e Z come chiave primaria, e di W come attributo residuo. Si caratterizzino questi come una funzione
    f : (X,Y,Z) → W,
dove gli attributi X, Y, e Z corrispondono agli assi del cubo, mentre l'attributo W all'interno della tripla ( X, Y, Z ) corrisponde ai singoli dati che popolano ciascuna cella del cubo.
Poiché un output bidimensionale (riga e colonna) non può rappresentare un vettore a tre dimensioni, è più pratico operare una riduzione delle dimensioni del cubo, e limitarsi a proiettare dei "tagli" del cubo, fissato come costanti uno o più valori di almeno delle sue dimensioni, o di un numero di dimensioni pari a n-2. Per cui, si ottiene:
    g : (X,Y) → W,
che elimina una delle chiavi primarie, ma mantiene la stessa informazione e significatività, sebbene fornisca la rappresentazione per un dato valore della variabile Z.