Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
CAMBIAMO DATASET DI ANALISI: Distinguiamo le funzioni in scalari e tabellari
Tutte le funzioni che hanno come risultato finale un numero (uno scalare appunto) sono funzioni scalari, come tutte le funzioni viste finora. Invece, le funzioni che, come output, hanno delle tabelle, sono dette tabellari.
Apriamo excel vuoto, poi dati --> da foglio excel e carichiamo il dataset01. Selezioniamo solo alcune tabelle del mio dataset da caricare in power pivot.
Iniziamo a collegare le nostre tabelle tra di loro in vista diagramma:
Già vediamo che possiamo collegare customer key di customer con customer key di sales: se customer key di customer non è primaria me lo dice lui quando provo a fare il collegamento. Se ce lo fa fare, vuol dire che è primaria. Dopodiché guardiamo al calendar: non confondiamo date key con date. Date è una data vera e propria, quindi un dato. Invece date key di solito è una denominazione, quindi è un formato testo e non formato dato.
È vero che si possono collegare date key di calendar con altre datekey di sales, ma per il momento colleghiamo solo date, visto che ce l’abbiamo incomune in entrambe le tabelle. Colleghiamo quindi date con order date, product key diproduct con l’omonimo in sales e sales territory key di sales territory con l’omonimo insales. L’unica tabella non collegata è product subcategory. Non possiamo collegarladirettamente con sales perchè non hanno niente in comune, ma possiamo collegarlacon product. Quindi colleghiamo product sub category key di product con l’omonimo diproduct sub category.I dati si trovano in due luoghi: nei software gestionali, che sono quelli originari e quelliche hanno tantissime tabelle. E poi in posti che servono per fare i reporting, nei qualisono presenti molte meno tabelle, perchè magari più tabelle vengono compressedentro una sola tabella.Il grafico evidenziato in arancio si chiama grafico a stella edè il più semplice ma anche il migliore. Una serie di tabelle di dimensioni collegate direttamente alla tabella dei fatti tramite chiavi primarie. Quando invece abbiamo il caso in cui più dimensioni si filtrano tra di loro, abbiamo un grafico a fiocco di neve. Avendo collegato due tabelle dimensionali tramite un filtro, vediamo come il filtro va dal fiocco di neve (quindi da sub category product) fino a product, per poi continuare fino a sales. Quindi il filtro permane fino alla tabella dei fatti.
Se andiamo sulla pivot a verificare questa cosa, inserendo sulle righe della pivot la subcategory name (english, spanish o french è uguale), vediamo che funziona, quindi è giusto. Ma il filtro si propaga tramite il campo sub category key e non tramite il name. Quindi la colonna che propaga il filtro in realtà non è quella che viene filtrata, ma il filtro filtra le altre colonne. In questo caso product sub category name è filtrata; invece product
sub category key (che è la portatrice del filtro) non è filtrata, ma si dice che è cross filtrata. Cioè che non ha un filtro diretto su di sé ma comunque ha gli effetti del filtro. Questo perché, seppure il filtro l'ho applicato ad un'altra colonna, comunque questo limita i valori della colonna cross filtrata. Se prendo alcuni nomi di sottocategorie, sto prendendo alcune chiavi di sottocategorie e quindi ne isolo altre. Prendo solo quelle key ma non prendendole direttamente.
Sia i filtri che i cross filtri poi si propagano. Ma, la domanda è: se io metto una colonna di quella tabella nelle righe della pivot, questa procedura impatta sulla key per qualsiasi colonna che ci metto? Come faccio ad essere sicuro che un filtro applicato ad un'altra colonna impatta anche la key? Perché la key è la chiave primaria. Questo perché la chiave primaria non ha valori duplicati né nulli. Quindi quando filtro
unaqualsiasi colonna della tabella, dovrò escludere qualche riga (altrimenti non sarebbe un filtraggio) e in questo processo non posso non intaccare anche la chiave primaria, perché appunto escludo una riga anche dalla chiave primaria (essendo che le contiene tutte).
LA CHIAVE PRIMARIA COLLEGA PERCHÉ SI PRENDE TUTTI I FILTRI DELLE COLONNE RELATIVE A QUELLA TABELLA. I filtri si trasmettono quindi sempre attraverso la chiave: o perché filtro la chiave stessa o perché filtro qualche altra colonna e quindi inevitabilmente la impatto. Il filtro applicato sulla sub category name identifica un sottoinsieme di valori della chiave primaria. Questi valori della colonna product subcategory key della tabella omonima sono gli unici legittimi nella colonna product subcategory key di product. Quando applico un valore sulla colonna nome, questa mi identifica tutte le key che corrispondono a quel nome; quindi, ho un impatto sulla chiave primaria (i valori visibili della mia
chiave non sono più tutti ma un sottoinsieme, cioè quelli in linea col filtro che ho applicato). Quei valori visibili diventano gli unici valori visibili nella PSCK (product sub category key) della tabella product. Ma siccome anche in product c'è un filtro anche in questa tabella, e quindi solo un set di valori di PSCK sono visibili nella chiave primaria di questa tabella (che è product key). Solo questi valori a loro volta visibili, vanno a finire nella tabella di sales, quindi le sole transazioni che vedo sono quelle in linea con quest'ultimo filtro applicato. DOMANDA: andiamo sulla pivot e facciamo la misura transazioni Perché, se faccio sempre la stessa formula (COUNTROWS sales), i calcoli cambiano? Lasciando perdere il colore. Perché in ogni riga cambia la tabella di sales affinché COUNTROWS sales cambi. La tabella sales è diversa in ogni esecuzione. Quindi, alla domanda: quanto vale COUNTROWS sales? Non si può rispondere.perché la risposta dipende dal contesto di filtraggio di sales. Qual è il risultato di COUNTROWS
sales in assenza di filtri? 60.398. Ogni volta che si scrive una tabella in DAX la si scrive sempre per come è filtrata: ad esempio COUNTROWS (sales)
conta le righe di sales per come sales è filtrata.
FUNZIONI TABELLARI: anche se sales la chiamo sempre allo stesso modo, in realtà essa cambia per ogni COUNTOROWS
e ogni volta le corrisponde un diverso numero di righe.
Voglio costruire un indicatore che mi dica quanto le transazioni di ogni colore (o di ogni altra caratteristica di una colonna dimensionale) rappresentano rispetto al totale. Cioè, vogliamo calcolare la % del colore black (9.843) sul totale (60.398). Per ottenerlo, dobbiamo ovviamente fare il calcolo 9843/60398, ma questo è molto da facile da fare solo con excel e solo quando abbiamo celle. Non è altrettanto facile con power pivot.
Se volessimo avere una colonna in cui applico una misura
La colonna<td>Totali righe di sales</td>
indica sempre il numero totale delle righe di sales.l'ho chiamata ALL transazioni. Vediamo che sono comparsi due nuovi colori: prima non erano stati inclusi perché hanno 0 transazioni (cella vuota), invece ora che non ci sono filtri, la tabella ALL li restituisce e su quella riga compare sempre il totale di sales. ALL transazioni è una misura tecnica, che non dobbiamo includere nei report, perché è difficile da spiegare, serve solo per lavorare.
DOMANDA: quante righe di sales sono visibili nel contesto di Black? (prima cella) sempre e solo 9.843 (transazioni). Sales si limita a quel numero di righe, nel contesto di Black.
DOMANDA: nel contesto product color = black, com'è messo il modello? Sulla tabella calendar non ci sono filtri quindi è tutta visibile, la tabella customer uguale, lo stesso per la tabella sub category. Invece, la tabella product fa vedere un numero limitato di righe, perché è filtrata (in base ai colori). E la tabella sales quindi fa vedere solo 9843 righe, che
Sono quelle che includono prodotti di colore black.
FILTER: vuole la tabella (insieme delle cose da setacciare) e poi vuole il setaccio (filterexpression).
Ma FILTER ci permette di filtrare solo i campi (le colonne) della tabella che sto iterando, in questo caso sales; invece, io voglio poter filtrare tutti i campi di tutte le tabelle collegate a sales. Per avere la possibilità di filtrarle tutte, scriviamo la funzione RELATED. Questa ci fa vedere le colonne delle tabelle collegate con sales 1 a molti, quindi le colonne che hanno valori univoci per ogni riga di sales.
Noi da sales possiamo vedere tutto, è dalle altre che non possiamo vedere tutto, questo perché sales è collegata con tutto tramite le chiavi. Invece due tabelle dimensionali (ad esempio customer e product, che non sono collegate, non posso includerle in questa misura). Dobbiamo sempre ricordarci di chiudere le parentesi di filter e di countrows.
C'è una colonna del modello alla quale non posso accedere.
Fissata una riga in sales? La tabella di cui COUNTROWS deve contare le righe è tutta quella evidenziata in blu.
Transazioni F = quelle relative al gender femmina. Ora le righe di SALES senza filtri sono 30.017.
Facciamo la stessa cosa ALL prende solo tabelle del modello.
Voglio vedere le transazioni dei clienti femmina indipendentemente dal colore: quindi voglio una colonna che mi dia come risultato 30.017. Per avere ALL transazioni F non devo partire da transazioni F ma devo partire da ALL transazioni.
Questo perché le 60.398 che sono le righe totali di sales, devono essere filtrate per ottenere il totale delle transazioni F.
Quante sono le transazioni a clienti femmina in assenza di filtri? 30.017.
ALL ignora ogni tipo di filtro. Quindi partiamo da tutte le righe di sales senza filtri, e poi le filtriamo. Abbiamo il totale indipendentemente dal contesto. Proviamo invece a fare ALL ricavi: non possiamo scrivere quest