Data warehousing con SQL Server ! SQL Server è un RDBMS (Relational DataBase Management System) ! Analysis Services è un componente di SQL Server che offre un insieme di funzionalità di supporto al data warehousing ! Componenti per il data warehousing " OLAP Server: è il server analitico dei dati rappresenta i dati analitici del DW in forma multidimensionale, usando i concetti di cubo, dimensione e misura " OLAP Manager : strumento di amministrazione dei dati analitici 1 Analysis Services (AS) ! Punto di partenza : " DW relazionale organizzato secondo uno schema dimensionale (star schema, snowflake schema) " Il DW relazionale non deve essere necessariamente un DB gestito con SQL Server ! Obiettivo : " I dati del DW relazionale vengono rappresentati ed analizzati in forma multidimensionale usando la nozione di cubo (data cube) ! I cubi sono contenuti in un OLAP database gestiti dall OLAP Server ! Un cubo recupera i dati dal DW relazionale che è definito come sorgente dati (data source) all interno dell OLAP Database ! Un OLAP database può avere varie data source ! Un cubo può recuperare dati da una singola data source ! Diversi cubi (di uno stesso OLAP database) possono recuperare dati da data source differenti 2 Strumenti OLAP nell architettura di un DW # Architettura a 2 livelli (situazione simile a quella a 3 livelli ) Livello delle! sorgenti! Dati operazionali" Dati esterni" Strumenti ETL" Data Warehouse! Strumenti" OLAP" ! Livello di ! alimentazione! Livello del! warehouse! Livello di analisi CUBO Schema Multidimensionale Lo strumento OLAP analizza i dati del DW, ovvero dati che hanno già una struttura multidimensionale (schema a stella/snowflake) ! Ha una connessione dati con il DW ! Non ha nessuna connessione con i Dati Operazionali 3 Cubi nelle architetture a 2 e 3 livelli ! Dato uno schema di fatto ed il corrispondente schema logico (stella/snowflake) si costruisce il cubo corrispondente, che è praticamente definito in modo univoco essendo le scelte di progettazione già state realizzate ! Nel cubo 1. Si aggiungono eventuali misure derivate e calcolate. In particolare, per uno schema di fatto vuoto si introduce la misura di conteggio degli eventi 2. Si definiscono gli operatori di aggregazione 3. Si definiscono alcuni aspetti specifici, quali il membro ALL per le dimensioni ! Dal punto di vista concettuale la definizione del cubo non richiede altro; tuttavia nel costruire un cubo si possono gestire una serie di altri concetti, in particolare quelli legati all efficienza del sistema 4 Architetture ad 1 livello ! Questa architettura è caratterizzata dal fatto che al DW non corrisponde un nuovo DB, ma lo schema logico del DW è implementato attraverso delle viste nel DB Operazionale Per la Fact Table si definirà sicuramente una vista in quanto occorre definire gli eventi primari e le misure ! Per le Dimension Table 1. si può definire una vista 2. si può usare una table del DB Operazionale con struttura simile 3. Si può definire e costruire direttamente nello strumento OLAP ! ! Dati operazionali" Livello delle sorgenti Middleware" Livello del warehouse Strumenti" OLAP" Livello di analisi Lo strumento OLAP ha una connessione con il DB Operazionale 5 Architetture ad 1 livello ! Problemi di efficienza " ! È ora evidente che le operazioni sul DB operazionali (OLTP, On-Line Transactional Processing) e siano mischiate con quelle di tipo analitico OLAP (OLAP, On-Line Analytical Processing) Se si prescinde da questi aspetti di efficienza, un’architettura ad un livello può essere utile per effettuare analisi semplici in modo immediato, senza passare attraverso la realizzazione di un nuovo DB. " Ad esempio, uno schema di fatto transazionale contenente solo una dimensione data ed una o più dimensioni degenere può essere implementato in modo immediata e semplice 6 Analysis Services : Editor del Cubo ! Il sistema OLAP di Analysis Services, così come un qualsiasi altro sistema OLAP, ha concetti e strumenti propri per definire uno schema multidimensionale (un cubo), concetti e strumenti più o meno sofisticati e spesso proprietari (cioè propri del particolare sistema OLAP e differenti da sistema a sistema) ! Ad esempio in Analysis Services lo strumento (automatico) per definire le dimensioni consente di scegliere se usare uno schema a stella oppure a fiocco di neve o altro, quale attributo o espressione usare come nome di un livello e così via. ! Vedere esempio DimensioneDistretto $ In un’architettura a 2 o 3 livelli, dove è già stato progettato lo schema di fatto e lo schema logico, di Analysis Services sono sufficienti solo quei concetti/strumenti che ci consentono di 1. Definire gli operatori di aggregazione per le misure 2. Definire Misure Derivate e Calcolate 3. Visualizzare i dati del fatto in modo multidimensionale, effettuando operazioni di roll-up e drill-down 7 Schemi multi-dimensionali in AS! ! Dimensioni e attributi dimensionali si chiamano livelli ! I valori delle dimensioni e degli attributi dimensionali si dicono membri livelli dimensione STORE (ALL) membri STORE CITY STATE COUNTRY (ALL) Ditutto RE EmiliaR Italia ALL NonSoloX RE EmiliaR Italia ALL NonSoloY MO EmiliaR Italia ALL NonSoloZ RM Lazio Italia ALL ... ... ... ... ALL 8 Schemi multi-dimensionali in AS! Membri e Livelli: ! le dimensioni contengono solitamente il livello speciale (ALL) che contiene il solo membro All che denota tutti i membri della dimensione Organizzazione in Livelli: ! ! ! Nel modello DFM la gerarchia degli attributi dimensionali di una dimensione è un albero: un nodo può avere più figli In AS la gerarchia degli livelli di una dimensione è un cammino dell’albero : un nodo può avere al massimo un figlio In AS L’organizzazione in livelli corrisponde alla definizione di una relazione padre-figlio tra i membri di livelli successivi (ogni membro di un livello si raggruppa nel membro padre) " il membro All è padre dei membri Italia, Francia, ... " il membro Italia è padre dei membri EmiliaR, Lazio, .. " ! Misure : Le misure sono considerate come membri di una dimensione speciale chiamata Measures (presente in tutti i cubi) 9 DFM e AS : terminologie a confronto! ! Negli schemi DFM, per gli attributi dimensionale si usa la terminologia degli alberi: CITY è il padre di STATE $ Un cammino dalla radice ad una foglia dell’albero individua un percorso di navigazione sul quale effettuare roll-up e drill-down ! In AS la relazione padre-figlio è riferita ai membri, e risulta “invertita”: il membro EmiliaR (di STATE) è padre del membro RE (di CITY) $ Nel linguaggio MDX sono definite diverse funzioni sulla relazione padre-figlio : CHILDREN, DESCENDANT, ! ! I livelli descrivono la struttura gerarchica della dimensione dal livello più alto – detto anche livello padre - (più aggregato) al livello più basso – detto anche livello figlio - (più dettagliato) dei dati. Dalle Gerarchie del DFM ai Livelli di AS ! Le dimensioni/livelli del cubo sono univocamente definite dalle dimensioni/gerarchie dello schema di fatto ! Data una gerarchia, per ogni cammino dalla dimensione (radice) alle foglie si deve definire un dimensione nel cubo con un numero di livelli pari alla lunghezza del cammino " Se la gerarchia è un albero puro (no condivisioni/convergenze, no attributi cross-dimensionali, no attributi multipli) nel cubo ci saranno un numero di dimensioni pari al numero di foglie dell albero Dimensione VOLO-ORADIPARTENZA Con livelli VOLO ORA_DI_PARTENZA 11 Dalle Gerarchie del DFM ai Livelli di AS! gr up po di mark eting re pa rto gerarchia ca tego ria tip o città de lla mar ca marc a attributo dimensionale pr od otto an no gio rn o va canz a re spo nsa bile d elle vend ite dist ret to d i ven dita VE NDITA da ta tr ime stre mese se ttima na qu an tità v end uta inca sso nu m. client i pr ezzo un itar io ! ! Dimensione prodotto, con tre cammini 1. Prodotto % Tipo % GruppoDiMarketing Prodotto % Tipo % Categoria % Reparto Prodotto % Marca % CittaDellaMarca 2. 3. ne go zio città de l re gio ne sta to ne go zio Alla dimensione Prodotto corrispondono tre dimensioni di AS (ovvero nel cubo VENDITA di AS si definiscono tre dimensioni) 1. [Prodotto-GruppoDiMarketing] o [GruppoDiMarketing] Prodotto % Tipo % GruppoDiMarketing 2. [Prodotto-Reparto] o [Reparto] Prodotto % Tipo % Categoria % Reparto 3. [Prodotto-CittaDellaMarca] o [CittaDellaMarca] Prodotto % Marca % CittaDellaMarca 12 DFM e AS : terminologie a confronto! ! Schema di Fatto DFM: relazione padre-figlio Prodotto % Tipo % GruppoDiMarketing Prodotto è padre di Tipo, Tipo è padre di GruppoDiMarketing ! Cubo AS : relazione padre-figlio [Prodotto-GruppoDiMarketing] o [GruppoDiMarketing] Prodotto % Tipo % GruppoDiMarketing GruppoDiMarketing è padre di Tipo, Tipo è padre di Prodotto ! GruppoDiMarketing !!Tipo !!!Prodotto rappresentazione in AS 13 Dimensioni: livello (ALL) e membro ALL ! Dimensione CITTA_ARRIVO con due livelli : Citta % Statto CITTA STATO (ALL) MARSIGLIA FRANCIA ALL PARIGI FRANCIA ALL LONDRA INGHIL ALL ... ... ! ! Nella visualizzazione della dimensione, il livello (ALL) è chiamato (Totale) ed il membro ALL è totale CITTA_ARRIVO ! Nelle proprietà della dimensione si può eliminare il livello (ALL) (All level = No) e cambiare il nome del membro ALL: livelli membri 14 Dimensioni: livello (ALL) e membro ALL ! Per definizione, il membro ALL (e di conseguenza il livello (ALL) che lo contiene) deve essere presente in ogni dimensione in quanto consente di avere i totali per quella dimensione, ovvero di visualizzare pattern senza la dimensione in questione ! ! Non introdurre il membro ALL per una dimensione può comportare dei vantaggi dal punto di vista dell efficienza: intuitivamente, si evita di pre-calcolare i valori corrispondenti ad ALL Se non si introduce il membro ALL, i totali per quella dimensioni possono essere comunque calcolati attraverso espressioni MDX. ! Nelle nostre dimensioni definiremo sempre il membro ALL! ! Ricordiamo che è possibile ottenere il membro ALL in SQL-OLAP, attraverso group by with ROLLUP Vendite SELECT case when(grouping(citta)=1) then 'TOTALE' else Libro as Libro, sum(numero) as numero, sum(incasso) as incasso FROM Vendite group by Libro with ROLLUP Dimensioni e livelli in AS! ! Regola : Il numero dei membri di ogni livello deve essere sempre maggiore o uguale al numero dei membri del livello padre superiore. $ ogni livello deve determinare funzionalmente il livello padre superiore ! La regola può essere violata (genera un warning e non un errore) Violare la regola significa realizzare una dimensione dove un livello (esempio: Stato) non determina funzionalmente il livello padre (esempio: Citta) 15 Dimensioni e livelli in AS! PARTENZA CodVolo% Da% Citta % Stato Implementazione errata Implementazione corretta 17 Nota! ! ! Perché un warning e non un errore? Ha senso violare la regola? Ha senso realizzare una dimensione dove un livello non determinare funzionalmente il livello padre ? genere VENDITA autore libro numero incasso data mese anno arco multiplo (AM) ! Archi multipli: ha senso realizzare una dimensione dove un livello (Libro) non determinare funzionalmente il livello padre (Autore) ! ! Ho più autori che libri Il numero dei membri di Libro minore del numero dei membri del livello padre autore % warning altrimenti nessun warning! 18 Dalle Gerarchie del DFM ai Livelli di AS ! Per costruire una dimensione/livelli di AS 1. Si considera lo schema logico 2. Si seleziona la Dimension table corrispodente ; nel caso di snowflake schema si selezionano le dimension table corrispondente e si verifica che siano correttamente legate tramite join 3. Si definiscono i livelli (vedere esempi di dettaglio) 4. Si decide se tenere o meno un membro ALL 5. Si definiscono gli eventuali operatori di aggregazione particolari per questa dimensione ! Oltre alla struttura della dimensione si devono decidere altri aspetti, in particolare se la dimensione può essere condivisa da più dimensioni 19 Esempio : DimensioneDistretto ! ! L esempio vuole evidenziare come l uso di AS su un DM già ben progettato è molto semplice ed evita di dover utilizzare strumenti propri di AS Consideriamo un caso frequente, ovvero quello di un attributo dimensionale derivante dalla composizione di più attributi Esempio: Nella Tabella Negozio, il distretto di vendita è STATO_DISTRETTO+NDISTRETTO ! I valori di tale attributo dimensionale vengono ricavati tramite una vista e quindi riportati in una Dimension_Table del DM con struttura DT_NEGOZIO(NOME, NOMEDISTRETTO, STATO_DISTRETTO) 20 Esempio : DimensioneDistretto ! Realizzare tale dimensione in AS, partendo dalla DT_NEGOZIO è immediato: 1) si seleziona DT_NEGOZIO 2) si definiscono i tre livelli iniziando da StatoDistretto (2.a) 1) ! 2.a) 2.b) 2.c) Visualizzazione della dimensione ottenuta: 21 Esempio : DimensioneDistretto ! ! Realizzare tale dimensione in AS, senza usare DT_NEGOZIO ma direttamente su NEGOZIO non è immediato in quanto occorre effettuare in AS quelle le manipolazioni (ricavare il valore di NomeDistretto) effettuate invece in fase di alimentazione del DM In definitiva, molti strumenti propri di AS non sono indispensabili quando si parte da un DM già ben progettato! 22 Operatore di aggregazione AVG in AS ! CostoMedioBiglietto (CMB) aggregato tramite AVG CodVolo ALIT1 ALIT1 ALIT2 DATA GEN1 GEN2 GEN2 Compagnia DATA ALITALIA GEN1 ALITALIA GEN2 Compagnia Mese ALITALIA GEN ! ! INCASSO NUM_BIG 20 2 40 4 30 6 SUM SUM INCASSO 20 70 INCASSO 90 CMB 10 10 5 AVG NUM_BIG 2 10 NUM_BIG 12 CMB 10 7,5 CMB 8,33 In Analysis Services una misura con operatore di aggregazione algebrico deve essere definito tramite una misura calcolata Nel caso della media, essendo AVG(CM)=SUM(CMB)/count(*): 1. Si definisce la misura CMB_Base con oper. di aggregazione SUM 2. Si definisce la misura di supporto Conteggio, aggregata con COUNT 3. Si definisce CMB calcolata come CMB_Base/Conteggio ! CMB_Base e Conteggio possono non essere visualizzate 23 Esempio di cubo: Ritardi_NEW! ! Schema di Fatto Ritardi_New ! Schema Logico snowFlake: FACT TABLE RITARDINEW(CODVOLO:VOLO, ANNO,INIZIOMESE, CITTAARRIVO:CITTA, RITARDO,NUMRITARDI) DIMENSION TABLEs VOLO(CODVOLO,COMPAGNIA, AEROP_PART:AEROPORTO) AEROPORTO(SIGLA, CITTA_PART:CITTA) CITTA (CITTA,STATO) ! In AS si definiscono 3 Dimensioni condivise (ad una gerarchia corrispondono più dimensioni in AS, quindi il nome spesso contiene il nome della foglia che si raggiunge) 1) 2) 3) STATO_PARTENZA STATO_ARRIVO oppure CITTA_ARRIVO (infatti c’è solo un cammino) COMPAGNIA 24 Database OLAP: Ritardi ! Si crea un nuovo DB OLAP che conterrà tutti gli oggetti multidimensionali (cubo, dimensioni condivise) 1) Si definisce l’origine dei dati, ovvero il collegamento al DM 2) Si seleziona la voce relativa a SQL Server e quindi dall’elenco dei DB disponibili - si seleziona il DM ! Se si apportano modifiche al DM, per renderle visibili anche nel DB OLAP può essere necessario aggiornare l’origine dati 25 Dimensione: STATO_PARTENZA 1) Si seleziona la tabella contenente la radice della dimensione 2) Si aggiungono le altre tabelle che contengono gli attributi dimensionale, controllando le relazioni di join 26 Dimensione: STATO_PARTENZA 1) Si seleziona la tabella contenente la radice della dimensione 2) Si aggiungono le altre tabelle che contengono gli attributi dimensionale, controllando le relazioni di join 27 Cubo Ritardi ! Dopo aver generato tutte le dimensioni condivise, si passa alla generazione del cubo 1) Si userà l’editor (la procedura guidata infatti è basata su concetti propri di AS !) 2) Si seleziona la fact table; un cubo è basato su una ed una sola fact table 3) Se la Fact Table è vuota si ha un warning del tipo: 28 Cubo Ritardi ! Dopo aver generato tutte le dimensioni condivise, si passa alla generazione del cubo 4) Si definiscono le dimensioni degenerei ANNO e INIZIOMESE 5) Si inseriscono le dimensioni condivise definite in precedenza, una alla volta. 6) Inserimento CITTA_ARRIVO: il join con la fact table viene automaticamente definito considerando il nome, quindi essendo nomi diversi non viene automaticamente generato In ogni caso, meglio generare manualmente i Join! 29 Cubo Ritardi 7) Si genera il join. A questo punto la dimensione CITTA_ARRIVO per il cubo è definita. 8) Inserimento STATO_PARTENZA. Il sistema introduce tutte le tabelle che servono per definire la dimensione. PROBLEMA: la tabella CITTA viene usata due volte, in due dimensioni. Questo non è corretto, è come se si stesse definendo una convergenza. Il sistema non consente questo ciclo: 30 Cubo Ritardi ! 9) Per evitare il problema precedente, ogni qualvolta c’è una tabella che viene usata in più dimensioni tramite condivisione, si assegna un alias a ciascuna occorrenza Inserimento dimensione COMPAGNIA: in questo caso COMPAGNIA è nella stessa tabella VOLO, quindi non è necessario introdurre un alias per volo 31 Cubo Ritardi ! 9) ! Per evitare il problema precedente, ogni qualvolta c’è una tabella che viene usata in più dimensioni tramite condivisione, si assegna un alias a ciascuna occorrenza Inserimento dimensione COMPAGNIA: in questo caso COMPAGNIA è nella stessa tabella VOLO, quindi non è necessario introdurre un alias per volo Tutte le dimensioni sono state inserite: si noti il differente simbolo per quelle condivise 32 Cubo Ritardi : misure ! Misura addittiva NUMRITARDI, la definizione è immediata ! Per la misura Misura RITARDO, aggregata tramite AVG, si deve usare una misura calcolata come spiegato a pagina 17. Il procedimento è mostrato nella slide che segue 33 Cubo Ritardi : Misura Ritardo con AVG 34 Esempio : DimensioneDistretto ! Consideriamo il pattern STATO_PARTENZA.CITTA, CITTA_ARRIVO.STATO e visualizziamo limitandoci a “CITTA_ARRIVO.STATO = ‘ITALIA’) 35 Esempio : DimensioneDistretto ! Verifica dei risultati, calcolando le misure direttamente sugli eventi primari tramite SQL: 36 Calcolo delle misure: ottimizzazione ! ! ! Un significativo aumento delle prestazioni può essere ottenuto precalcolando i dati aggregati di uso più comune Misure definite con operatori Distributivi ed Algebrici permettono di calcolare dati aggregati a partire direttamente da dati parzialmente aggregati L ottimizzazione usa il concetto di vista materializzata: " Ogni pattern secondario corrisponde ad una vista sul pattern primario " Vengono materializzate le viste (ovvero pre-calcolate e memorizzate in tabelle) corrispondenti ad alcuni pattern secondari " La scelta delle viste da materializzare è basata sul compromesso tra diversi vincoli, i principali dei quali sono • Tempo di costruzione ed aggiornamento delle viste materializzate • Spazio a disposizione $ Varie tecniche di ottimizzazione sono generalmente già implementate nei sistemi OLAP e l utente può configurare alcuni parametri, quali lo spazio a disposizione per memorizzare i dati aggregati $ Nel seguito vedremo velocemente questi concetti in AS 37 Archiviazione del cubo ! Il calcolo delle viste materializzate avviene in fase di archiviazione del cubo ! Noi abbiamo già scelto come modello di progettazione logica il modello ROLAP, infatti stiamo considerando un DM implementato in un DB relazionale Con ROLAP i dati restano nello star/snowflake schema e anche le aggregazioni verranno messe in tabelle .. ! 38 Archiviazione del cubo Questa interfaccia consente di calcolare le a ! Trascurare eventuali warning ! 39 Archiviazione del cubo Le aggregazioni vengono salvate in tabelle nel DM ! ! ! Prendiamo una di queste tabelle CON MOLAP le tabelle non vengono generate 40