Modulo 2 — OLAP querying · Capitolo 14

Interrogazione OLAP con Power BI

~45 min di lettura6 widget interattivi7 tavole

In questo capitolo

  1. Formulare una query OLAP e il suo SQL equivalente
  2. Gli elementi della query: misure, attributi dimensionali, filtri
  3. Gli attributi descrittivi
  4. La navigazione delle gerarchie: drill-up, drill-down, next-level, expand-all
  5. Lo slice su attributi: valori manuali e Top/Bottom N
  6. Lo slice su misure: filtri pre e post aggregazione
  7. Ordinamento e funzionalità di visualizzazione
  8. Nuovi campi: gruppi e binning
  9. Colonne virtuali e misure: CALCULATE e REMOVEFILTERS
  10. Gli esercizi guidati 2, 3 e 4
  11. Verifica le tue conoscenze

Il capitolo 13 ha chiuso la progettazione fisica del data mart. Con il capitolo 14 si apre il Modulo 2 del corso, dedicato alla costruzione e all'interrogazione del data warehouse con strumenti commerciali: il data mart di esempio è quello progettato in Indyco Builder sul benchmark TPC-D (capitolo 15), e l'interrogazione avviene con Power BI. Le slide del modulo spiegano un'idea centrale: una query OLAP si formula scegliendo una visualizzazione e trascinando attributi nelle sue proprietà — ma dietro ogni visualizzazione c'è una query SQL, con misure da aggregare, attributi dimensionali per creare i gruppi e filtri. Su questo nucleo si innestano la navigazione delle gerarchie, lo slice, l'ordinamento, i gruppi e il binning, le colonne virtuali e le misure definite con CALCULATE e REMOVEFILTERS.

1. Formulare una query OLAP e il suo SQL equivalente

Le query OLAP in Power BI si formulano in due passi: si sceglie una visualizzazione e si trascinano gli attributi (drag&drop) nelle proprietà della visualizzazione. La stessa query può essere emessa in modi diversi, cambiando solo la visualizzazione: i dati sono gli stessi. La slide mostra l'SQL equivalente, che interroga la fact table ft e le dimension table del modello TPC-D con i prefissi p_ (part), s_ (supplier), o_ (order) e d_ (date):

FORMULAZIONE DELLA QUERY 1. Scegli una visualizzazione tabella · bar chart · matrice trend · mappa · … 2. Drag&drop degli attributi nelle proprietà della visualizzazione SQL equivalente SELECT d.year, s.region, p.mfgr, sum(ft.quantity) FROM ft, dt_part p, dt_supp s, dt_order o, dt_date d WHERE ft.idpart=p.id AND ft.idsupp=s.id AND ft.idorder=o.id AND o.iddate=d.id stessa query, stessi dati la visualizzazione cambia, i dati no ogni drag&drop di un attributo modifica la SELECT, la WHERE o la GROUP BY
Tavola 14.1 — La formulazione di una query OLAP. Si sceglie una visualizzazione e si trascinano gli attributi nelle sue proprietà; la query SQL equivalente combina la fact table con le dimension table coinvolte, aggrega le misure e raggruppa per gli attributi dimensionali.

La corrispondenza fra gesti e clausole SQL è diretta: gli attributi trascinati come assi o righe/colonne finiscono nella SELECT e nella GROUP BY; le misure vengono aggregate (qui sum(ft.quantity)); i filtri finiscono nella WHERE. I join fra fact table e dimension table sono impliciti nel modello, non vanno scritti a mano.

2. Gli elementi della query: misure, attributi dimensionali, filtri

Le slide definiscono esplicitamente i tre elementi della query OLAP:

OLAP QUERY ELEMENTS Misure da aggregare l_quantity l_extendedprice l_tax Attributi dimensionali per creare i gruppi d.year · s.region p.mfgr Filtri condizioni di selezione p.type = 'ECONOMY …' measures → aggregate · dimensional attributes → group by · filters → where
Tavola 14.2 — Gli elementi della query OLAP. Le misure vengono aggregate, gli attributi dimensionali creano i gruppi, i filtri selezionano i dati; nella query SQL corrispondono rispettivamente alla lista aggregata della SELECT, alla GROUP BY e alla WHERE.

3. Gli attributi descrittivi

Nel modello multidimensionale del Modulo 2, alcuni attributi sono descrittivi: servono a descrivere, non a raggruppare. La regola delle slide è netta: gli attributi descrittivi possono essere usati solo in combinazione con l'attributo che descrivono. Nell'albero degli attributi del capitolo 15, p_name descrive p_partkey, s_name descrive s_suppkey, c_name descrive c_custkey: possono comparire in una visualizzazione (per esempio come etichetta in hover) solo quando l'attributo che descrivono è già presente nella query.

Perché questa regola?

Un attributo descrittivo usato da solo come gruppo non avrebbe alcun significato di aggregazione: p_name identifica un singolo prodotto, ma senza p_partkey non si capisce a quale livello di dettaglio raggruppare — e il risultato dipenderebbe dal nome, che non è una chiave. La coppia chiave + descrizione è invece informativa: la chiave definisce il gruppo, il nome lo rende leggibile.

4. La navigazione delle gerarchie: drill-up, drill-down, next-level, expand-all

La navigazione delle gerarchie è abilitata quando le gerarchie sono usate in alcune (non tutte) visualizzazioni. Le slide definiscono quattro operazioni:

OperazioneSignificato
Drill-upcorrisponde al roll-up: sale al livello più aggregato della gerarchia
Drill-downmodalità interattiva per slice-and-drill: scende nel dettaglio, livello per livello
Next-levelscende di un livello e sostituisce il livello corrente con quello più fine della gerarchia
Expand-allscende di un livello e mantiene il livello corrente

La differenza fra le ultime due è il punto delicato: next-level rimpiazza il livello corrente (la visualizzazione mostra solo il nuovo livello, più fine); expand-all lo mantiene (il nuovo livello si aggiunge al precedente, che resta visibile). Entrambi eseguono un drill-down, ma con un comportamento diverso della visualizzazione.

NAVIGAZIONE DELLE GERARCHIE Drill-up roll-up · sale al livello più aggregato Next-level drill-down e sostituisce il livello corrente Drill-down modalità interattiva slice-and-drill Expand-all drill-down e mantiene il livello corrente Abilitazione gerarchie usate in alcune (non tutte) le visualizzazioni next-level: il nuovo livello rimpiazza il corrente expand-all: si aggiunge next-level sostituisce · expand-all mantiene: entrambi scendono di un livello
Tavola 14.3 — Le quattro operazioni di navigazione delle gerarchie. Drill-up sale (roll-up), drill-down scende in modalità interattiva; next-level e expand-all scendono di un livello ma, rispettivamente, sostituendo o mantenendo il livello corrente.

Simulazione: navigare la gerarchia

Avanzate le operazioni nell'ordine corretto e osservate che cosa succede al livello mostrato dalla visualizzazione.

5. Lo slice su attributi: valori manuali e Top/Bottom N

Lo slice si esegue aprendo il pannello dei filtri: si può aggiungere un attributo o una misura (ad esempio mfgr), oppure espandere un attributo o una misura già usati nella query (ad esempio region). Sugli attributi, lo slice consiste nel selezionare uno o più valori categorici, in due modi:

SLICE SU ATTRIBUTI Manuale spuntare uno o più valori categorici dell'attributo region: [ ] Africa [x] Asia [ ] Europe [ ] America Top/Bottom N primi/ultimi N valori in base a un criterio Top 10 per sum(quantity) Bottom 5 per count(orders) slice = aprire il pannello dei filtri · aggiungere o espandere un attributo/misura
Tavola 14.4 — Lo slice su attributi. Si aprono i filtri aggiungendo un attributo (o espandendone uno già in query) e si selezionano uno o più valori, manualmente o con Top/Bottom N basato su un criterio.

6. Lo slice su misure: filtri pre e post aggregazione

Sulle misure, lo slice seleziona un intervallo di valori, e qui sta la distinzione fondamentale fra i due momenti in cui il filtro può agire:

FiltroQuando agisceSQL
Post-aggregazionesul risultato aggregato, come una HAVINGSELECT [..] GROUP BY [..] HAVING SUM(quantity) > 12M
Pre-aggregazionesulle singole tuple, come una WHERESELECT [..] WHERE quantity > 10 [..]

La differenza pratica è netta. Il filtro post-aggregazione si applica quando si filtra sull'attributo che è già nel pannello: l'intervallo selezionato viene confrontato con il valore aggregato (una HAVING). Il filtro pre-aggregazione richiede di trascinare di nuovo la misura dal pannello Fields: solo così il filtro può agire sulle tuple prima dell'aggregazione (una WHERE).

SLICE SU MISURE Post-aggregazione filtra il risultato aggregato quando l'attributo è già nel pannello SELECT [..] GROUP BY [..] HAVING SUM(quantity) > 12M Pre-aggregazione filtra le tuple prima di aggregare richiede di riscaricare la misura SELECT [..] WHERE quantity > 10 GROUP BY [..] HAVING vs WHERE: il momento del filtro cambia il risultato post = sul gruppo · pre = sulla tupla (riscaricare la misura da Fields)
Tavola 14.5 — Lo slice su misure. Il filtro post-aggregazione agisce come una HAVING sul valore aggregato; il filtro pre-aggregazione agisce come una WHERE sulle tuple, e richiede di trascinare di nuovo la misura dal pannello Fields.

7. Ordinamento e funzionalità di visualizzazione

L'ordinamento si ottiene in due modi: cliccando su un attributo nella visualizzazione, oppure cliccando i tre puntini nell'angolo in alto a destra della visualizzazione stessa.

Le slide presentano poi quattro funzionalità di visualizzazione:

FUNZIONALITÀ DI VISUALIZZAZIONE Legend spezza i mark in più sotto-mark Small multiples spezza il grafico in più sotto-grafici Visual / Data point table tabella del grafico valori originali pre- aggregazione ordinamento: click sull'attributo o sui tre puntini in alto a destra
Tavola 14.6 — Le funzionalità di visualizzazione. La legend spezza i mark, i small multiples spezzano il grafico in sotto-grafici; la visual table e la data point table mostrano rispettivamente il grafico come tabella e i valori originali prima dell'aggregazione.

8. Nuovi campi: gruppi e binning

Dal clic destro su un attributo (Create > ...) si possono creare nuovi campi:

CREATE > GROUP Group (discreto) membri presi manualmente da un attributo in un nuovo attributo (una categoria unica) Group (numerico) discretizza in bin (intervalli) es. saldo conto dei clienti solo binning equi-width right-click su un attributo > Create > Group (discrete or numeric attribute)
Tavola 14.7 — I nuovi campi creati con Group. Un gruppo discreto raccoglie manualmente alcuni membri di un attributo; un gruppo numerico discretizza i valori in bin, con il solo binning equi-width supportato.

9. Colonne virtuali e misure: CALCULATE e REMOVEFILTERS

Le nuove colonne

Da Table tools > New column si crea una colonna virtuale basata su una formula personalizzata. Gli esempi delle slide:

Le nuove misure

Da Table tools > New measure si definisce una funzione per aggregare i dati, da usare al posto di SUM(), AVG() ecc. Gli esempi delle slide, tutti nella fact table:

Il meccanismo di CALCULATE

Le misure avg_profit_by_customer e AvgNationSales mostrano due modi di fare la stessa cosa: dividere un aggregato per un conteggio di valori distinti. La differenza è nel denominatore: custkey conta i clienti, nation conta le nazioni. In entrambi i casi il risultato dipende dal contesto di filtro corrente — che CALCULATE + REMOVEFILTERS permette di modificare esplicitamente.

10. Gli esercizi guidati 2, 3 e 4

Le slide chiudono con tre esercizi guidati, che riassumono tutte le funzionalità del capitolo.

Esercizio 2: creare i grafici

Quattro visualizzazioni da costruire:

Esercizio 3: simulare sessioni OLAP

Tre sessioni (3.1–3.3), ciascuna con più passi marcati [W] (un nuovo foglio di lavoro per ogni passo):

Esercizio 4: query OLAP con funzionalità avanzate

Quattro query (4.1–4.5), con obiettivo primario rispondere alla query e obiettivo secondario riprodurre il grafico dato:

Nota del redattore

L'esercizio 4.3 contiene la trappola tipica dei quesiti d'esame: «Make sure that you count the customers who made orders, not just those in the DT». Il denominatore va calcolato sulla fact table (clienti che compaiono negli ordini), non sulla dimension table (tutti i clienti). È lo stesso problema del DISTINCTCOUNT discusso nella sezione 9.

Verifica le tue conoscenze

Come si formula una query OLAP in Power BI e che cosa c'è dietro?

In due passi: scelta di una visualizzazione e drag&drop degli attributi nelle proprietà della visualizzazione. Dietro c'è una query SQL che combina fact table e dimension table, aggrega le misure e raggruppa per gli attributi dimensionali; la stessa query può essere emessa in modi diversi cambiando solo la visualizzazione.

Quali sono i tre elementi della query OLAP?

Misure (da aggregare), attributi dimensionali (per creare i gruppi), filtri (condizioni di selezione). Nella query SQL corrispondono rispettivamente alla lista aggregata della SELECT, alla GROUP BY e alla WHERE.

Come si usano gli attributi descrittivi?

Solo in combinazione con l'attributo che descrivono (ad esempio p_name con p_partkey, s_name con s_suppkey): da soli non definiscono un livello di aggregazione significativo, come coppia chiave+descrizione rendono leggibile il gruppo.

Quali sono le quattro operazioni di navigazione delle gerarchie?

Drill-up (roll-up, sale al livello aggregato); drill-down (modalità interattiva slice-and-drill); next-level (scende di un livello e sostituisce il livello corrente); expand-all (scende di un livello e mantiene il livello corrente). La navigazione è abilitata quando le gerarchie sono usate in alcune, non tutte, le visualizzazioni.

In che cosa consiste lo slice su attributi?

Si apre il pannello dei filtri (aggiungendo un attributo o espandendone uno già usato) e si selezionano uno o più valori categorici: manualmente, spuntando i valori, oppure con Top/Bottom N in base a un criterio.

Che differenza c'è fra filtro pre e post aggregazione su una misura?

Il post-aggregazione filtra il risultato aggregato (una HAVING: GROUP BY [..] HAVING SUM(quantity) > 12M) e si applica quando l'attributo è già nel pannello. Il pre-aggregazione filtra le tuple (una WHERE: WHERE quantity > 10) e richiede di riscaricare la misura dal pannello Fields.

Come si ordina una visualizzazione e quali funzionalità di visualizzazione esistono?

L'ordinamento: click su un attributo nella visualizzazione oppure sui tre puntini in alto a destra. Le funzionalità: Legend (spezza i mark in sotto-mark), Small multiples (spezza il grafico in sotto-grafici), Visual table (il grafico come tabella), Data point table (i valori originali prima dell'aggregazione).

Che cosa sono i gruppi e il binning?

Group (discreto): si prendono manualmente alcuni membri di un attributo e li si mette in un nuovo attributo. Group (numerico): si discretizza un valore numerico in bin, con solo binning equi-width supportato (es. il saldo del conto dei clienti, bin size 1000 nell'esercizio 4.1).

Che cosa fa RELATED() nelle nuove colonne?

Attraversa la relazione fra tabelle per leggere un valore dalla tabella correlata: ad esempio profit = 'dw ft'[quantity] * RELATED('dw dt_part'[retailprice]) legge il prezzo dalla dimension table partendo da una riga della fact table.

Che cosa permettono di fare CALCULATE e REMOVEFILTERS?

CALCULATE associa un calcolo a una condizione di filtro (es. DaysWith25UnitsBought = CALCULATE(DISTINCTCOUNT('dw dt_order'[id_date]), 'dw ft'[quantity] > 25)). Il filtro in CALCULATE può manipolare la clausola group-by: REMOVEFILTERS('dw dt_customer'[nation]) elimina il filtro imposto dal group-by sulla nazione, dando il totale di regione per il calcolo delle percentuali.

Qual è la trappola dell'esercizio 4.3?

Contare i clienti che hanno fatto ordini, non tutti quelli nella dimension table: il denominatore di AvgOfTotSalesPerCustomer va calcolato sulla fact table, con DISTINCTCOUNT sui clienti presenti negli ordini.