DAX (Data Analysis Expressions) è un linguaggio di espressioni delle formule usato in Analysis Services, Power BI e Power Pivot in Excel. Le formule DAX includono funzioni, operatori e valori per eseguire query e calcoli avanzati sui dati presenti in tabelle e colonne correlate nei modelli di dati tabulari.
Questo articolo offre solo un'introduzione di base ai concetti più importanti del linguaggio DAX, descrivendone le caratteristiche generali applicabili a tutti i prodotti da cui viene usato. Alcune funzionalità potrebbero tuttavia non essere valide per determinati prodotti o casi d'uso. Per un'implementazione di DAX specifica, vedere la documentazione del prodotto.
Calcoli
Le formule DAX vengono usate in misure, colonne calcolate, tabelle calcolate e sicurezza a livello di riga.
Misure
Le misure sono formule di calcolo dinamiche i cui risultati cambiano a seconda del contesto. Le misure vengono usate per la creazione di report che supportano la combinazione e il filtraggio dei dati dei modelli usando più attributi, ad esempio un report di Power BI oppure una tabella pivot o un grafico pivot di Excel. Le misure vengono create tramite la barra della formula DAX in Progettazione modelli.
Una formula in una misura può usare le funzioni di aggregazione standard create automaticamente tramite la funzionalità Somma automatica, ad esempio COUNT o SUM, oppure può essere definita dall'utente tramite la barra della formula DAX. Le misure con nome possono essere passate come argomento ad altre misure.
Quando si definisce una formula per una misura nella barra della formula, tramite una descrizione comando viene visualizzata un'anteprima dei possibili risultati per il totale nel contesto corrente. Generalmente i risultati non vengono restituiti immediatamente in nessuna posizione. Il motivo per cui non è possibile visualizzare i risultati (filtrati) del calcolo immediatamente è dovuto al fatto che il risultato di una misura non può essere determinato senza contesto. La valutazione di una misura richiede la presenza di un'applicazione client di creazione di report in grado di fornire il contesto necessario per recuperare i dati relativi a ogni cella e valutare quindi l'espressione per ogni cella. Il client può essere una tabella pivot o un grafico pivot di Excel, un report di Power BI o un'espressione di tabella in una query DAX in SQL Server Management Studio (SSMS).
Indipendentemente dal client, viene eseguita una query separata per ogni cella nei risultati. In altre parole, ogni combinazione di intestazioni di riga e colonna in una tabella pivot oppure ogni selezione di filtri dei dati e filtri in un report di Power BI genera un subset di dati diverso in base al quale viene calcolata la misura. Si consideri, ad esempio, questa formula di misura molto semplice:
Total Sales = SUM([Sales Amount])
Quando un utente inserisce la misura TotalSales in un report e quindi inserisce la colonna Product Category da una tabella Product nei filtri, la somma di Sales Amount viene calcolata e visualizzata per ogni categoria di prodotto.
A differenza delle colonne calcolate, la sintassi per una misura include il nome della misura che precede la formula. Nell'esempio sopra riportato, il nome Total Sales viene visualizzato prima della formula. Dopo aver creato una misura, il nome e la relativa definizione vengono visualizzati nell'elenco dei campi dell'applicazione client per la creazione di report e, a seconda delle prospettive e dei ruoli, è disponibile per tutti gli utenti del modello.
Una colonna calcolata è una colonna che viene aggiunta a una tabella esistente in Progettazione modelli e per la quale viene creata una formula DAX che ne definisce i valori. Quando una colonna calcolata contiene una formula DAX valida, i valori vengono calcolati per ogni riga non appena si immette la formula. I valori vengono quindi archiviati nel modello di dati in memoria. Ad esempio, in una tabella Date, quando la formula viene immessa nella barra della formula:
= [Calendar Year] & " Q" & [Calendar Quarter]
Viene calcolato un valore per ogni riga della tabella prendendo i valori dalla colonna Calendar Year (nella stessa tabella Date), aggiungendo uno spazio e la lettera maiuscola Q, quindi aggiungendo i valori dalla colonna Calendar Quarter (nella stessa tabella Date). Il risultato per ogni riga della colonna calcolata viene calcolato immediatamente e visualizzato, ad esempio, come 2017 Q1. I valori delle colonne vengono ricalcolati solo se la tabella, o una tabella correlata, viene elaborata (aggiornata) oppure se il modello viene scaricato dalla memoria e quindi ricaricato, ad esempio quando si chiude e si riapre un file di Power BI Desktop.
Una tabella calcolata è un oggetto calcolato, basato su un'espressione di formula e derivato da tutte le altre tabelle nello stesso modello o da alcune di esse. Invece di eseguire query e caricare i valori nelle colonne della nuova tabella da un'origine dati, una formula DAX definisce i valori della tabella.
Le tabelle calcolate possono essere utili in una dimensione con ruoli multipli. Un esempio è offerto dalla tabella Date, come OrderDate, ShipDate o DueDate, a seconda della relazione di chiave esterna. Creando una tabella calcolata per DataSpedizione in modo esplicito, è possibile ottenere una tabella autonoma disponibile per le query, utilizzabile in modo completo come qualsiasi altra tabella. Le tabelle calcolate sono utili anche per la configurazione di un set di righe filtrato o di un subset o superset di colonne di altre tabelle esistenti. Questo consente di mantenere la tabella originale intatta e di creare allo stesso tempo varianti della tabella per supportare scenari specifici.
Le tabelle calcolate supportano le relazioni con altre tabelle. Le colonne nella tabella calcolata contengono i tipi di dati, la formattazione e possono appartenere a una categoria di dati. È possibile assegnare un nome alle tabelle e rivelarle o nasconderle esattamente come qualsiasi altra tabella. Le tabelle calcolate vengono ricalcolate se una delle tabelle da cui vengono estratti i dati viene aggiornata.
Con la sicurezza a livello di riga, una formula DAX deve restituire una condizione booleana TRUE/FALSE, definendo le righe che possono essere restituite dai risultati di una query in base ai membri di un ruolo specifico. Si prenda, ad esempio, la tabella Customers con la seguente formula DAX per i membri del ruolo Sales:
= Customers[Country] = "USA"
I membri del ruolo Sales saranno in grado di visualizzare solo i dati per i clienti negli Stati Uniti e le aggregazioni, come SUM, verranno restituite solo per i clienti negli Stati Uniti. La sicurezza a livello di riga non è disponibile in Power Pivot in Excel.
Quando si definisce la sicurezza a livello di riga usando una formula DAX, si crea un set di righe consentito. Questo non significa che l'accesso alle altre righe viene negato, ma semplicemente che tali righe non vengono restituite come parte del set di righe consentito. Altri ruoli possono consentire l'accesso alle righe escluse dalla formula DAX. Se un utente è membro di un altro ruolo e la sicurezza a livello di riga di tale ruolo consente l'accesso a quel particolare set di righe, l'utente può visualizzare i dati per la riga.
Le formule per la sicurezza a livello di riga si applicano alle righe specificate e a quelle correlate. Quando una tabella dispone di più relazioni, tramite i filtri viene applicata la sicurezza alla relazione che è attiva. Le formule per la sicurezza a livello di riga vengono intersecate con altre formule definite per le tabelle correlate.
Le query DAX possono essere create ed eseguite in SQL Server Management Studio (SSMS) e in strumenti open source come DAX Studio (daxstudio.org). Diversamente dalle formule di calcolo DAX, che possono essere create solo nei modelli di dati tabulari, è possibile eseguire query DAX anche su modelli multidimensionali di Analysis Services. Le query DAX sono spesso più facili da scrivere e più efficienti rispetto alle query MDX (Multidimensional Data Expressions).
Una query DAX è costituita da un'istruzione, simile a un'istruzione SELECT in T-SQL. Il tipo di query DAX più semplice è un'istruzione evaluate. Ad esempio,
EVALUATE
( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC
Restituisce nei risultati una tabella che elenca solo i prodotti con un valore di SafetyStockLevel inferiore a 200, in ordine crescente in base a EnglishProductName.
È possibile creare misure come parte della query. In tal caso, le misure sono disponibili solo per la durata della query.
Per altre informazioni, vedere Query DAX.
Formule
Le formule DAX sono fondamentali per la creazione di calcoli in misure e colonne calcolate e per la protezione dei dati usando la sicurezza a livello di riga. Per creare formule per misure e colonne calcolate, usare la barra della formula nella parte superiore della finestra di progettazione del modello o l'editor DAX. Per creare formule per la sicurezza a livello di riga, usare la finestra di dialogo Gestione ruoli o Gestisci ruoli. Lo scopo delle informazioni fornite in questa sezione è quello di facilitare la comprensione delle nozioni fondamentali relative alle formule DAX.
Nozioni fondamentali sulle formule
Le formule DAX possono essere molto semplici o piuttosto complesse. Nella tabella seguente sono riportati alcuni esempi di formule semplici che potrebbero essere utilizzate in una colonna calcolata.
Formula
Definizione
= TODAY()
Inserisce la data odierna in ogni riga di una colonna calcolata.
= 3
Inserisce il valore 3 in ogni riga di una colonna calcolata.
= [Column1] + [Column2]
Consente di sommare i valori nella stessa riga di [Column1] e [Column2] e di inserire i risultati nella colonna calcolata della stessa riga.
Per le formule create, sia semplici che complesse, è possibile utilizzare i passaggi seguenti durante la compilazione di una formula:
Ogni formula deve iniziare con un segno di uguale (=).
È possibile digitare o selezionare il nome di una funzione oppure digitare un'espressione.
Quando si inizia a digitare le prime lettere della funzione o del nome desiderato, la funzionalità Completamento automatico visualizza un elenco di funzioni, tabelle e colonne disponibili. Premere TAB per aggiungere alla formula un elemento dell'elenco Completamento automatico.
È anche possibile fare clic sul pulsante Fx per visualizzare un elenco di funzioni disponibili. Per selezionare una funzione dall'elenco a discesa, utilizzare i tasti di direzione per evidenziare l'elemento, quindi fare clic su OK per aggiungere la funzione alla formula.
Fornire gli argomenti per la funzione selezionandoli da un elenco a discesa in cui sono incluse le possibili tabelle e colonne oppure digitando i valori.
Verificare la presenza di errori di sintassi: assicurarsi che tutte le parentesi siano chiuse e che i riferimenti a colonne, tabelle e valori siano corretti.
Premere INVIO per accettare la formula.
Nota
In una colonna calcolata, non appena si immette la formula e questa viene convalidata, vengono inseriti automaticamente i valori. In una misura, la relativa definizione viene salvata con la tabella premendo INVIO. Se una formula non è valida, viene visualizzato un errore.
In questo esempio verrà esaminata una formula in una misura denominata Days in Current Quarter:
Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))
Questa misura viene utilizzata per creare un rapporto di confronto tra un periodo incompleto e il periodo precedente. È necessario che nella formula la proporzione del periodo trascorso venga presa in considerazione e confrontata con la stessa proporzione del periodo precedente. In questo caso, [Days Current Quarter to Date]/[Days in Current Quarter] fornisce la proporzione trascorsa nel periodo corrente.
Questa formula contiene i seguenti elementi:
Elemento della formula
Descrizione
Days in Current Quarter
Nome della misura.
=
Il segno di uguale (=) inizia la formula.
COUNTROWS
COUNTROWS conta il numero di righe nella tabella Date.
()
Le parentesi di apertura e chiusura specificano gli argomenti.
DATESBETWEEN
La funzione DATESBETWEEN restituisce le date tra l'ultima data per ogni valore nella colonna Date della tabella Date.
'Date'
Specifica la tabella Date. Le tabelle sono racchiuse tra virgolette singole.
[Date]
Specifica la colonna Date nella tabella Date. Le colonne sono racchiuse tra parentesi.
,
STARTOFQUARTER
La funzione STARTOFQUARTER restituisce la data dell'inizio del trimestre.
LASTDATE
La funzione LASTDATE restituisce l'ultima data del trimestre.
'Date'
Specifica la tabella Date.
[Date]
Specifica la colonna Date nella tabella Date.
,
ENDOFQUARTER
Funzione ENDOFQUARTER
'Date'
Specifica la tabella Date.
[Date]
Specifica la colonna Date nella tabella Date.
Utilizzo di Completamento automatico formule
che consente di immettere una sintassi della formula valida visualizzando le opzioni per ogni elemento della formula.
È possibile utilizzare Completamento automatico formule in una formula esistente con funzioni nidificate. Il testo immediatamente prima del punto di inserimento viene utilizzato per visualizzare i valori nell'elenco a discesa mentre tutto il testo dopo tale punto rimane invariato.
In Completamento automatico non viene aggiunta la parentesi di chiusura delle funzioni né vengono inserite automaticamente le parentesi corrispondenti. È necessario assicurarsi che ogni funzione sia sintatticamente corretta, altrimenti non sarà possibile salvare o utilizzare la formula.
Uso di più funzioni in una formula
È possibile nidificare funzioni, pertanto è possibile utilizzare i risultati di una funzione come argomento di un'altra funzione. È possibile annidare fino a 64 livelli di funzioni nelle colonne calcolate. La nidificazione può tuttavia rendere più complessa la creazione di formule o la risoluzione dei problemi relativi alle formule. Numerose funzioni sono progettate per essere utilizzate esclusivamente come funzioni nidificate. Tramite queste funzioni viene restituita una tabella, che non può essere salvata direttamente come risultato, ma deve essere fornita come input per una funzione di tabella. Ad esempio, per le funzioni SUMX, AVERAGEX e MINX è richiesta una tabella come primo argomento.
Funzioni
Una funzione è una formula denominata all'interno di un'espressione. La maggior parte delle funzioni ha come input argomenti obbligatori e facoltativi, noti anche come parametri. Quando viene eseguita la funzione, viene restituito un valore. DAX include funzioni che consentono di eseguire calcoli con date e ore, creare valori condizionali, utilizzare stringhe ed eseguire ricerche basate su relazioni, oltre a offrire la possibilità di eseguire iterazioni su una tabella per l'esecuzione di calcoli ricorsivi. Se si ha dimestichezza con le formule di Excel, molte di queste funzioni appariranno molto simili, tuttavia, le formule DAX sono diverse nelle seguenti modalità importanti:
Una funzione DAX fa sempre riferimento a una colonna completa o una tabella. Se si desidera utilizzare solo particolari valori di una tabella o colonna, è possibile aggiungere filtri alla formula.
Se è necessario personalizzare i calcoli per ogni singola riga, in DAX sono disponibili funzioni che consentono di utilizzare il valore della riga corrente o un valore correlato come un tipo di parametro, per eseguire i calcoli che variano in base al contesto. Per comprendere la logica alla base di queste funzioni, vedere la sezione Contesto in questo articolo.
In DAX sono incluse molte funzioni mediante le quali viene restituita una tabella, anziché un valore. La tabella non viene visualizzata in uno strumento client di creazione report, ma viene utilizzata per fornire input ad altre funzioni. Ad esempio, è possibile recuperare una tabella e contare i valori distinti in essa contenuti o calcolare somme dinamiche nelle tabelle o colonne filtrate.
Nelle funzioni DAX sono incluse numerose funzioni di Business Intelligence per le gerarchie temporali . Queste funzioni consentono di definire o selezionare intervalli di date e di eseguire calcoli dinamici in base a tali date o intervalli. Ad esempio, è possibile confrontare somme in periodi paralleli.
Funzione di aggregazione
Le funzioni di aggregazione calcolano un valore (scalare) come il numero, la somma, la media, il minimo o il massimo per tutte le righe di una colonna o di una tabella, come definito dall'espressione. Per altre informazioni, vedere Funzioni di aggregazione.
Funzioni di data e ora
Le funzioni di data e ora in DAX sono molto simili alle funzioni di data e ora di Microsoft Excel. Le funzioni DAX, tuttavia, sono basate su un tipo di dati datetime a partire dal 1° marzo 1900. Per altre informazioni, vedere Funzioni di data e ora.
Funzioni di filtro
Le funzioni di filtro in DAX restituiscono specifici tipi di dati, cercano valori nelle tabelle correlate e filtrano in base a valori correlati. Le funzioni di ricerca utilizzano tabelle e relazioni, come un database. Le funzioni di filtro consentono di modificare il contesto dei dati per creare calcoli dinamici. Per altre informazioni, vedere Funzioni di filtro.
Funzioni finanziarie
Le funzioni finanziarie in DAX vengono usate in formule che eseguono calcoli finanziari, ad esempio il valore attuale netto o il tasso di rendimento. Queste funzioni sono simili alle funzioni finanziarie usate in Microsoft Excel. Per altre informazioni, vedere Funzioni finanziarie.
Funzioni informative
Una funzione informativa analizza la cella o la riga fornita come argomento e indica se il valore corrisponde al tipo previsto. La funzione ISERROR, ad esempio, restituisce TRUE se il valore a cui si fa riferimento contiene un errore. Per altre informazioni, vedere Funzioni informative.
Funzioni logiche
Le funzioni logiche eseguono operazioni su un'espressione per restituire informazioni sui valori nell'espressione. La funzione TRUE, ad esempio, consente di sapere se un'espressione che si sta valutando restituirà un valore TRUE. Per altre informazioni, vedere Funzioni logiche.
Funzioni matematiche e trigonometriche
Le funzioni matematiche in DAX sono molto simili alle funzioni matematiche e trigonometriche di Excel. Esistono tuttavia alcune piccole differenze nei tipi di dati numerici utilizzati dalle funzioni DAX. Per altre informazioni, vedere Funzioni matematiche e trigonometriche.
Altre funzioni
Queste funzioni eseguono azioni particolari che non possono essere definite in base a nessuna delle categorie a cui appartiene la maggior parte delle altre funzioni. Per altre informazioni, vedere Altre funzioni.
Funzioni di relazione
Le funzioni di relazione in DAX consentono di restituire valori da un'altra tabella correlata, specificare una particolare relazione da usare in un'espressione e specificare la direzione del filtro incrociato. Per altre informazioni, vedere Funzioni di relazione.
Funzioni statistiche
Le funzioni statistiche calcolano i valori correlati a distribuzioni statistiche e probabilità, ad esempio deviazione standard e numero di permutazioni. Per altre informazioni, vedere Funzioni statistiche.
Funzioni di testo
Le funzioni di testo in DAX sono molto simili alle funzioni corrispondenti in Excel. È possibile restituire parte di una stringa, cercare testo all'interno di una stringa o concatenare valori stringa. In DAX sono inoltre disponibili funzioni per il controllo dei formati per date, ore e numeri. Per altre informazioni, vedere Funzioni di testo.
Funzioni di Business Intelligence per le gerarchie temporali
Le funzioni di Business Intelligence per le gerarchie temporali disponibili in DAX consentono di creare calcoli in cui vengono utilizzate informazioni predefinite su calendari e date. Tramite gli intervalli di ore e date in combinazione con aggregazioni o calcoli è possibile compilare confronti significativi tra periodi di tempo paragonabili relativamente a vendite, scorte e così via. Per altre informazioni, vedere Funzioni di Business Intelligence per le gerarchie temporali (DAX).
Funzioni di manipolazione delle tabelle
Queste funzioni restituiscono una tabella o modificano le tabelle esistenti. Usando ADDCOLUMNS, ad esempio, è possibile aggiungere colonne calcolate a una tabella specificata oppure è possibile restituire una tabella di riepilogo per un set di gruppi con la funzione SUMMARIZECOLUMNS. Per altre informazioni, vedere Funzioni di manipolazione delle tabelle.
Variabili
È possibile creare variabili all'interno di un'espressione usando VAR. VAR tecnicamente non è una funzione, ma una parola chiave che consente di archiviare il risultato di un'espressione come variabile denominata, che può quindi essere passata come argomento ad altre espressioni di misura. Ad esempio:
VAR
TotalQty = SUM ( Sales[Quantity] )
Return
IF (
TotalQty > 1000,
TotalQty * 0.95,
TotalQty * 1.25
)
In questo esempio, è possibile passare TotalQty come variabile denominata ad altre espressioni. Le variabili possono essere costituite da qualsiasi tipo di dati scalare, incluse tabelle. L'uso di variabili nelle formule DAX può essere incredibilmente potente.
Tipo di dati
In un modello è possibile importare dati provenienti da numerose origini dati diverse in grado di supportare tipi di dati differenti. Quando si importano dati in un modello, i dati vengono convertiti in uno dei tipi di dati dei modelli tabulari. Quando i dati del modello vengono usati in un calcolo, i dati vengono quindi convertiti in un tipo di dati DAX per la durata e l'output del calcolo. Quando si crea una formula di DAX, i termini utilizzati nella formula determinano automaticamente il tipo di dati del valore restituito.
In DAX sono supportati i tipi di dati seguenti:
Tipo di dati nel modello
Tipi di dati in DAX
Descrizione
Numero intero
Valore intero a 64 bit (otto byte) 1, 2
Numeri senza cifre decimali. I numeri interi possono essere positivi o negativi ma devono essere numeri interi compresi tra -9.223.372.036.854.775.808 (-2^63) e 9.223.372.036.854.775.807 (2^63-1).
Numero decimale
Numero reale a 64 bit (otto byte) 1, 2
I numeri reali sono numeri che possono avere cifre decimali e coprono un ampio intervallo di valori:
Valori negativi compresi tra -1,79E +308 e -2,23E -308
Zero
Valori positivi compresi tra 2,23E -308 e 1,79E + 308
Tuttavia, il numero di cifre significative è limitato a 17 cifre decimali.
Boolean
Boolean
Valore True o False.
Testo
Stringa
Stringa di dati di tipo carattere Unicode. Può trattarsi di stringhe, numeri o date rappresentati in un formato di testo.
Data
Data/ora
Date e ore in una rappresentazione di data e ora valida.
Le date valide sono tutte le date successive al 1 marzo del 1900.
Valuta
Valuta
Il tipo di dati currency consente valori compresi tra -922.337.203.685.477,5808 e 922.337.203.685.477,5807 con quattro cifre decimali di precisione fissa.
N/D
Blank
Un tipo di dati blank in DAX rappresenta e sostituisce i valori Null di SQL. È possibile creare un tipo di dati blank utilizzando la funzione BLANK, nonché verificare la presenza di tipi di dati blank utilizzando la funzione logica ISBLANK.
I modelli di dati tabulari includono anche il tipo di dati Table come input o output per molte funzioni DAX. Ad esempio, la funzione FILTER consente di utilizzare una tabella come input e di restituire un'altra tabella in cui sono contenute solo le righe che soddisfano le condizioni di filtro. Combinando le funzioni delle tabelle con le funzioni di aggregazione, è possibile eseguire calcoli complessi in set di dati definiti in modo dinamico.
Anche se i tipi di dati vengono in genere impostati automaticamente, è importante capire i tipi di dati e il modo si applicano, in particolare, alle formule DAX. Gli errori in formule o i risultati imprevisti, ad esempio, sono spesso causati dall'utilizzo di un particolare operatore che non può essere utilizzato con un tipo di dati specificato in un argomento. La formula = 1 & 2restituisce, ad esempio, come risultato la stringa 12. La formula = "1" + "2"restituisce tuttavia come risultato il valore intero 3.
Contesto
Il contesto è un concetto importante da comprendere quando si creano formule DAX. Rappresenta l'elemento che consente di eseguire analisi dinamiche, dal momento che i risultati di una formula vengono modificati per riflettere la riga o la selezione della cella corrente, nonché anche eventuali dati correlati. La comprensione del contesto e l'utilizzo efficace di quest'ultimo sono fondamentali per la realizzazioni di analisi dinamiche ad elevate prestazioni e per la risoluzione dei problemi riscontrati nelle formule.
Le formule nei modelli tabulari possono essere valutate in un contesto diverso, in base ad altri elementi di progettazione quali:
Filtri applicati in una tabella pivot o in un report
Filtri definiti all'interno di una formula
Relazioni specificate tramite funzioni speciali all'interno di una formula
Esistono diversi tipi di contesto: contesto di riga, contesto di querye contesto di filtro.
Contesto di riga
Il contesto di riga può essere considerato come "la riga corrente". Se si crea una formula in una colonna calcolata, nel contesto di riga per tale formula sono inclusi i valori di tutte le colonne presenti nella riga corrente. Se la tabella è correlata a un'altra tabella, il contenuto include anche tutti i valori dell'altra tabella che sono correlati alla riga corrente.
Si supponga ad esempio di creare una colonna calcolata, = [Freight] + [Tax], in cui vengono sommati i valori di due colonne, Freight e Tax, della stessa tabella. Tramite questa formula si ottengono automaticamente solo i valori dalla riga corrente delle colonne specificate.
Il contesto di riga segue inoltre qualsiasi relazione definita tra le tabelle, incluse le relazioni definite all'interno di una colonna calcolata tramite formule DAX, per determinare quali righe nelle tabelle correlate sono associate alla riga corrente.
Nella formula seguente viene ad esempio utilizzata la funzione RELATED per recuperare un valore relativo all'imposta da una tabella correlata, in base all'area in cui è stato eseguito l'ordine. Il valore dell'imposta viene determinato utilizzando il valore per regione nella tabella corrente, effettuando la ricerca della regione nella tabella correlata e quindi ottenendo l'aliquota di imposta per tale regione dalla tabella correlata.
= [Freight] + RELATED('Region'[TaxRate])
Questa formula ottiene l'aliquota di imposta per la regione corrente dalla tabella Region e la somma al valore della colonna Freight. Nelle formule DAX non è necessario conoscere o specificare la relazione specifica che connette le tabelle.
Contesto di più righe
In DAX sono inoltre incluse funzioni che iterano i calcoli in una tabella. Queste funzioni possono presentare più righe correnti, ognuna con un proprio contesto di riga. In pratica, queste funzioni consentono di creare formule mediante le quali vengono eseguite operazioni in modo ricorsivo su un ciclo interno ed esterno.
Si supponga ad esempio che in un modello sia contenuta una tabella Products e una tabella Sales . Potrebbe essere necessario scorrere l'intera tabella delle vendite, piena di transazioni che riguardano più prodotti, e individuare la quantità più grande ordinata per ogni prodotto in una transazione qualunque.
Con DAX è possibile compilare una sola formula mediante la quale viene restituito il valore corretto e i risultati vengono aggiornati automaticamente tutte le volte che un utente aggiunge dati alle tabelle.
Per un esempio dettagliato di questa formula, vedere Funzione EARLIER.
Per riepilogare, la funzione EARLIER consente di archiviare il contesto di riga dall'operazione che ha preceduto l'operazione corrente. La funzione archivia sempre in memoria due set di contesto: uno rappresenta la riga corrente del ciclo interno della formula e l'altro rappresenta la riga corrente del ciclo esterno della formula. DAX utilizza automaticamente i valori tra due cicli in modo che sia possibile creare aggregazioni complesse.
Contesto di query
Ilcontesto di query fa riferimento al subset di dati recuperato in modo implicito per una formula. Quando un utente inserisce una misura o un campo in un report, ad esempio, il motore esamina le intestazioni di riga e di colonna, i filtri dei dati e i filtri del report per determinare il contesto. Le query necessarie vengono quindi eseguite sui dati del modello per ottenere il subset corretto di dati, effettuare i calcoli definiti dalla formula e quindi popolare i valori nel report.
Dal momento che il contesto cambia a seconda della posizione della formula, anche i risultati della formula possono cambiare. Si supponga ad esempio di creare una formula in cui vengono sommati i valori della colonna Profit della tabella Sales : = SUM('Sales'[Profit]). Se si utilizza tale formula in una colonna calcolata all'interno della tabella Sales , i risultati saranno uguali per l'intera tabella, in quanto il contesto di query per la formula è sempre l'intero set di dati della tabella Sales . I risultati indicheranno i profitti per tutte le regioni, tutti i prodotti, tutti gli anni e così via.
In genere, non è tuttavia necessario visualizzare lo stesso risultato centinaia di volte, poiché è più utile ottenere i profitti per un anno, un paese, un prodotto specifico o una combinazione di tali elementi, per pervenire quindi a un totale complessivo.
In un report è possibile modificare il contesto filtrando, aggiungendo o rimuovendo campi e usando i filtri dei dati. Per ogni modifica, cambia il contesto di query in cui la misura viene valutata. Pertanto, la stessa formula utilizzata in una misura viene valutata in un contesto di query diverso per ogni cella.
Contesto di filtro
Ilcontesto di filtro è il set di valori consentito in ogni colonna o nei valori recuperati da una tabella correlata. I filtri possono essere applicati alla colonna nella finestra di progettazione o nel livello di presentazione (report e tabelle pivot). Possono essere definiti inoltre in modo esplicito dalle espressioni di filtro all'interno della formula.
Il contesto di filtro viene aggiunto quando si specificano vincoli del filtro sul set di valori consentito in una colonna o una tabella utilizzando gli argomenti di una formula. Tale contesto viene applicato su altri contesti, ad esempio il contesto di riga o il contesto di query.
Nei modelli tabulari sono disponibili molti modi per creare il contesto di filtro. All'interno del contesto dei client che possono usare il modello, ad esempio report di Power BI, gli utenti possono creare filtri rapidamente aggiungendo filtri dei dati o filtri dei report sulle intestazioni di riga e di colonna. È possibile specificare anche espressioni di filtro direttamente all'interno della formula, per specificare i valori correlati, per filtrare tabelle utilizzate come input o per ottenere dinamicamente il contesto per i valori utilizzati nei calcoli. È inoltre possibile deselezionare completamente o in modo selettivo i filtri in colonne specifiche. Questa operazione risulta molto utile quando si creano formule che consentono di calcolare totali complessivi.
Per altre informazioni su come creare filtri nelle formule, vedere Funzione FILTER (DAX).
Per un esempio della modalità di deselezione dei filtri per creare totali complessivi, vedere Funzione ALL (DAX).
Per esempi su come deselezionare e applicare in modo selettivo i filtri nelle formule, vedere ALLEXCEPT.
Determinazione del contesto nelle formule
Una volta creata una formula DAX, viene innanzitutto testata la validità della relativa sintassi e viene quindi verificato che i nomi delle colonne e delle tabelle incluse nella formula siano presenti nel contesto corrente. Se non è possibile trovare una colonna o una tabella specificata dalla formula, viene restituito un errore.
Il contesto durante la convalida, e le operazioni di ricalcolo, viene determinato come descritto nelle sezioni precedenti utilizzando le tabelle disponibili nel modello, eventuali relazioni tra le tabelle ed eventuali filtri applicati.
Se ad esempio sono appena stati importati dati in una nuova tabella che non sono correlati a nessun'altra e a cui non è stato applicato alcun filtro, il contesto corrente è tutto il set di colonne della tabella. Se la tabella è collegata tramite relazioni ad altre tabelle, nel contesto corrente sono incluse le tabelle correlate. Se si aggiunge una colonna della tabella a un report che dispone di filtri dei dati e forse di alcuni filtri report, il contesto per la formula è il subset di dati in ogni cella del report.
Quello di contesto è un concetto articolato e complesso, che può rendere difficile risolvere i problemi relativi alle formule. È consigliabile iniziare con formule e relazioni semplici per verificare il funzionamento del contesto. Nella sezione seguente vengono forniti alcuni esempi del modo in cui le formule utilizzano tipi diversi di contesto per restituire risultati in modo dinamico.
Operatori
Nel linguaggio DAX vengono utilizzati quattro tipi diversi di operatori di calcolo nelle formule:
Operatori di confronto per confrontare valori e restituire un valore logico TRUE\FALSE.
Operatori aritmetici per eseguire calcoli aritmetici che restituiscono valori numerici.
Operatori di concatenazione di testo per unire in join due o più stringhe di testo.
Operatori logici per combinare due o più espressioni e restituire un singolo risultato.
Per informazioni dettagliate sugli operatori usati nelle formule DAX, vedere Operatori DAX.
Utilizzo di tabelle e colonne
Le tabelle nei modelli di dati tabulari sono simili a quelle di Excel, ma differiscono nell'utilizzo dei dati e delle formule:
Nelle formule vengono utilizzate solo tabelle e colonne, non celle singole, riferimenti a intervalli o matrici.
Nelle formule possono essere utilizzate relazioni per ottenere i valori dalle tabelle correlate. I valori recuperati sono sempre correlati al valore della riga corrente.
Non è possibile avere dati irregolari o non allineati come in un foglio di lavoro di Excel. Ogni riga di una tabella deve contenere lo stesso numero di colonne. Tuttavia è possibile disporre di valori vuoti in alcune colonne. Le tabelle di dati di Excel e quelle dei modelli tabulari non sono intercambiabili.
Poiché per ogni colonna viene impostato un tipo di dati, ogni valore nella colonna deve essere dello stesso tipo.
Riferimento a tabelle e colonne nelle formule
È possibile fare riferimento a qualsiasi tabella e colonna tramite il relativo nome. Ad esempio, nella formula seguente viene illustrato come fare riferimento alle colonne da due tabelle utilizzando il nome completo :
Durante la valutazione di una formula, in Progettazione modelli viene verificata prima la sintassi generale, quindi vengono controllati i nomi delle colonne e delle tabelle forniti in base alle possibili colonne e tabelle del contesto corrente. Se il nome è ambiguo o non è possibile trovare la colonna o tabella, si verificherà un errore nella formula e nelle celle in cui si è verificato l'errore verrà visualizzata una stringa #ERRORE anziché il valore di dati. Per altre informazioni sui requisiti di denominazione per tabelle, colonne e altri oggetti, vedere la sezione "Requisiti per la denominazione" in Sintassi DAX.
Relazioni tra tabelle
Creando relazioni tra le tabelle, è possibile usare i valori correlati in altre tabelle nei calcoli. È ad esempio possibile usare una colonna calcolata per determinare tutti i record di spedizione correlati al rivenditore corrente e quindi sommare i costi di spedizione per ognuno. In molti casi, tuttavia, una relazione potrebbe non essere necessaria. È possibile usare la funzione LOOKUPVALUE in una formula per restituire il valore in result_columnName per la riga che soddisfa i criteri specificati negli argomenti search_column e search_value.
Molte funzioni DAX richiedono l'esistenza di una relazione tra le tabelle, o tra più tabelle, per consentire l'individuazione delle colonne cui è stato fatto riferimento e restituire risultati appropriati. Tramite altre funzioni verrà tentata l'identificazione della relazione, tuttavia per ottenere i migliori risultati è consigliabile creare sempre una relazione dove possibile.
I modelli di dati tabulari supportano più relazioni tra tabelle. Per evitare confusione o risultati errati, viene designata come relazione attiva una sola relazione alla volta, ma è possibile modificare tale relazione, in base alle esigenze, per attraversare connessioni diverse nei dati dei calcoli. Per specificare una o più relazioni da usare in un calcolo specifico è disponibile la funzione USERELATIONSHIP.
Quando si usano le relazioni è importante rispettare le seguenti regole di progettazione delle formule:
Quando le tabelle sono connesse tramite una relazione, è necessario assicurarsi che le due colonne usate come chiavi dispongano di valori corrispondenti. L'integrità referenziale non viene tuttavia applicata, pertanto è possibile che in una colonna chiave siano presenti valori non corrispondenti, ma che si possa comunque creare una relazione. In tal caso, è necessario tenere presente che i valori vuoti o non corrispondenti potrebbero influire sui risultati delle formule.
Quando si collegano tabelle nel modello tramite relazioni, viene ampliato l'ambito o contestonel quale vengono valutate le formule. Le modifiche al contesto che derivano dall'aggiunta di nuove tabelle, di nuove relazioni o da cambiamenti della relazione attiva possono causare modiche ai risultati difficili da prevedere. Per altre informazioni, vedere la sezione Contesto in questo articolo.
Elaborazione e aggiornamento
L'elaborazione e il ricalcolo sono due operazioni distinte ma correlate. È necessario comprendere in modo approfondito questi concetti ai fini della progettazione di un modello contenente formule complesse, grandi quantità di dati o dati ottenuti da origini dati esterne.
L'elaborazione (aggiornamento) è il processo di aggiornamento dei dati in un modello con nuovi dati provenienti da un'origine dati esterna.
Ilricalcolo è il processo di aggiornamento dei risultati delle formule in modo che riflettano qualsiasi modifica alle formule stesse e le modifiche nei dati sottostanti. Il ricalcolo può avere effetto sulle prestazioni nei modi seguenti:
I valori in una colonna calcolata vengono calcolati e archiviati nel modello. Per aggiornare i valori nella colonna calcolata, è necessario elaborare il modello utilizzando uno di tre comandi di elaborazione: . Elaborazione completa, Elaborazione dati o Elabora ricalcolo. È necessario sempre ricalcolare il risultato della formula per la colonna intera, ogni volta che la formula viene modificata.
I valori calcolati dalle misure vengono valutati dinamicamente ogni volta che un utente aggiunge la misura a una tabella pivot o apre un report. Quando l'utente modifica il contesto, i valori restituiti dalla misura cambiano. I risultati della misura riflettono sempre gli ultimi dati nella cache in memoria.
L'elaborazione e il ricalcolo non hanno effetto sulle formule per la sicurezza a livello di riga, a meno che il risultato di un ricalcolo non restituisca un valore diverso, rendendo in tal modo possibile o impedendo l'esecuzione di query sulla riga da parte di membri del ruolo.
Aggiornamenti
In DAX vengono continuamente apportati miglioramenti. Funzioni nuove e aggiornate vengono rilasciate con il successivo aggiornamento disponibile, che in genere è a cadenza mensile. I servizi vengono aggiornati per primi, seguiti dalle applicazioni installate come Power BI Desktop, Excel, SQL Server Management Studio (SSMS) e l'estensione dei progetti di Analysis Services per Visual Studio (SSDT). SQL Server Analysis Services viene aggiornato con l'aggiornamento cumulativo successivo. Le nuove funzioni vengono prima annunciate e descritte nella documentazione di riferimento delle funzioni DAX in concomitanza con gli aggiornamenti di Power BI Desktop.
Non tutte le funzioni sono supportate nelle versioni precedenti di SQL Server Analysis Services ed Excel.
Risoluzione dei problemi
Se si ottiene un errore quando si definisce una formula, è possibile che la formula contenga un errore sintattico, un errore semanticoo un errore di calcolo.
Gli errori sintattici sono i più facili da risolvere. In genere sono dovuti a una parentesi o una virgola mancante.
L'altro tipo di errore si verifica quando la sintassi è corretta, ma il valore o la colonna a cui si fa riferimento non è appropriato nel contesto della formula. Tali errori semantici e di calcolo potrebbero essere causati da uno qualsiasi dei problemi seguenti:
La formula fa riferimento a una colonna, una tabella o una funzione non esistente.
La formula sembra essere corretta, ma quando il motore dati recupera i dati, viene rilevato un tipo non corrispondente e quindi generato un errore.
La formula passa a una funzione un numero o un tipo di argomento errato.
La formula fa riferimento a una colonna diversa che contiene un errore e pertanto i valori non sono validi.
La formula fa riferimento a una colonna che non è stata elaborata, pertanto dispone di metadati ma non dati effettivi da utilizzare per i calcoli.
Nei primi quattro casi, tramite DAX viene contrassegnata l'intera colonna in cui è contenuta la formula non valida. Nell'ultimo caso, tramite DAX la colonna che si trova in uno stato non elaborato viene visualizzata in grigio.
App e strumenti
Power BI Desktop
Power BI Desktop è un'applicazione gratuita per la creazione di report e la modellazione dei dati. La funzionalità per la progettazione dei modelli include un editor DAX che consente di creare formule di calcolo DAX.
Power Pivot in Excel
La funzionalità per la progettazione dei modelli di Power Pivot in Excel include un editor DAX per la creazione di formule di calcolo DAX.
Visual Studio
Visual Studio con l'estensione dei progetti di Analysis Services (VSIX) consente di creare progetti di modelli di Analysis Services. Progettazione modelli tabulari, installato con l'estensione dei progetti, include un editor DAX.
SQL Server Management Studio
SQL Server Management Studio (SSMS) è uno strumento essenziale per l'utilizzo di Analysis Services. Include un editor di query DAX per l'esecuzione di query su modelli tabulari e multidimensionali.
DAX Studio
DAX Studio è uno strumento client open source per la creazione e l'esecuzione di query DAX su modelli di Analysis Services, Power BI Desktop e Power Pivot in Excel.
Tabular Editor
Tabular Editor è uno strumento open source che offre una visualizzazione gerarchica intuitiva di ogni oggetto nei metadati del modello tabulare. Tabular Editor include un editor DAX con evidenziazione della sintassi, che consente di modificare in modo semplice misure, colonne calcolate ed espressioni di tabella calcolata.
Risorse di formazione
Durante la fase di apprendimento del linguaggio DAX, è preferibile eseguire l'applicazione che si userà per creare i modelli di dati. Per Analysis Services, Power BI Desktop e Power Pivot in Excel sono disponibili articoli ed esercitazioni che includono lezioni sulla creazione di misure, colonne calcolate e filtri di riga tramite DAX. Altre risorse:
The Definitive Guide to DAX di Alberto Ferrari e Marco Russo (Microsoft Press). Nella seconda edizione, questa guida completa fornisce nozioni di base relativamente alle tecniche innovative ad alte prestazioni per autori di modelli di dati e professionisti di Business Intelligence che si vogliono avvicinare a questo linguaggio.
Community
DAX ha una vivace community sempre disposta a condividere le proprie competenze. La Community di Power BI Microsoft presenta un forum di discussione speciale solo per DAX, suggerimenti e comandi DAX.
Alla fine di questo modulo sarà possibile aggiungere tabelle calcolate e colonne calcolate al modello semantico. Sarà inoltre possibile descrivere il contesto di riga, che viene usato per valutare le formule della colonna calcolata. Poiché è possibile aggiungere colonne a una tabella usando Power Query, si apprenderà anche quando è preferibile creare colonne calcolate invece di colonne personalizzate Power Query.