Livello: intermedio
In me stesso ultimo articolo Ho introdotto DAX come linguaggio di query e ho spiegato perché imparare a interrogare il tuo modello di dati può essere utile. Ho coperto le basi sull'utilizzo di uno strumento come DAX Studio per interrogare un database e restituire una tabella di dati come risultato. In questo articolo approfondirò e introdurrò le funzioni di query più comuni e utili, incluso CROSSJOIN, RIEPILOGA e AGGIUNGI COLONNE (ci sono altre caratteristiche che non tratterò in questo articolo).
Ecco di nuovo il collegamento al modello di dati PBIX se vuoi andare avanti e fare gli esempi da solo. Sto usando di nuovo DAX Studio per connettermi a Power BI Desktop in esecuzione sul mio computer di localizzazione. Se ti prendi il tempo per completare questi esempi, aumenterà significativamente l'apprendimento e la conservazione delle conoscenze.
Lignaggio
prima di continuare, un fatto interessante e importante su Power Pivot (rispetto ai tradizionali strumenti di database) è il concetto di stirpe (pronunciato LIN-E-AGE). Quando si crea una nuova tabella virtuale in una query o una formula in PowerPivot, la nuova tabella includerà una relazione automatica uno a molti con la tabella da cui è stata creata. Considera la seguente semplice tabella dell'ultima volta.
Puoi vedere sopra che questa query produce una tabella a colonna singola di tutte le categorie di prodotti univoci. Questa nuova tabella virtuale preserva la discendenza del modello di dati. In questo caso, il nuovo tavolo virtuale arriva dal tavolo Prodotti e, così, il nuovo tavolo virtuale ha una discendenza per il tavolo Prodotti. Puoi “Immaginare” questo come mostrato di seguito con la nuova tabella che ha una relazione di 1 tanti con la tabella Prodotti.
Si prega di notare l'immagine sopra è solo una simulazione visiva su quello che sta succedendo. La tabella virtuale non è materializzata e non puoi effettivamente vederla nella vista delle relazioni. Ma il tavolo virtuale esiste (virtualmente) ed esiste anche il lignaggio della tabella Prodotti, è solo che non puoi davvero vedere. Ti raccomando imparare a “immaginare” lascia che ciò accada nel modello di dati nella tua mente in quanto ti aiuterà a capire come la nuova tabella virtuale interagisce con il resto del modello di dati, soprattutto per quanto riguarda la transizione di contesto.
Tutti i tavoli virtuali hanno una discendenza con i tavoli da cui provengono.
ATTRAVERSO
CROSSJOIN è una funzione che può creare una nuova tabella da 2 o più tabelle di origine. Per questo esempio, Ho intenzione di unirmi ad alcuni tavoli virtuali. La prima tabella virtuale è VALUES (Prodotto[Categoria]) Quello, Certo, restituisce un elenco di tutte le categorie di prodotti univoci.
La seconda tabella virtuale è un elenco di tutti i possibili generi di clienti.
Prossimo, Userò CROSSJOIN per creare una nuova tabella contenente tutti i join univoci di entrambe le tabelle.
Nella tabella sopra ci sono 4 righe x 2 righe che danno un totale di 8 righe di tutti i valori univoci. Continuando con il concetto di “immaginare” Correlazione di queste nuove tabelle virtuali nel modello di dati, sembrerebbe così:
Ricorda che questa è solo una simulazione di come appare. Queste tabelle in alto non sono materializzate e non puoi vederle nel modello di dati. Ma può “Immaginare” con questo aspetto e comportarsi esattamente come farebbero se fossero tabelle fisiche.
M x N può significare un grande tavolo
Devi stare attento con CROSSJOIN as, per definizione, la tabella risultante sarà lunga mxn righe, dove m è il numero di righe nella tabella 1 yn è il numero di righe nella tabella 2. Se dovessi CROSSJOIN sul tavolo del cliente (18,484 righe ) con la tabella Prodotti (397 righe) finirebbe con più di 7 milioni di righe. Questo di per sé non è un problema per PowerPivot creare una tabella così grande in memoria, ma può sicuramente essere un problema se provi a materializzare il tavolo. Di più su quello la prossima settimana.
RICAPITOLARE
RIEPILOGO es, con molto, la mia funzione di query DAX preferita. SUMMARIZE può fare cose simili a CROSSJOIN, tuttavia, CROSSJOIN può unire tabelle che non hanno relazioni, mentre SUMMARIZE può unire solo tabelle correlate a relazioni molti-a-molti 1.
SUMMARIZE prende prima una tabella e poi una o più colonne (a cui si accede attraverso una relazione molti a molti 1) che vuoi includere nella nuova tabella riassuntiva.
ASTRATTO (, tavolo[colonna], Tavolo 2[colonna],….)
Ecco un esempio.
I risultati della query sopra sono simili alla query CROSSJOIN sopra, ma c'è una differenza importante. Riepilogo restituirà solo le righe effettivamente presenti nei dati stessi (Si prega di notare che c'è solo 6 righe in su rispetto a 8 righe nell'esempio CROSSJOIN).
Considerare le tabelle del modello di dati pertinenti di seguito.
Ecco la formula SOMMARIO scritta sopra.
EVALUATE
SUMMARIZE(Saldi, Prodotti[Categoria], Clienti[Genere])
Questa query inizia con la tabella Sales e quindi aggiunge i prodotti[Categoria] della tabella Prodotti e Clienti[Genere] della tabella Clienti. Il 2 le colonne specificate nella formula SUMMARIZE provengono dalle tabelle a lato 1 dei rapporti di molti a 1; questo è permesso.
Quanto segue non è consentito e non funzionerà.
VALUTARE
ASTRATTO (Prodotti, Saldi[Chiave cliente])
Non funziona perché la colonna Vendite[Chiave cliente] non è possibile accedere dalla tabella Prodotti tramite una relazione molti a molti 1.
È anche possibile scrivere una dichiarazione SUMMARIZE su qualsiasi tavolo. Nel seguente esempio, l'istruzione SUMMARIZE restituisce un elenco di tutte le possibili combinazioni di categoria di prodotto e colore.
È inoltre possibile ottenere lo stesso risultato con la funzione Tutto (che sarebbe una soluzione più semplice se si utilizza solo una singola tabella)
EVALUATE
ALL(Prodotti[Categoria], Clienti[Genere])
Aggiungere vendite di riepilogo alla tabella di riepilogo
Fino ad ora, Le query di riepilogo precedenti sono solo elenchi di combinazioni valide. È tempo di fare qualcosa di più interessante e aggiungere il [Vendite totali] a queste tabelle riassuntive. prima di continuare, notare che Le seguenti formule non sono procedure consigliate – c'è un modo migliore che tratterò più tardi.
Considera la seguente formula
EVALUATE
SUMMARIZE(
Prodotti,
Prodotti[Categoria],
Prodotti[Colore],
"sali totali", [Vendite totali]
)
Si noti in particolare che il parametro table in questa formula è “Prodotti”. Nota anche di seguito che questa formula restituisce righe vuote (mostrato sotto).
Questa dichiarazione riepilogativa riassume correttamente tutte le combinazioni di prodotti[Categoria] e prodotto[Colore] nella tabella dei prodotti e poi per quei prodotti dove ci sono vendite, quelle vendite vengono visualizzate accanto alla combinazione unica. Ma in alcuni casi, la combinazione unica in realtà non ha vendite, quindi le righe vuote.
Usa le vendite come parametro della tabella
Se cambio la formula sopra e cambio la tabella Prodotti nella tabella Vendite, le righe vuote non sono più visibili (vedi sotto).
SUMMARIZE troverà sempre le combinazioni uniche che esistono effettivamente nei dati selezionati. Perché questa nuova formula inizia nella tabella Vendite, solo combinazioni di prodotti[Categoria] e prodotto[Colore] dove ci sono vendite effettive vengono restituite.
Transizione di contesto o nessuna transizione di contesto?
Quelli di voi che hanno familiarità con il concetto di transizione di contesto potrebbero pensare che la transizione di contesto stia avvenendo qui.. Questa è una cosa valida da presumere, ma non è quello che sta succedendo qui. Considera la seguente formula.
Si prega di notare come ho cambiato la misura [Vendite totali] con SOMMA (Saldi[Importo esteso]). Con questa nuova formula sopra, non c'è CALCULATE che forza la transizione del contesto; tuttavia, nonostante questo, la tabella restituisce sempre lo stesso risultato. Ciò implica che SUMMARIZE non opera in un contesto di riga. Infatti, SUMMARIZE è un'operazione di Vertipaq Storage Engine. La parte che produce le combinazioni valide di colonne è molto efficiente, tuttavia, calcolare i dati di vendita totali è molto inefficiente. Per questa ragione, è meglio usare ADDCOLUMNS per sommare i totali delle vendite (vedi sotto).
colonne
ADDCOLUMNS fa esattamente quello che suggerisce: aggiungi nuove colonne a una tabella in una query. La sintassi generale è la seguente:
AGGIUNGI COLONNE (, "Nome colonna", ,….)
Per dimostrare come funziona, vorrei iniziare con una formula sopra che produce la seguente tabella.
La funzione SUMMARY restituisce una tabella di 2 colonne con 15 righe: tutte le possibili combinazioni contenenti valori di vendita. Questa tabella può essere utilizzata come parametro di tabella nella formula ADDCOLUMNS come segue.
Puoi vedere sopra che questa nuova tabella restituisce le vendite totali per ciascuno dei 15 possibili combinazioni.
Ed è possibile aggiungere tutte le nuove colonne necessarie alla tabella di riepilogo. Vedi sotto.
Le differenze importanti tra ADDCOLUMNS e SUMMARIZE
Ora hai visto che è possibile aggiungere colonne (come riepilogo delle vendite totali) a una tabella usando SUMMARIZE e anche con ADDCOLUMNS. Ma ci sono alcune importanti differenze tra questi 2 approcci.
ADDCOLUMNS ha un contesto di riga
A differenza di quanto ho mostrato con SUMMARIZE in precedenza in questo articolo, ADDCOLUMNS ha un contesto di riga. Considera la seguente query.
Quando cambio la misura [Vendite totali] con SOMMA (Saldi[Importo esteso]) i risultati sono sbagliati. Questo mostra che ADDCOLUMNS opera in un contesto di riga.
Efficienza
Quando viene data la scelta, dovresti scegliere di utilizzare ADDCOLUMNS in favore di SUMMARIZE per aggiungere queste colonne di dati aggiuntive. ADDCOLUMNS è molto più efficiente nel modo in cui aggiunge i valori alla tabella SUMMARIZE. SUMMARIZE utilizza un'operazione Vertipaq Storage Engine per produrre la tabella di base e quindi ADDCOLUMNS sfrutta la discendenza e la transizione del contesto per aggiungere le colonne del valore; Questo approccio sfrutta le capacità speciali di PowerPivot per svolgere il lavoro nel modo più efficiente. Per una copertura più dettagliata di questo argomento, deve leggi questo articolo degli italiani.
Altre funzioni di query DAX
Mi rendo conto di non aver trattato tutte le funzioni DAX Query in questa serie di articoli. Ce ne sono altri, alcuni dei quali sono disponibili solo nelle versioni più recenti di Power Pivot (ad esempio, Power BI Desktop, Eccellere 2016). Se sei interessato a maggiori informazioni, puoi fare qualche ricerca online. mi coprirò 1 spettacolo finale la prossima settimana: la funzione RIGA.
Usi delle query DAX
La prossima settimana condividerò il mio ultimo articolo di questa serie dove spiego alcuni modi in cui puoi utilizzare le query DAX nel mondo reale. Assicurati di tornare la prossima settimana, o meglio ancora iscriviti alla mia newsletter settimanale per ricevere notifiche quando ci sono nuovi articoli.