powerpivot e dax

52
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN) Codice fiscale: 91068510931 PowerPivot e DAX Marco Pozzan BI Analyst , 1NN0VA [email protected] www.marcopozzan.it

Upload: marco-pozzan

Post on 25-Jun-2015

1.492 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: PowerPivot e Dax

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

PowerPivot e DAX

Marco Pozzan

BI Analyst , [email protected]

www.marcopozzan.it

Page 2: PowerPivot e Dax

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

Page 3: PowerPivot e Dax

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

Page 4: PowerPivot e Dax

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

Page 5: PowerPivot e Dax

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

Page 6: PowerPivot e Dax

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

Page 7: PowerPivot e Dax

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

CLIPBOARD DATI ESTERNI CREA PIVOT TABLE

ORGANIZZACOLONNE

ABILITARICALCOLO

AUTOMATICO

APRECONESSIONE

RELAZIONITRA TABELLE

METADATI

Page 8: PowerPivot e Dax

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

Page 9: PowerPivot e Dax

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

Page 10: PowerPivot e Dax

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

Page 11: PowerPivot e Dax

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

Page 12: PowerPivot e Dax

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

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Page 13: PowerPivot e Dax

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

Page 14: PowerPivot e Dax

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

Page 15: PowerPivot e Dax

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

Page 16: PowerPivot e Dax

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

Page 17: PowerPivot e Dax

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

Page 18: PowerPivot e Dax

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

Page 19: PowerPivot e Dax

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

Page 20: PowerPivot e Dax

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

Page 21: PowerPivot e Dax

Proviamo con una misura ?

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Page 22: PowerPivot e Dax

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

Page 23: PowerPivot e Dax

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

Page 24: PowerPivot e Dax

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

Page 25: PowerPivot e Dax

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..

Page 26: PowerPivot e Dax

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

Page 27: PowerPivot e Dax

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

Page 28: PowerPivot e Dax

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

Page 29: PowerPivot e Dax

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

Page 30: PowerPivot e Dax

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

Page 31: PowerPivot e Dax

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

Page 32: PowerPivot e Dax

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

Page 33: PowerPivot e Dax

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

Page 34: PowerPivot e Dax

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

Page 35: PowerPivot e Dax

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

Page 36: PowerPivot e Dax

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

Page 37: PowerPivot e Dax

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

Page 38: PowerPivot e Dax

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

Page 39: PowerPivot e Dax

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

Page 40: PowerPivot e Dax

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

Page 41: PowerPivot e Dax

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

Page 42: PowerPivot e Dax

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

Page 43: PowerPivot e Dax

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

Page 44: PowerPivot e Dax

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

Page 45: PowerPivot e Dax

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

Page 46: PowerPivot e Dax

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

Page 47: PowerPivot e Dax

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

Page 48: PowerPivot e Dax

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

Page 49: PowerPivot e Dax

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

Page 50: PowerPivot e Dax

Risultato formule

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Esempio pratico

Page 51: PowerPivot e Dax

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Esempio pratico

Page 52: PowerPivot e Dax

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