Download - Biglietti e Ritardi: schema E/R

Transcript
Page 1: Biglietti e Ritardi: schema E/R

1

Biglietti e Ritardi: schema E/R

Page 2: Biglietti e Ritardi: schema E/R

2

Definire uno schema di fatto per analizzare i ritardi; in particolare l’analisi deve considerare l’aeroporto di partenza, mentre per quello d’arrivo basta considerare solo la citta e lo stato

1. Si costruisce l’albero degli attributi basato sull’entità VOLOGIORN (tale entità ha come chiave {DATA,CODVOLO})

2. Si modifica l’albero aggiungendo la dipendenza CITTA STATO3. Si modifica l’albero eliminando A-SIGLA

Ritardi: Progettazione dello schema di Fatto

Page 3: Biglietti e Ritardi: schema E/R

3

Progettazione Schema di Fatto4. Si modifica l’albero eliminando CODVOLO per CITTA_ARRIVO, ovvero

riportando CITTA_ARRIVO come figlio diretto della radice; questa modifica deriva dalla specifica di analizzare i ritardi direttamente rispetto alla città di arrivo e quindi di far diventare CITTA_ARRIVO una dimensione. Si noti che nell’albero non ho più la relazione che CODVOLO è padre di CITTA_ARRIVO, ovvero nelle analisi non potrò piu’ fare dei ronon potrò

Ritardi: Progettazione dello Schema di Fatto

Page 4: Biglietti e Ritardi: schema E/R

4

Progettazione Schema di Fatto5. Si definisce lo Schema di Fatto selezionando come dimensioni

{DATA, CODVOLO, CITTA_ARRIVO} quindi tra le dimensioni ho tutti gli attributi chiave ovvero questo è uno schema transazionale

6. Si definisce la misura RITARDO e si suppone che essa sia aggregata rispetto a tutte le dimensioni tramite media: RITARDO (AVG)

Ritardi: Progettazione dello Schema di Fatto

Si considera CITTA, STATO come gerarchia condivisa : si noti che il ruolo della CITTA come figlio di AEROPORTO_PARTENZA è evidente, mentre per la dimensione occorre esplicitare il nome del ruolo CITTA_ARRIVO

Page 5: Biglietti e Ritardi: schema E/R

5

Progettazione Schema di Fatto7. Come ultimo passo devo definire il “glossario delle misure” ovvero devo

stabilire come calcolare il valore delle misure per gli eventi primari; in questo caso lo schema è transazionale, quindi il valore della misura RITARDO corrisponde direttamente al valore dell’attributo RITARDO del DB operazionale e non occorre raggruppare rispetto alle dimensioni

8. Si definisce lo Schema di Fatto selezionando come dimensioni {DATA, CODVOLO, CITTA_ARRIVO} quindi tra le dimensioni ho tutti gli attributi chiave ovvero questo è uno schema transazionale

Ritardi: Progettazione dello Schema di Fatto

ERRATA/CORRIGE• Nelle dispense distribuite la misura RITARDO e’ definita raggruppando

sulle dimensioni : {DATA, CODVOLO, CITTA_ARRIVO}• Questo è sbagliato, anche se il risultato non cambia: siccome

DATA,CODVOLO è una chiave, in un gruppo del GROUP BY ci può essere al massimo una tupla e quindi il raggruppamento non ha effetto e la funzione aggregata (AVG,MIN, MAX) restituisce il singolo valore della misura RITARDO

Page 6: Biglietti e Ritardi: schema E/R

6

Ritardi: Progettazione dello schema di Fatto a partire dallo schema relazionale del DB operazionale

Oltre allo schema E/R normalmente è disponibile anche lo schema logico (relazionale) del DB operazionale

Si suppone che i due schemi siano equivalenti (ovvero che questo sia lo schema relazionale ottenuto da un corretto progetto logico …).

Page 7: Biglietti e Ritardi: schema E/R

7

Ritardi: Progettazione dello schema di Fatto a partire dallo schema relazionale del DB operazionale

Ovviamente lo schema logico relazionale è indispensabile nella fase di progettazione dell’alimentazione, durante la quale si deve conoscere l’effettiva struttura del DB dal quale verranno prelevati i dati …

Conviene effettuare la progettazione concettuale del Datawarehouse (gli schemi di fatto) a partire dallo schema relazionale?

Con uno schema E/R è più semplice la progettazione, essendo in esso evidenziate le associazioni e le relative cardinalità

A volte lo schema E/R non è disponibile ed occorre ricavarlo dallo schema logico secondo un procedimento di reverse engineering

In presenza dello schema relazionale si può utilizzare lo strumento Wand

Page 8: Biglietti e Ritardi: schema E/R

8

Ritardi: Progettazione dello Schema di Fatto

Si considera il seguente schema logico per il DM

Page 9: Biglietti e Ritardi: schema E/R

9

Ritardi: misure derivate Supponiamo di voler analizzare anche

il numero dei voli giornalieri che hanno subito un ritardo

Nel precedente schema si fatto si aggiunge una misura (INRITARDO) a valore booleano calcolata come

if RITARDO <> 0 then INRITARDO = 1

else INRITARDO = 0

INRITARDO è una misura derivata che verrà aggregata tramite somma.

A che punto del progetto si introduce la misura INRITARDO? Sicuramente conviene indicarla durante la progettazione concettuale, e

quindi inserirla nello schema di fatto. Quindi si decide in che punto implementarla

Se l’espressione che definisce la misura è (facilmente) implementabile in Analysis Services, si può introdurla nella realizzazione dei cubi …

… altrimenti conviene introdurla già nella progettazione logica in modo da poterla calcolare (in SQL) e quindi memorizzare nella fact table

Page 10: Biglietti e Ritardi: schema E/R

10

Ritardi: misure derivate

Modifichiamo la fact table Ritardi aggiungendo INRITARDO.

Come calcolare la misura INRITARDO in SQL?

1. Si aggiunge alla tabella VOLOGIOR e si calcola tramite update (vedi dispense su Esempio Biglietti pagina 14); questa soluzione mi costringe a modificare lo schema del DB operazionale e ovviamente non sempre è possibile

2. Si definisce tramite una vista nel DB Operazionale, o meglio, si introduce nella vista che definisce l’alimentazione del DM

3. Si definisce durante l’alimentazione del DataMart utilizzando il trasferimento dati basato su una opportuna query.

Verrà utilizzato il secondo metodo, perchè facilmente implementabile grazie all’istruzione CASE di SQL

Page 11: Biglietti e Ritardi: schema E/R

11

Ritardi: Alimentazione del Data Mart - Fact Table

Alimentazione della fact table: raggruppo su DATA,CODVOLO e CITTA_ARRIVO; definiamo una view (nel DB dei Biglietti) che contiene questi attributi (si noti che per CITTA_ARRIVO devo fare un join con AEROPORTO). Considero dei join interni.

CREATE VIEW dbo.VistaRitardi ASSELECT dbo.VOLOGIOR.DATA, dbo.VOLOGIOR.CODVOLO, dbo.AEROPORTO.CITTA AS CITTA_ARRIVO, AVG(RITARDO) AS RITARDOFROM dbo.VOLOGIOR INNER JOIN dbo.VOLO ON dbo.VOLOGIOR.CODVOLO = dbo.VOLO.CODVOLO INNER JOIN dbo.AEROPORTO ON dbo.VOLO.A = dbo.AEROPORTO.SIGLAGROUP BY dbo.VOLOGIOR.DATA, dbo.VOLOGIOR.CODVOLO, dbo.AEROPORTO.CITTA

Salvo ed edito la view aggiungendogli il raggruppamento e calcolando RITARDO:

Page 12: Biglietti e Ritardi: schema E/R

12

1. Si svuota il contenuto del DM: è utile per testare le procedure di estrazione statica

2. Si copiano le dimensional table: l’unico vincolo da rispettare è quello dell’integrità referenziale: quando si copia la tabella A, devono essere già state copiate tutte le tabelle alle quali A si riferisce tramite una FK

Si definisce un pacchetto DTS per ogni passo. Siccome in ogni passo si devono semplicemente copiare delle tabelle è conveniente (è più semplice) creare tale pacchetto tramite “Importa Dati”

In uno star schema si possono copiare tutte le dimension table in un solo passo

3. Si copia il contenuto della vista nella fact table

Alimentazione del Data Mart: creazione di pacchetti DTS

Dopo aver creato e provato i pacchetti (package) per i singoli passi, si può creare un unico package che li include tutti, eseguendoli nell’ordine stabilito

Page 13: Biglietti e Ritardi: schema E/R

13

Ritardi: Alimentazione del Data Mart - Fact Table

Alimentazione della fact table: raggruppo su DATA,CODVOLO e CITTA_ARRIVO; definiamo una view (nel DB dei Biglietti) che contiene questi attributi (si noti che per CITTA_ARRIVO devo fare un join con AEROPORTO). Considero dei join interni.

CREATE VIEW dbo.VistaRitardi ASSELECT dbo.VOLOGIOR.DATA, dbo.VOLOGIOR.CODVOLO, dbo.AEROPORTO.CITTA AS CITTA_ARRIVO, AVG(RITARDO) AS RITARDOFROM dbo.VOLOGIOR INNER JOIN dbo.VOLO ON dbo.VOLOGIOR.CODVOLO = dbo.VOLO.CODVOLO INNER JOIN dbo.AEROPORTO ON dbo.VOLO.A = dbo.AEROPORTO.SIGLAGROUP BY dbo.VOLOGIOR.DATA, dbo.VOLOGIOR.CODVOLO, dbo.AEROPORTO.CITTA

Salvo ed edito la view aggiungendogli il raggruppamento e calcolando RITARDO:

Page 14: Biglietti e Ritardi: schema E/R

14

Ritardi: Alimentazione del Data Mart - svuoto il DM

Si crea un pacchetto DTS tramite editor Per prima cosa si inserisce la connessione al DM …

Page 15: Biglietti e Ritardi: schema E/R

15

Ritardi: Alimentazione del Data Mart - svuoto il DM

Si crea un pacchetto DTS tramite editor … e quindi si scrive l’istruzione SQL (si noti che occorre cancellare rispettando

l’ordine delle FK)

Page 16: Biglietti e Ritardi: schema E/R

16

Ritardi: Alimentazione del Data Mart - Dimension Table CITTA

Nel DB operazionale la città e lo stato sono specificati in AEROPORTO Prendo i dati dal DB Biglietti e precisamente dalla tabella AEROPORTO.

Si effettua un “importa dati” basato sulla queryselect distinct CITTA,STATO from AEROPORTO

Page 17: Biglietti e Ritardi: schema E/R

17

Ritardi: Alimentazione del Data Mart - Dimension Table CITTA

Page 18: Biglietti e Ritardi: schema E/R

18

Ritardi: Alimentazione del Data Mart - Dimension Table CITTA

Page 19: Biglietti e Ritardi: schema E/R

19

Ritardi: Alimentazione del Data Mart - Dimension Table CITTA

Page 20: Biglietti e Ritardi: schema E/R

20

Ritardi: Alimentazione del Data Mart

Si salva il pacchetto per alimentare Citta

Si crea un pacchetto per alimentare AEROPORTO nel DM

Si effettua un “importa dati” basato sulla query select SIGLA CITTA from AEROPORTO

Non serve il distinct perchè SIGLA è chiave

Si può fare anche senza la query, importando direttamente la tabella

Nello stesso modo si crea un pacchetto per alimentare VOLO nel DM

Si crea un pacchetto per alimentare RITARDI nel DM prendendolo dalla vista creata a pagina 5

Page 21: Biglietti e Ritardi: schema E/R

21

Ritardi: Alimentazione del Data Mart - Pacchetto complessivo

Si crea un pacchetto DTS complessivo di tutti I pacchetti creati finora, in cui viene imposto l’ordine di esecuzione

Ogni pacchetto viene inserito tramite “Attività Esegui Pacchetto” che viene collegata al pacchetto creato in precedenza

Page 22: Biglietti e Ritardi: schema E/R

22

Ritardi: Alimentazione del Data Mart - Pacchetto complessivo

… si inserisce il pacchetto per copiare i dati da Città …

Page 23: Biglietti e Ritardi: schema E/R

23

Ritardi: Alimentazione del Data Mart - Pacchetto complessivo

E quindi si crea il flusso di lavoro tra I due pacchetti:

Page 24: Biglietti e Ritardi: schema E/R

24

Ritardi: Alimentazione del Data Mart - Pacchetto complessivo

Alle varie “Attività Esegui Pacchetto” si può dare un nome (usando le proprietà)