Sei sulla pagina 1di 53

In 

collaborazione con:

PowerPivot e DAX

Marco Pozzan

BI Analyst , 1NN0VA
info@marcopozzan.it
www.marcopozzan.it
PowerPivot e DAX

Marco Pozzan

BI Analyst , 1NN0VA
info@marcopozzan.it
www.marcopozzan.it

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


Codice fiscale: 91068510931
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 2012
Sede 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
CLIPBOARD DATI ESTERNI CREA PIVOT TABLE

ORGANIZZA ABILITA APRE RELAZIONI METADATI


COLONNE RICALCOLO CONESSIONE TRA TABELLE
AUTOMATICO

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


Codice fiscale: 91068510931
Demo 0

Demo
 Importare i dati
 Relazioni tra tabelle
 Slicer
 Colonne calcolate
 Misure
 Linked Table

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


Codice fiscale: 91068510931
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) www.1nn0va.net


Codice fiscale: 91068510931 info@1nn0va.net
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
Demo 1

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
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
Demo 1

Soluzione con le misure


 Devo usare una funzione per
trasformare il riferimento di colonna in
un valore!!!

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


Codice fiscale: 91068510931
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
 M: Servono aggregazioni un po’
strane (Last Child ….)
 M:Calcolare rapporti, percentuali..
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)
Codice fiscale: 91068510931
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
Funzioni statistiche
 Lavorano solo su colonne numeriche
 Per aggregare valori: SUM,AVERANGE
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)
Codice fiscale: 91068510931
Demo 1

Problema con le funzioni

Non posso aggregare su espressioni


tipo: SUM([SalesAmount] * [Quantity])

Motivo: In DAX tutto ciò che non è


ottimizzato non è nel sistema => colpa
vostra se non va ☺
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)
Codice fiscale: 91068510931
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
Demo 2

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

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


Codice fiscale: 91068510931
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
Demo 2

 Creiamo una misura «Finalizzazione»


 Rappresenta la media tra la differenza dei
tiri in porta e dei gol per la squadra locale
 Utilizziamo la AVERAGEX

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


Codice fiscale: 91068510931
Demo

Filter context per 11: Filtra i dati per AVERAGEX 20 – 5 = 15


anno 2010 e 2011 e prendi la squadra 15 – 8 = 7
locale «bari» e filtra per vittoria dei locali (15 +7) / 2 = 11
(1).

=AVERAGEX(vw_fact_per_powerpivot,vw_
fact_per_powerpivot[T squadra locale]-
vw_fact_per_powerpivot[T in porta
locale])

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


Codice fiscale: 91068510931
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 + ALL
Sede 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

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
Demo 3

 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
Filtro da applicare
Tabella su cui iterare

=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]
)

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


Codice fiscale: 91068510931
Demo 3

 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

Filtro da applicare
Tabella su cui iterare

=AVERAGEX(
ALL(vw_fact_per_powerpivot),
vw_fact_per_powerpivot[T squadra locale]-vw_fact_per_powerpivot[G in porta locale]
)

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


Codice fiscale: 91068510931
Demo 3

 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
Filtro da applicare
Rimuovendo i filtri poi itera su tutta la
tabella
=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]
)

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


Codice fiscale: 91068510931
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
Demo 4

 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
Filtro da applicare
Calcola la media sulle righe filtrate

=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
)

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


Codice fiscale: 91068510931
Esempio pratico

Problema: Media punteggio


 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!!!!
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)
Codice fiscale: 91068510931
Esempio pratico

Soluzione: Numero giorni


=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

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


Codice fiscale: 91068510931
Soluzione: 1 del range
=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

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


Codice fiscale: 91068510931
Esempio pratico

Soluzione: Media 14 gg
=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
Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)
Codice fiscale: 91068510931
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
Book
 Power Pivot for Excel 2010
 Autori: Marco Russo e Alberto Ferrari
 ISBN: 978-0735640580

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


Codice fiscale: 91068510931

Potrebbero piacerti anche