30.11.2014 Views

Definizione e calcolo delle misure - DBGroup

Definizione e calcolo delle misure - DBGroup

Definizione e calcolo delle misure - DBGroup

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Definizione</strong> e <strong>calcolo</strong> <strong>delle</strong> <strong>misure</strong><br />

! Misure Derivate<br />

! Misure Calcolate<br />

! Misure Derivate e Progetto Logico<br />

! Calcolo <strong>delle</strong> Misure<br />

! Aggregabilità<br />

Misure Derivate<br />

" Sono <strong>misure</strong> definite a partire da altre <strong>misure</strong> dello schema<br />

di fatto applicando operatori matematici :<br />

# Nellesempio <strong>delle</strong> vendite incasso è una misura derivata :<br />

incasso = prezzo_unitario * quantità_venduta<br />

" Una misura derivata viene calcolata sugli eventi primari,<br />

ovvero prima di effettuare l’aggregazione; quindi, al pari<br />

<strong>delle</strong> altre <strong>misure</strong> (normali o esplicite), anche per le <strong>misure</strong><br />

derivate si deve definire un operatore di aggregazione<br />

# La misura derivata incasso è additiva, in quanto<br />

- lincasso annuale è la somma degli incassi mensili<br />

- lincasso di una categoria di prodotto è la somma degli<br />

incassi dei relativi tipi<br />

- lincasso dei negozi in uno stato è la somma degli incassi dei<br />

negozi <strong>delle</strong> regioni di quello stato<br />

# Si noti quindi che la misura derivata incasso è additiva anche<br />

se una sua componente (prezzo_unitario) non è additiva<br />

2


Misure Derivate : Esempio<br />

" Schema di Fatto ESAMI<br />

# Dimensioni<br />

• STUD (con in gerarchia FACOLTA) e DATA (con in gerarchia MESE)<br />

# Misure<br />

• BASE (Crediti di tipo Base) e ALTRO (Crediti di tipo ALTRO)<br />

# Misure derivate<br />

• RAPPORTO = BASE/ALTRO<br />

• TOTALE = BASE + ALTRO<br />

STUD DATA BASE ALTRO RAPPORTO TOTALE<br />

ING1 GEN1 20 2 10 22<br />

ING1 GEN2 40 4 10 44<br />

ING2 GEN2 30 6 5 36<br />

SUM SUM AVG SUM<br />

F AC O L T A DA T A BA S E A L TR O RA P P O RT O T O T A L E<br />

I N G G EN 1 20 2 10 22<br />

I N G G EN 2 70 10 7, 5 80<br />

FACOLTA MESE BASE ALTRO RAPPORTO TOTALE<br />

ING GEN 90 12 8,33 102<br />

3<br />

Misure Calcolate<br />

" Una misura calcolata è una misura il cui valore è calcolato a<br />

partire da altre <strong>misure</strong> dopo aver aggregato i dati, ovvero il<br />

valore è valutato sugli eventi secondari :<br />

! non si definisce un operatore di aggregazione!<br />

" Esempio: schema di Fatto ESAMI<br />

# Misura derivata : TOT_DER = BASE + ALTRO (SUM)<br />

# Misura calcolata : TOT_CALC= BASE + ALTRO<br />

STUD DATA BASE ALTRO TOT_DER TOT_CAL<br />

ING1 GEN1 20 2 22 C 22<br />

ING1 GEN2 40 4 44 44<br />

ING2 GEN2 30 6 36 36<br />

SUM<br />

SUM<br />

SUM<br />

FACOLTA DATA BASE ALTRO TOT_DER TOT_CALC<br />

ING GEN1 20 2 22 22<br />

ING GEN2 70 10 80 80<br />

FACOLTA MESE BASE ALTRO TOT_DER TOT_CALC<br />

ING GEN 90 12 102 102<br />

4


Misure Calcolate vs Derivate<br />

" Per una misura derivata non è sempre equivalente calcolare il<br />

valore aggregato a partire dal valore aggregato <strong>delle</strong> <strong>misure</strong><br />

componenti:<br />

$ non è sempre equivalente definire una misura derivata<br />

come misura calcolata!<br />

" Esempio: schema di Fatto ESAMI<br />

# Misura derivata : RAP_DER = BASE/ALTRO (AVG)<br />

# Misura calcolata : RAP_CALC = BASE/ALTRO<br />

STUD DATA BASE ALTRO RAP_DER RAP_CALC<br />

ING1 GEN1 20 2 10 10<br />

ING1 GEN2 40 4 10 10<br />

ING2 GEN2 30 6 5 5<br />

SUM SUM AVG<br />

FACOLTA DATA BASE ALTRO RAP_DER RAP_CALC<br />

ING GEN1 20 2 10 10<br />

ING GEN2 70 10 7,5 7<br />

FACOLTA MESE BASE ALTRO RAP_DER RAP_CALC<br />

ING GEN 90 12 8,33 7,5<br />

5<br />

Misure Calcolate vs Derivate: Esempio<br />

" Il progettista deve scegliere se usare una misura derivata oppure<br />

calcolata<br />

" Esempio: misura INCASSO nello schema di fatto VENDITA<br />

Sum AVG<br />

Sum<br />

Tipo Quantit Prezzo<br />

T1 12 1,25<br />

T2 9 0,80<br />

22,70<br />

Incasso_calcolato<br />

15,00<br />

7,20<br />

22,20<br />

" INCASSO deve essere una misura derivata: non è possibile calcolare<br />

il valore aggregato della misura derivata Incasso a partire dal valore<br />

aggregato <strong>delle</strong> <strong>misure</strong> componenti!<br />

# lincasso annuale non può essere calcolato moltiplicando la<br />

quantità venduta in un anno per il prezzo unitario medio annuale.<br />

6


Misure Calcolate vs Derivate<br />

" Se la misura derivata e le sue componenti sono distributive<br />

è possibile calcolare il valore aggregato a partire dal valore<br />

aggregato <strong>delle</strong> <strong>misure</strong> componenti e quindi si ottiene lo<br />

stesso risultato definendo la misura come calcolata.<br />

" Verifica negli esempi precedenti:<br />

1. Misura additiva TOTALE, con componenti additive:<br />

il valore aggregato si può calcolare a partire dal valore<br />

aggregato <strong>delle</strong> componenti<br />

2. Misura additiva INCASSO, con una componente additiva e<br />

laltra no: il valore aggregato non si può calcolare a partire<br />

dal valore aggregato <strong>delle</strong> componenti<br />

3. Misura non-additiva RAPPORTO , con componenti additive:<br />

il valore aggregato non si può calcolare a partire dal valore<br />

aggregato <strong>delle</strong> componenti<br />

" La scelta si basa sull’efficienza del <strong>calcolo</strong>:<br />

intuitivamente una misura calcolata è più efficiente” in<br />

quanto il <strong>calcolo</strong> avviene sui dati aggregati<br />

7<br />

Misure Derivate generalizzate<br />

" Nel caso generale, una misura derivata si può definire a<br />

partire da altre <strong>misure</strong> dello schema di fatto applicando oltre<br />

che operatori matematici anche operatori logici<br />

" Esempio: Misura additiva NumVenditePromo per il<br />

conteggio <strong>delle</strong> vendite effettuate in promozione, calcolata<br />

sulla base di una misura Sconto<br />

NUMVENDITEPROMO =<br />

CASE WHEN SCONTO=0 THEN 0 ELSE 1 END<br />

" Esempio: Misura additiva NumVoliInRitardo per il conteggio<br />

dei voli in ritardo, calcolata sulla base di una misura Ritardo<br />

NUMVOLIINRITARDO=<br />

CASE WHEN RITARDO > 5 THEN 1 ELSE 0 END<br />

8


Misure Calcolate generalizzate<br />

" Nel caso generale, una misura calcolata è una misura il cui<br />

valore è calcolato dopo aver aggregato i dati, a partire da altre<br />

<strong>misure</strong> e/o usando i valori degli attributi dimensionali<br />

" Esempi (l’esempio completo è a pagina ???):<br />

Misura calcolata per il conteggio degli eventi primari di VENDITA:<br />

NUM_VENDITE = count(*)<br />

Misura calcolata per il conteggio degli scontrini in VENDITA:<br />

NUM_CLIENTI = COUNT (DISTINCT NUM.SCONTRINO)<br />

TIPO<br />

DATA<br />

VENDITA<br />

Una misura calcolata può<br />

essere indicata nello schema<br />

di fatto con (C)<br />

PRODOTTO<br />

QUANTITA<br />

(C) NUM_VENDITE<br />

(C) NUM_CLIENTI<br />

NUM.<br />

SCONTRINO<br />

9<br />

Misure Derivate e progetto logico<br />

" Per definizione, una misura derivata non dovrebbe essere<br />

inserita nella fact table, in quanto derivabile appunto dai<br />

valori <strong>delle</strong> altre <strong>misure</strong> e pertanto il <strong>calcolo</strong> può essere<br />

demandato al sistema OLAP<br />

" Una misura derivata può essere inserita nella fact table, e<br />

calcolata quindi in fase di alimentazione per<br />

1. Motivi di efficienza<br />

2. Assenza nel sistema OLAP degli operatori che<br />

definiscono la misura derivata. Ad esempio, in Analysis<br />

Services è conveniente definire le <strong>misure</strong> derivate con<br />

operatori logici in fase di alimentazione e quindi inserirle<br />

nella fact table.<br />

10


Calcolo <strong>delle</strong> <strong>misure</strong>:<br />

Progetto Fisico e Viste<br />

" Un significativo aumento <strong>delle</strong> prestazioni può essere ottenuto<br />

precalcolando i dati aggregati di uso più comune<br />

" Misure definite con operatori Distributivi ed Algebrici<br />

permettono di calcolare dati aggregati a partire direttamente<br />

da dati parzialmente aggregati<br />

" Lottimizzazione usa il concetto di vista materializzata:<br />

# Ogni pattern secondario corrisponde ad una vista sul pattern primario<br />

# Vengono materializzate le viste (ovvero pre-calcolate e memorizzate<br />

in tabelle o altre strutture dati) corrispondenti ad alcuni pattern<br />

secondari, ovvero a quelli maggiormente utilizzati (carico di lavoro)<br />

# La scelta <strong>delle</strong> viste da materializzare è basata sul compromesso tra<br />

diversi vincoli, i principali dei quali sono<br />

• Tempo di costruzione ed aggiornamento <strong>delle</strong> viste materializzate,<br />

ovvero tempo di <strong>calcolo</strong> al momento del caricamento/refresh del DW<br />

• Spazio aggiuntivo richiesto<br />

11<br />

Le viste<br />

" Le viste possono essere identificate in base al livello (pattern) di<br />

aggregazione che le caratterizza<br />

v 1 = {prodotto, data, negozio}!<br />

v 2 = {tipo, data, città}!<br />

v 4 = {tipo, mese, regione}!<br />

v 3 = {categoria, mese,<br />

città}!<br />

v 5 = {trimestre, regione}!<br />

" Viste primarie: corrispondono al pattern di aggregazione<br />

primario (non aggregato)<br />

" Viste secondarie: corrispondono ai pattern di aggregazione<br />

secondari (aggregati)


Risolvibilità <strong>delle</strong> interrogazioni<br />

" Una vista v sul pattern p non serve solo per le interrogazioni con<br />

pattern di aggregazione p ma anche per tutte quelle che richiedono i<br />

dati a pattern p' più aggregati di p (p ! p')<br />

{a,b}<br />

b'<br />

a'<br />

b<br />

a<br />

{a',b}<br />

{a,b'}<br />

{b}<br />

{a',b'}<br />

{a}<br />

{b'}<br />

{a'}<br />

{ }<br />

Reticolo di roll-up<br />

Scelta <strong>delle</strong> viste materializzate<br />

" È utile materializzare una vista quando:<br />

# Risolve direttamente una interrogazione frequente<br />

# Permette di ridurre il costo di esecuzione di molte interrogazioni<br />

" Non è consigliabile materializzare una vista quando:<br />

# Il suo pattern di aggregazione è molto simile a quello di<br />

una vista già materializzata<br />

# Il suo pattern di aggregazione è molto fine<br />

# La materializzazione non riduce di almeno un ordine di<br />

grandezza il costo <strong>delle</strong> interrogazioni<br />

% Tecniche di scelta <strong>delle</strong> viste da materializzare sono<br />

generalmente già implementate nei sistemi OLAP e<br />

allutente viene solo chiesto di configurare alcuni<br />

parametri, quali lo spazio a disposizione per la<br />

memorizzazione <strong>delle</strong> viste da materializzare


Analysis Services: archiviazione cubo<br />

" In Analysis Services e possibile precalcolare tutte le possibili<br />

aggregazioni<br />

# Nel cubo Sales di FoodMart ci sono 1036 aggregazioni:<br />

Analysis Services: archiviazione cubo<br />

" Oppure si fissa un limite allo spazio di archiviazione stimato<br />

# Nel cubo Sales di FoodMart fissando 100MB si ottengono 398<br />

aggregazioni:


Analysis Services: operatore AVG<br />

" AVG è un operatore di aggregazione algebrico che ha come<br />

misura di supporto COUNT<br />

" Nel sistema OLAP Analysis Services: AVG non è disponibile<br />

come operatore ma deve essere calcolato<br />

tramite SUM e COUNT<br />

" Esempio : prezzo_unitario (PU) aggregato tramite AVG<br />

1. Si definisce PUBase aggregando PU con SUM;<br />

2. Si definisce la misura di supporto Conteggio, aggregata con COUNT<br />

3. Si definisce PU come misura calcolata PUBase/Conteggio<br />

17


Alimentazione: <strong>calcolo</strong> <strong>delle</strong> <strong>misure</strong><br />

! L’alimentazione definisce le istanze di un Data Mart a partire<br />

dalle istanze del DataBase operazionale DBO<br />

! Nel progetto dell’alimentazione si definisce il <strong>calcolo</strong> effettivo<br />

<strong>delle</strong> <strong>misure</strong> (normali o esplicite) di uno Schema di Fatto e le<br />

istanze che costituiranno le dimensioni<br />

! Nel seguito tratteremo il <strong>calcolo</strong> <strong>delle</strong> <strong>misure</strong> e l’analisi della<br />

loro aggregabilità rispetto alle dimensioni<br />

! Dato uno Schema di Fatto F,<br />

con dimensioni D = {D1, !, Dn } e <strong>misure</strong> M = {M1, !, Mk};<br />

per ogni misura Mi si deve definire una view F_Mi sul DBO, con<br />

schema F_Mi(D1,!,Dn,Mi)<br />

! Il join naturale di tutte le view F_Mi risulta nella vista F, che<br />

chiameremo vista degli Eventi Primari, con schema :<br />

F(D1,!,Dn,M1, !, Mk)<br />

18<br />

Alimentazione: <strong>calcolo</strong> <strong>delle</strong> <strong>misure</strong><br />

! Dal punto di vista operativo, salvo casi in cui una o più <strong>misure</strong><br />

richiede un <strong>calcolo</strong> particolare, è possibile definire direttamente<br />

solo la vista degli Eventi Primari F sul DBO : nel seguito<br />

considereremo questo caso, calcolando la view F<br />

! Spesso, nei casi reali, per semplificare la definizione di F,<br />

occorre definire prima altre view.<br />

! La struttura della view F dipende dal tipo di schema:<br />

1. Negli schemi temporali è una query con<br />

raggruppamento sulle dimensioni, mentre negli schemi<br />

transazionali è una query senza raggruppamento<br />

! La vista degli Eventi Primari verrà anche chiamata<br />

FACT_TABLE, in quanto definisce appunto le istanze della<br />

FACT_TABLE nella schema logico relazionale del Data Mart<br />

19


Esempio: DBO (schema E/R e logico)<br />

TIPO<br />

quantità<br />

COD<br />

prezzo<br />

unitario<br />

data<br />

Identificatori Fatto Vendita:<br />

I1 = {PRODOTTO,NUM.SCONTRINO}<br />

PRODOTTO<br />

(0,N) (1,1)<br />

in<br />

VENDITA<br />

(1,1)<br />

(1,N)<br />

in SCONTRINO<br />

I2 = {COD}<br />

prodotto<br />

num. scontrino<br />

PRODOTTO<br />

PRODOTTO<br />

ALIM_1<br />

ALIM_2<br />

TIPO<br />

Alimentare<br />

Alimentare<br />

SCONTRINO<br />

NUMERO DATA<br />

Scontr12 02/02/02<br />

Scontr13 02/02/02<br />

VENDITA<br />

COD PRODOTTO N_SCONTRINO QUANTITA PREZZO_UNITARIO<br />

3 ALIM_1 Scontr12 12 25<br />

2 ALIM_2 Scontr12 13 12<br />

1 ALIM_2 Scontr13 24 13<br />

20<br />

Esempio: progettazione concettuale<br />

tipo<br />

prodotto<br />

quantità<br />

prezzo-unitario<br />

prodotto +<br />

num.scontrino<br />

data<br />

num.scontrino<br />

! Dimensioni =<br />

{ prodotto, num.scontrino }<br />

! Tipologia dello Schema: transazionale (le dimensioni coincidono con I1)<br />

! <strong>Definizione</strong> <strong>delle</strong> <strong>misure</strong>: di ogni misura si deve<br />

1. Definire la tipologia: esplicita/derivata/calcolata<br />

2. Per le <strong>misure</strong> esplicite<br />

1. (alimentazione) definire il suo <strong>calcolo</strong> a partire dal DBO<br />

2. (aggregabilità) definire l’operatore di aggregazione degli eventi<br />

3. Per le <strong>misure</strong> derivate<br />

1. definire il suo <strong>calcolo</strong> per ogni evento primario<br />

2. (aggregabilità) definire l’operatore di aggregazione<br />

4. Per le <strong>misure</strong> calcolate<br />

1. definire il suo <strong>calcolo</strong> per ogni evento, primario e secondario<br />

21


Esempio: <strong>Definizione</strong> <strong>delle</strong> <strong>misure</strong><br />

! Misura QUANTITA : è una misura esplicita; essendo lo schema<br />

transazionale coincide con il valore dell’attributo quantità del DBO.<br />

Operatore di aggregazione degli eventi: SUM<br />

! Misura NUM_CLIENTI: è una misura calcolata definita come<br />

COUNT(DISTINCT NUM.SCONTRINO)<br />

! Misura NUM_VENDITE: è una misura calcolata definita come<br />

COUNT(*)<br />

TIPO<br />

VENDITA<br />

DATA<br />

Una misura calcolata verrà<br />

indicata nello schema di fatto<br />

con (C)<br />

PRODOTTO<br />

QUANTITA<br />

(C) NUM_VENDITE<br />

(C) NUM_CLIENTI<br />

NUM.<br />

SCONTRINO<br />

22<br />

Esempio: Alimentazione<br />

! Schema transazionale :<br />

vista degli Eventi Primari senza alcun raggruppamento:<br />

create view EP_VENDITA as
<br />

"select "PRODOTTO,
<br />

" " "NUM.SCONTRINO,
<br />

" " "QUANTITA
<br />

"from " "DBO.VENDITA"<br />

! Se si considera solo l’identificatore I2 : le dimensioni non contengono<br />

alcun identificatore e quindi viene assunto erroneamente lo schema<br />

come temporale: vista degli Eventi Primari con raggruppamento "<br />

select "PRODOTTO, NUM.SCONTRINO,
<br />

" "SUM(QUANTITA) AS QUANTITA
<br />

from " "DBO.VENDITA
<br />

group by "PRODOTTO,NUM.SCONTRINO"<br />

" Il <strong>calcolo</strong> risulta corretto, però si effettua un raggruppamento,<br />

un <strong>calcolo</strong> di funzione aggregata inutile.<br />

" Si devono considerare tutti gli identificatori!<br />

23


Esempio B : Vendita con schema temporale<br />

COD<br />

TIPO<br />

quantità<br />

prezzo<br />

unitario<br />

data<br />

Identificatori Fatto Vendita:<br />

I1 = {PRODOTTO,NUM.SCONTRINO}<br />

PRODOTTO<br />

(0,N) (1,1)<br />

in<br />

VENDITA<br />

(1,1)<br />

(1,N)<br />

in SCONTRINO<br />

I2 = {COD}<br />

prodotto<br />

num. scontrino<br />

tipo<br />

quantità<br />

prezzo-unitario<br />

data<br />

prodotto<br />

prodotto +<br />

num.scontrino<br />

num.scontrino<br />

! Dimensioni = { prodotto, data}<br />

! Tipologia dello Schema: temporale (le dimensioni non contengono<br />

nessuno dei due identificatori)<br />

24<br />

Esempio B: <strong>Definizione</strong> <strong>delle</strong> <strong>misure</strong><br />

! Misura QUANTITA : è una misura esplicita;<br />

essendo lo schema temporale si deve definire tramite un opportuno<br />

operatore di aggregazione dei dati del DBO:<br />

QUANTITA = SUM (quantità)<br />

Operatore di aggregazione degli eventi : SUM<br />

! Misura NUM_CLIENTI: il significato è ancora quello di conteggio<br />

distinto degli scontrini, però adesso num.scontrino non sarà più<br />

disponibile nello schema di fatto. Allora si considera come misura<br />

esplicita e definita sui dati del DBO come:<br />

NUM_CLIENTI= COUNT(DISTINCT num.scontrino)<br />

Operatore di aggregazione degli eventi : SUM<br />

! Misura NUM_VENDITE: il significato è ancora quello di conteggio <strong>delle</strong><br />

vendite, però adesso lo schema è temporale quindi si considera come<br />

misura esplicita e definita sui dati del DBO come:<br />

NUM_VENDITE= COUNT(*)<br />

Operatore di aggregazione degli eventi : SUM<br />

25


Esempio B : alimentazione<br />

! Schema temporale :<br />

vista degli Eventi Primari con raggruppamento<br />

create view EP_VENDITA as
<br />

"select "PRODOTTO,
<br />

" "DATA,
<br />

" "SUM(QUANTITA) AS QUANTITA,
<br />

" "COUNT(DISTINCT NUM.SCONTRINO) AS NUM_CLIENTI,
<br />

" "COUNT(*) AS NUM_VENDITE
<br />

"from "DBO.VENDITA V join DBO.SCONTRINO S
<br />

" " "on V.NS = S.NS"<br />

"group by PRODOTTO, DATA
<br />

""<br />

! La vista di alimentazione VENDITA deve essere ovviamente definita<br />

considerando lo schema logico del DBO. Nell’esempio abbiamo<br />

supposto che<br />

"<br />


<br />

VENDITA(NS:SCONTRINO, PRODOTTO:PRODOTTO, COD,<br />

" "QUANTITA,PREZZO_UNITARIO) " ""<br />

SCONTRINO(NS,DATA)" ""<br />

PRODOTTO(PRODOTTO,TIPO) " ""<br />

26<br />

Aggregabilità <strong>delle</strong> <strong>misure</strong><br />

! Dopo aver definito il <strong>calcolo</strong> effettivo di una misura a partire dalle<br />

istanze del DBO, è possibile valutare la sua aggregabilità<br />

! Informalmente, una misura è aggregabile su una dimensione se i<br />

suoi valori possono essere aggregati rispetto a tale dimensione<br />

! Per valutare l’aggregabilità rispetto ad una dimensione Di, si<br />

considera il pattern ottenuto da quello primario eliminando Di<br />

! Si può valutare l’aggregabilità considerando alcune istanze d’esempio<br />

oppure fare <strong>delle</strong> interrogazioni e confrontare il risultato<br />

27


Esempio B : Aggregabilità <strong>delle</strong> <strong>misure</strong><br />

! Aggregabilità rispetto a PRODOTTO: deve essere valutata<br />

considerando il raggruppamento rispetto a PRODOTTO<br />

! Raggruppamento rispetto a PRODOTTO calcolato sul DBO<br />

select "PRODOTTO, "DATA,
<br />

" "SUM(QUANTITA) AS QUANTITA,
<br />

" "COUNT(DISTINCT NUM.SCONTRINO) AS NUM_CLIENTI,
<br />

" "COUNT(*) AS NUM_VENDITE
<br />

"from "DBO.VENDITA
<br />

"group by PRODOTTO, DATA"<br />

! Le <strong>misure</strong> sono aggregabili rispetto a PRODOTTO se si ottiene lo<br />

stesso risultato raggruppando gli Eventi Primari rispetto a PRODOTTO:<br />

select "DATA,
<br />

" "SUM(QUANTITA) AS QUANTITA,
<br />

" "SUM(NUM_CLIENTI) AS NUM_CLIENTI,
<br />

" "SUM(NUM_NUMVENDITE) AS NUM_VENDITE
<br />

"from "EP_VENDITA 
<br />

"group by DATA"<br />

28<br />

Esempio B : Aggregabilità <strong>delle</strong> <strong>misure</strong><br />

! Aggregabilità rispetto a DATA: deve essere valutata considerando il<br />

raggruppamento rispetto a DATA<br />

! Raggruppamento rispetto a DATA calcolato sul DBO<br />

select "PRODOTTO, "DATA,
<br />

" "SUM(QUANTITA) AS QUANTITA,
<br />

" "COUNT(DISTINCT NUM.SCONTRINO) AS NUM_CLIENTI,
<br />

" "COUNT(*) AS NUM_VENDITE
<br />

"from "DBO.VENDITA
<br />

"group by PRODOTTO, DATA"<br />

! Le <strong>misure</strong> sono aggregabili rispetto a DATA se si ottiene lo stesso<br />

risultato raggruppando gli Eventi Primari rispetto a DATA:<br />

select "PRODOTTO,
<br />

" "SUM(QUANTITA) AS QUANTITA,
<br />

" "SUM(NUM_CLIENTI) AS NUM_CLIENTI,
<br />

" "SUM(NUM_NUMVENDITE) AS NUM_VENDITE
<br />

"from "EP_VENDITA 
<br />

"group by PRODOTTO"<br />

29


Esempio B : Aggregabilità <strong>delle</strong> <strong>misure</strong><br />

! Consideriamo le seguenti istanze del DBO e la relativa EP_VENDITA<br />

EP_VENDITA<br />

SCONTRINO<br />

PRODOTTO<br />

VENDITA<br />

30<br />

Esempio B : Aggregabilità <strong>delle</strong> <strong>misure</strong><br />

! Confronto raggruppamento rispetto a PRODOTTO<br />

! Confronto raggruppamento rispetto a DATA<br />

31


Esempio B : schema di fatto<br />

! Dall’analisi precedente risulta che :<br />

# QUANTITA e NUM_VENDITE sono aggregabili rispetto a tutte le<br />

dimensioni<br />

# NUM_CLIENTI è aggregabile rispetto a DATA ma non rispetto a<br />

PRODOTTO<br />

PRODOTTO<br />

TIPO<br />

VENDITA<br />

QUANTITA<br />

NUM_VENDITE<br />

NUM_CLIENTI<br />

DATA<br />

32<br />

Esempio B : Pattern in OLAP<br />

! Query SQL-OLAP per visualizzare il pattern {DATA,PRODOTTO} ed i<br />

suoi sub-pattern {DATA}, {PRODOTTO} e {} :<br />

i pattern per i quali NUM_CLIENTI non è aggregabile non vengono<br />

mostrati<br />

select DATA, PRODOTTO,<br />

SUM(QUANTITA) AS QUANTITA,<br />

SUM(NUM_CLIENTI) AS NUM_CLIENTI,<br />

SUM(NUM_VENDITE) AS NUM_VENDITE<br />

from EP_VENDITA<br />

group by DATA, PRODOTTO WITH CUBE<br />

having GROUPING(PRODOTTO) 1<br />

33


Esempio B : pattern in OLAP<br />

! Query SQL-OLAP per visualizzare il pattern {DATA,PRODOTTO} ed i<br />

suoi sub-pattern {DATA}, {PRODOTTO} e {} : i pattern per i quali<br />

NUM_CLIENTI non è aggregabile vengono segnalati con (NA)<br />

select DATA, PRODOTTO,<br />

SUM(QUANTITA) AS QUANTITA,<br />

NUM_CLIENTI = CASE<br />

WHEN GROUPING(PRODOTTO)=1 THEN<br />

CAST(SUM(NUM_CLIENTI) AS VARCHAR) + ' (NA)'<br />

ELSE CAST(SUM(NUM_CLIENTI) AS VARCHAR)<br />

END,<br />

SUM(NUM_CLIENTI) AS NUM_CLIENTI,<br />

SUM(NUM_VENDITE) AS NUM_VENDITE<br />

from EP_VENDITA<br />

group by DATA, PRODOTTO WITH CUBE<br />

34

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!