powerpivot e dax
TRANSCRIPT
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
PowerPivot e DAX
Marco Pozzan
BI Analyst , [email protected]
www.marcopozzan.it
Agenda: Che cosa è PowerPivot? Installazione PowerPivot Demo su powerpivot Che cosa è DAX? Colonne calcolate Evaluation Context Esempio pratico in DAX
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
PowerPivot per l’utente Free AddIn per Microsoft Excel 2010 Diverse versioni per 32/64 bit Non servono SQL Server o altri
prerequisiti Scaricabile dal www.powerpivot.com Versione corrente: 1.0
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
PowerPivot per il tecnico Client: SSAS Engine gira in-process con
Excel Server: Integrato su SharePoint e SQL
Server 2008 R2 e Sql Server 2012 Interrogabile in MDX/DAX e
programmabile in DAX Potente motore di analisi basato su
SSAS 2012Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Nuovo engine SSAS 2012 PowerPivot = DB colonnare Vertipaq
Database colonnare alta compressione
Lavora completamente in memoria Niente I/O, aggregazioni o altro… Ottimizzazioni su cache L2 single core IMBI = Nuovo modo di pensare agli
algoritmi
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Installazione Si scarica da www.powerpivot.com Si esegue il setup Compare un nuovo tab nel ribbon di
excel 2010: PowerPivot
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
CLIPBOARD DATI ESTERNI CREA PIVOT TABLE
ORGANIZZACOLONNE
ABILITARICALCOLO
AUTOMATICO
APRECONESSIONE
RELAZIONITRA TABELLE
METADATI
Demo
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Importare i dati Relazioni tra tabelle Slicer Colonne calcolate Misure Linked Table
Demo 0
Vantaggi PowerPivot Rapidità
No ETL
Modello metadati Integrazione sorgenti eterogenee
Condivisione Soprattutto con sharepoint
Espressività Relazioni e Dax
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Svantaggi PowerPivot Non ci sono Etl per pulire i dati Qualità del dato? Volume di dati
Attenzione che questi non sono problemi!!! Come potrebbero sembrare.
Cari i miei consulenti rimarrete senza lavoro?
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Che cosa è DAX? Progettato per lavorare all’interno di
una PivotTable PowerPivot si programma in DAX Simile ad Excel (Dicono )
Nessun concetto di «riga» e «colonna» Diverso sistema di tipi
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Tipi di dato in DAX 2/2 Operator Overloading (pericoloso )
Gli operatori non sono strongly typed Il risultato dipende dall’input
Esempio di conversioni 1 & 2 = "12" "1" + "2" = 3
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Tipi di dato in DAX 2/2 Currency Integer Real String Date (DateTime) TRUE / FALSE (Boolean)
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Colonne in DAX 1/2 'TableName’[ColumnName]
Gli apici possono essere omessi solo se la TableName non contiene spazi (Non lo fate )
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Colonne in DAX 2/2 TableName può essere omesso e
quindi cercherà nella tabella corrente
Meglio non farlo in quanto si fatica a capire le formule
Le parentesi quadre sono obbligatorie
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Colonne calcolate 1/2 Usano altre colonne Lavorano sempre nella «riga corrente»
In SSAS sono viste locali (DSV) su riga corrente, in PowerPoint ho l’accesso totale al modello dati.
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Colonne calcolate 2/2 Se scriviamo la seguente espressione:
intendiamo: Il valore della colonna SalesAmount Nella tabella FactInternetSales Vale sulla riga corrente Ha un valore diverso per ogni riga
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Misure Si scrivono con DAX Non sono memorizzate sul database Non lavorano riga per riga Usano tabelle ed aggregatori Non hanno il concetto di «riga
corrente»
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Problema Supponiamo di voler calcolare il
margine con una colonna calcolata:
Per poi voler calcolare la % del margine rispetto al fatturato
con una colonna calcolata:
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Applicazione nella Pivot Usiamo la colonna del
margine in percentuale nella tabella pivot (errore)
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Demo 1
Proviamo con una misura ?
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
modiche alla formula Il valore del SalesAmount non può
essere calcolato nel contesto corrente perché non sono in una tabella ma nella tabella pivot e quindi non c’è: Concetto di Riga Concetto di Riga corrente Non c’è il valore in quel momento
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Soluzione con le misure
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Devo usare una funzione per trasformare il riferimento di colonna in un valore!!!
Demo 1
Conclusioni colonne calcolate puntano a colonne e
le misure necessitano di aggregazioni le colonne usano spazio le misure CPU Vengono calcolate in momenti diversi Hanno scopi diversi Hanno strutture diverse Vengono gestite in modi diversi
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Quando usare colonne o misure ? C:Il valore deve rimanere scritto nella
tabella (filtrare o fare slicing) C:L’espressione deve essere calcolata
riga per riga
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
M: Servono aggregazioni un po’ strane (Last Child ….)
M:Calcolare rapporti, percentuali..
Funzioni conteggio Funzioni per contare i valori:
COUNTROWS: conta le righe in tabella COUNTBLANK: conta i bianchi COUNTA: conta tutto anche gli spazi COUNT : conta solo le colonne numeriche
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Funzioni sulle date DATE, DATEVALUE, DAY, EDATE, EOMONTH, HOUR, MINUTE, MONTH, NOW, SECOND, TIME, TIMEVALUE, TODAY, WEEKDAY, WEEKNUM,
YEAR, YEARFRAC
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Funzioni statistiche Lavorano solo su colonne numeriche Per aggregare valori: SUM,AVERANGE
Problema con le funzioni
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Non posso aggregare su espressioni tipo: SUM([SalesAmount] * [Quantity])
Demo 1
Motivo: In DAX tutto ciò che non è ottimizzato non è nel sistema => colpa vostra se non va
Soluzione (SUMX,MINX,…) sono le funzioni X Scorrono la tabella e calcolano
l’espressione di ogni riga aggregando hanno sempre due parametri la
tabella su cui ciclare e la formula da valutare SUMX(FactInternetSales,
[SalesAmount] * [Quantity])
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Considerazioni funzioni X Le colonne devono essere tutte sulla
stessa tabella oppure uso related (se c’è una relazione)
Sono molto lente ma non uso spazio In alternativa alle funzioni x devo
creare una colonna calcolata e poi aggregare su quella molto veloce ma uso spazio
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Evaluation context 1/3 Caratterizza DAX da qualsiasi altro
linguaggio. Sono simili alle clausole where delle
query MDX in SSAS. Contesto in cui viene valutata una
formula. Filter Context , RowContext
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Evaluation context 2/3 Filter Context:
Set di righe attive per il calcolo che poi vengono aggregate
Uno per ogni cella della PivotTable Definito da filtri, righe ,colonne e slicers
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Filter context per ottenere 46 e 13: Filtra i dati per anno 2010 e 2011 e prendi la squadra locale «bari» e nella prima riga filtra per pareggio (0) e nella seconda riga per vittoria dei locali (1).
Filter context per totale: Filtra i dati per anno 2010 e 2011 e prendi la squadra locale «bari» e nella prima riga filtra per pareggio (0) e nella seconda riga per vittoria dei locali (1).
Demo 2
Evaluation context 3/3 Row Context:
Contiene una sola riga Riga corrente durante i loop Definito dalle formule x non dalla tabella
Pivot Questo concetto è nuovo rispetto MDX
perché non siamo abituati a lavorare foglia per foglia ma solo sul contesto.
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Creiamo una misura «Finalizzazione» Rappresenta la media tra la differenza dei
tiri in porta e dei gol per la squadra locale Utilizziamo la AVERAGEX
Demo 2
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Filter context per 11: Filtra i dati per anno 2010 e 2011 e prendi la squadra locale «bari» e filtra per vittoria dei locali (1).
=AVERAGEX(vw_fact_per_powerpivot,vw_fact_per_powerpivot[T squadra locale]-vw_fact_per_powerpivot[T in porta locale])
AVERAGEX 20 – 5 = 1515 – 8 = 7(15 +7) / 2 = 11
Demo
I due esistono sempre Filter context:
Filtra le tabelle Può essere vuoto: si vede solo il totale
Row context: Naviga le righe attive nel filter context Può essere vuoto: non ci sono interazioni
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
E con più tabelle? Filter context:
Il filtro segue le relazioni Esempio (Ordini –> Prodotti) si applica una volta sola (+ performance)
Row context: Se ne frega delle relazioni - performance (row context ha velocità) Posso usare il comando RELATED
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Sono modificabili? Sono modificabili dall’ utente usando
la PivotTable o da codice in questo modo: Aggiungendo condizioni (restringo il filtro)
FILTER Rimuovendo condizioni (allargo il filtro)
ALL Creare un nuovo filtro completamente
diverso FILTER + ALLSede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Operatività di Filter filter opera su intere tabelle
1-Prendono una tabella 2-Aggiungono un filtro e 3-restituiscono la tabella
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Considerazioni su ALL Per eliminare un filtro usiamo ALL
Ritorna tutta la tabella E’ una limitazione e non possiamo
rimuovere il filtro di una sola colonna
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Creiamo una misura «Aggiungi Filtro» Rappresenta la media tra la differenza dei
tiri in porta e dei gol per la squadra locale soltanto nelle partite in cui ha segnato un gol
=AVERAGEX( FILTER(
vw_fact_per_powerpivot,vw_fact_per_powerpivot[G squadra locale] = 1
), vw_fact_per_powerpivot[T squadra locale]-vw_fact_per_powerpivot[G in porta locale]
)
Tabella su cui iterare Filtro da applicare
Demo 3
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Creiamo una misura «Rimuovi Filtro» Rappresenta la media tra la differenza dei
tiri in porta e dei gol per la squadra rimuovendo tutti i filtri presenti
=AVERAGEX( ALL(vw_fact_per_powerpivot), vw_fact_per_powerpivot[T squadra locale]-vw_fact_per_powerpivot[G in porta locale]
)
Tabella su cui iterare Filtro da applicare
Demo 3
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Creiamo una misura «Mescolare Filtri» Rappresenta la media tra la differenza dei
tiri in porta e dei gol per la squadra mettendo assieme i due filtri visti
=AVERAGEX( FILTER(
ALL(vw_fact_per_powerpivot),vw_fact_per_powerpivot[G squadra locale] = 1
), vw_fact_per_powerpivot[T squadra locale]-vw_fact_per_powerpivot[G in porta locale]
)
Rimuovendo i filtri poi itera su tutta la tabella
Filtro da applicare
Demo 3
Funzione Calculate E’ una funzione molto potente e
complicata Sintassi:
CALCULATE(Expression,Filter1,….FilterN
)
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Creiamo una misura «Calculate» Rappresenta la media tra la differenza dei
tiri in porta e dei gol per la squadra locale ignorando solo il filter context del anno
=CALCULATE(AVERAGEX(
vw_fact_per_powerpivot, vw_fact_per_powerpivot[T squadra locale]-vw_fact_per_powerpivot[G in porta locale]
), vw_fact_per_powerpivot[G squadra locale] = 1,
vw_fact_per_powerpivot[Risultato] = 0
)
Calcola la media sulle righe filtrate Filtro da applicare
Demo 4
Problema: Media punteggio
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Per calcolare la media mobile del punteggio devo sapere giorno per giorno quale è il risultato che sta 14 risultati prima. In excel si fa riferimento alla riga
corrente – 14 ... Ma non ho il concetto di riga e colonna non abbiamo riferimenti assoluti
Uso le colonne calcolate!!!!
Esempio pratico
Soluzione: Numero giorni
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
=COUNTROWS(
FILTER( SerieA,SerieA[Date] <= EARLIER(SerieA[Date]) && SerieA[Squadra in casa] = EARLIER( SerieA[Squadra in casa])
)
)
Earlier = entra nel row context precedente a quello introdotto dalla filter
Esempio pratico
Soluzione: 1 del range
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
=Calculate(
values(SerieA[Date]),
filter(SerieA,SerieA[Numero di giorni] = EARLIER(
SerieA[Numero di giorni])- 14 && SerieA[Squadra in casa] =EARLIER(
SerieA[Squadra in casa])
)
)
Values = calcola il valore di una colonna se ne ho tanti fa la distinct
Soluzione: Media 14 gg
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
=CALCULATE( AVERAGE(SerieA[Punteggio]),
FILTER(SerieA,SerieA[Date] >= EARLIER(SerieA[Primo giorno del
range di 14]) && SerieA[Date] <= EARLIER(SerieA[Date]) && SerieA[Squadra in casa]=EARLIER( SerieA[Squadra in casa] ) )
)
calcola la media di tutti i punteggi nelle varie date tra la data corrente e quella che sta 14 giorni prima
Esempio pratico
Risultato formule
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Esempio pratico
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Esempio pratico
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931
Book Power Pivot for Excel 2010
Autori: Marco Russo e Alberto Ferrari ISBN: 978-0735640580