Panoramica di DAX
Data Analysis Expressions (DAX) è un linguaggio di espressione formula usato in Analysis Services, Power BI, andPower Pivot in Excel. DAX formule includono funzioni, operatori andvalues per eseguire calcoli avanzati and query sui dati nelle tabelle relatedand colonne nei modelli di dati tabulari.
Questo articolo fornisce solo un'introduzione di base ai concetti più importanti in DAX. Descrive DAX come si applica a all i prodotti che lo utilizzano. Alcune funzionalità possono not applicarsi a determinati prodotti o casi d'uso or. Fare riferimento alla documentazione di productche descrive la sua implementazione specifica di DAX.
Calcoli
DAX formule vengono usate in misure, colonne calcolate, tabelle calcolate and sicurezza a livello di riga.
Misure
Le misure sono formule di calcolo dinamiche i cui risultati cambiano a seconda del contesto. Le misure vengono utilizzate nei report che supportano la combinazione di dati filtrati del modello and utilizzando più attributi, come un report di business intelligence Power, una tabella pivot di Excel or, o un grafico pivot or. Le misure vengono create utilizzando la barra della formula DAX nella finestra di progettazione modelli.
Una formula in un measure può usare funzioni di aggregazione standard create automaticamente usando la funzionalità Somma automatica, ad esempio COUNTorSUM, or è possibile define formula personalizzata usando la barra della formula DAX. Le misure con nome possono essere passate come argomento ad altre misure.
Quando si define una formula per un measure nella barra della formula, una funzionalità di suggerimento mostra un'anteprima dei risultati per il totale nel contesto corrente, altrimenti i risultati vengono not immediatamente visualizzati ovunque. Il motivo per cui non è possibile visualizzare immediatamente i risultati (filtrati) del calcolo è dovuto al fatto che il risultato di un measure non può essere determinato senza contesto. Per evaluate un measure richiede un'applicazione client per la creazione di report in grado di fornire il contesto necessario per recuperare i dati rilevanti per ogni cella and quindi evaluate l'espressione per ogni cella. Quel client potrebbe essere una tabella pivot di Excel, un grafico pivot or, un report Power BI, or 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. Vale a dire, ogni combinazione delle intestazioni di riga e colonna and in una tabella pivot, or ogni selezione di slicer andfilters in un report di BI Power, genera un diverso subset di dati su cui viene calcolato il measure. Ad esempio, usando questa formula measure molto semplice:
Total Sales = SUM([Sales Amount])
Quando un utente inserisce il measure TotalSales in un report, and quindi inserisce la colonna Product Category da una tabella Product in Filters, la sum di Importo vendite viene calcolata and visualizzata per ogni categoria di product.
A differenza delle colonne calcolate, la sintassi di un measure include il nome del measureche precede la formula. Nell'esempio sopra riportato, il nome Total Sales viene visualizzato prima della formula. Dopo aver creato un measure, il nome and e la sua definizione vengono visualizzati nell'elenco dei campi dell'applicazione client di creazione report, e and a seconda delle prospettive e dei ruoli and è disponibile per gli all utenti del modello.
Per altre informazioni, vedere:
misure in Power BI Desktop
Misure in Analysis Services
Misure in Pivot
Colonne calcolate
Una colonna calcolata è una colonna che aggiungi a una tabella esistente (nella finestra di progettazione modelli) and, quindi crea una formula DAX che definisce il valuesdella colonna stessa. Quando una colonna calcolata contains una formula valida di DAX, values vengono calcolati per ogni riga non appena viene immessa la formula. Values vengono quindi archiviati nel modello di dati in memoria. Ad esempio, in una tabella Date, quando si inserisce una formula nella barra della formula:
= [Calendar Year] & " Q" & [Calendar Quarter]
Una value per ogni riga della tabella viene calcolata prendendo values dalla colonna CalendarYear (nella stessa tabella Date), aggiungendo uno spazio and la lettera maiuscola Q, and quindi aggiungendo il values dalla colonna CalendarQuarter (nella stessa tabella Date). Il risultato di ogni riga nella colonna calcolata viene calcolato non appena appare and, ad esempio, come 2017 Q1. Le values di colonna vengono ricalcolate solo if la tabella or qualsiasi tabella related viene elaborata (aggiornamento) or il modello viene scaricato dalla memoria and quindi ricaricato, ad esempio quando si chiude and riaprire un file di Power BI Desktop.
Per altre informazioni, vedere:
Colonne calcolate in Power BI Desktop
Colonne calcolate in Analysis Services
colonne calcolate in Power Pivot.
Tabelle calcolate
Una tabella calcolata è un oggetto calcolato, basato su un'espressione di formula, derivata da allor parte di altre tabelle nello stesso modello. Anziché effettuare una query su and per caricare values nelle colonne della nuova tabella da un'origine dati, una formula DAX definisce valuesdella tabella.
Le tabelle calcolate possono essere utili in una dimensione con ruoli multipli. Un esempio è la tabella Date, come OrderDate, ShipDate, or 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 quando si configura un set di righe filtrate, or come un subset o or un superset di colonne provenienti da 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 della tabella calcolata hanno tipi di dati, formattazione and possono appartenere a una categoria di dati. Le tabelle calcolate possono essere denominate, visualizzate come and o nascoste come or, esattamente come qualsiasi altra tabella. Le tabelle calcolate vengono ricalcolate if tutte le tabelle da cui estrae i dati vengono aggiornate or.
Per altre informazioni, vedere:
Tabelle calcolate in Power BI Desktop
Tabelle calcolate in Analysis Services
Sicurezza a livello di riga
Con la sicurezza a livello di riga, una formula DAX deve evaluate a una condizione booleana TRUE
/FALSE
, definendo quali righe possono essere restituite dai risultati di una query da parte dei membri di un determinato ruolo. Ad esempio, per i membri del ruolo di Vendite, la tabella Clienti con la seguente formula DAX:
= Customers[Country] = "USA"
I membri del ruolo Vendite saranno in grado di visualizzare solo i dati per i clienti negli Stati Uniti, mentre gli aggregati and, come SUM, vengono restituiti solo per i clienti negli Stati Uniti. La sicurezza a livello di riga è not disponibile in Power Pivot in Excel.
Quando si definisce la sicurezza a livello di riga utilizzando la formula DAX, si crea un set di righe consentito. Ciò not negare l'accesso ad altre righe; vengono invece semplicemente not restituiti come parte del set di righe consentito. Altri ruoli possono consentire l'accesso alle righe escluse dalla formula DAX. If un utente è membro di un altro ruolo, and la sicurezza a livello di riga del ruolo consente l'accesso a quel particolare set di righe, l'utente può visualizzare i dati per tale riga.
Le formule di sicurezza a livello di riga si applicano alle righe specificate e alle righe related. Quando una tabella ha più relazioni, filters applica la sicurezza per la relazione attiva. Le formule di sicurezza a livello di riga verranno intersecate con altre formule definite per le tabelle related.
Per altre informazioni, vedere:
Sicurezza a livello di riga (RLS) con Power BI
Ruoli in Analysis Services
Query
DAX è possibile creare query and eseguite in SQL Server Management Studio (SSMS) and strumenti open source come DAX Studio (daxstudio.org). A differenza delle formule di calcolo DAX, che si possono creare solo nei modelli di dati tabulari, le query DAX si possono eseguire anche su modelli multidimensionali di Analysis Services. DAX query sono spesso più facili da scrivere and più efficienti rispetto alle query MDX (Multidimensional Data Expressions).
Una query DAX è un'istruzione simile a un'istruzione SELECT in T-SQL. Il tipo più semplice di query DAX è una dichiarazione 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. Le misure esistono solo per il duration della query. Per altre informazioni, vedere le query DAX.
Formule
DAX formule sono essenziali per la creazione di calcoli in colonne calcolate and misure, and proteggere i dati usando la sicurezza a livello di riga. Per creare formule per le colonne calcolate and misure, utilizzare la barra della formula nella parte superiore di Progettazione modelli windowor editor DAX. Per creare formule per la sicurezza a livello di riga, usare la finestra di dialogo Role Manager or Gestisci ruoli. Le informazioni contenute in questa sezione sono utili per iniziare a comprendere le nozioni di base delle formule di DAX.
Nozioni fondamentali sulle formule
DAX formule possono essere molto semplici or piuttosto complesse. Nella tabella seguente sono riportati alcuni esempi di formule semplici che potrebbero essere utilizzate in una colonna calcolata.
Formula | Definizione |
---|---|
= TODAY() |
Inserisce todaydate in ogni riga di una colonna calcolata. |
= 3 |
Inserisce il value 3 in ogni riga di una colonna calcolata. |
= [Column1] + [Column2] |
Aggiunge il values nella stessa riga di [Column1] and [Column2] and e posiziona i risultati nella colonna calcolata della stessa riga. |
Se la formula creata è semplice or complessa, è possibile usare i passaggi seguenti durante la compilazione di una formula:
Ogni formula deve iniziare con un sign uguale (=).
È possibile digitare or selezionare un nome di funzione or digitare un'espressione.
Iniziare a digitare le first poche lettere del nome della funzione or desiderato, and il Completamento automatico visualizza un elenco di funzioni, tabelle e and 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, usare i tasti di direzione per evidenziare l'elemento, and fare clic OK per aggiungere la funzione alla formula.
Fornire gli argomenti alla funzione selezionandoli da un elenco a discesa di possibili tabelle and colonne, or digitando in values.
Verificare la presenza di errori di sintassi: assicurarsi che le parentesi all siano chiuse e che le colonne and e le tabelle andvalues siano referenziate correttamente.
Premere INVIO per accettare la formula.
Nota
In una colonna calcolata non appena si immette la formula and la formula viene convalidata, la colonna viene popolata con values. In un measure, premendo INVIO, la definizione di measure viene salvata insieme alla tabella. If una formula non è valida, viene visualizzato un error.
In questo esempio si esaminerà una formula in un measure denominato Days in Current Quarter:
Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))
Questo measure viene usato per creare un rapporto di confronto tra un periodo incompleto and il periodo di previous. La formulazione deve tenere conto della proporzione del periodo trascorso, and e confrontarla con la stessa proporzione nel periodo di previous. In questo caso, [Days Current Quarter to Date]/[Days in Current Quarter] dà la percentuale trascorsa nel periodo corrente.
Questa formula contains include i seguenti elementi:
Elemento della formula | Descrizione |
---|---|
Days in Current Quarter |
Nome del measure. |
= |
L'uguale sign (=) inizia la formula. |
COUNTROWS |
COUNTROWS conteggia il numero di righe nella tabella Date |
() |
La parentesi aperta and specifica gli argomenti. |
DATESBETWEEN |
La funzione DATESBETWEEN restituisce le date comprese tra il lastdate per ogni value 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 il date dell'inizio del quarter. |
LASTDATE |
La funzione LASTDATE restituisce il lastdate del quarter. |
'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 values nell'elenco a discesa, e andall del testo dopo il punto di inserimento rimane invariato.
Il completamento automatico not aggiunge la parentesi di chiusura delle funzioni e or abbina automaticamente le parentesi. È necessario assicurarsi che ogni funzione sia sintatticamente corretta or non è possibile salvare or usare 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. Tuttavia, l'annidamento può rendere difficile creare formule di risoluzione dei problemi or. 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, le funzioni SUMX, AVERAGEX, andMINXall richiedono una tabella come argomento first.
Funzioni
Una funzione è una formula denominata all'interno di un'espressione. La maggior parte delle funzioni ha richiesto and argomenti facoltativi, noti anche come parametri, come input. Quando viene eseguita la funzione, viene restituito un value. DAX include funzioni che è possibile utilizzare per eseguire calcoli usando date e orari and, creare condizioni values, lavorare con le stringhe, eseguire ricerche in base alle relazioni e and avere la possibilità di scorrere una tabella per eseguire calcoli ricorsivi. If Se hai familiarità con le formule di Excel, molte di queste funzioni appariranno molto simili; tuttavia, DAX le formule sono diverse nei seguenti modi importanti:
Una funzione DAX fa sempre riferimento a una colonna completa or una tabella. If si desidera utilizzare solo values elementi di una colonna della tabella or, è possibile aggiungere filters alla formula.
If è necessario personalizzare i calcoli in base a riga per riga, DAX fornisce funzioni che consentono di usare la riga corrente valueor un relatedvalue come tipo di parametro, per eseguire calcoli che variano in base al contesto. Per comprendere la logica alla base di queste funzioni, vedere la sezione Contesto in questo articolo.
DAX include molte funzioni che restituiscono una tabella, anziché un value. La tabella è not visualizzata in un client di report, ma viene usata per fornire input ad altre funzioni. Ad esempio, puoi recuperare una tabella and, quindi count il values distinto in essa, e orcalculate somme dinamiche su colonne or di tabelle filtrate.
DAX funzioni includono un'ampia gamma di funzioni di intelligence time. Queste funzioni consentono di defineor selezionare date intervalli, ed and eseguire calcoli dinamici basati su queste date orrange. Ad esempio, è possibile confrontare somme in periodi paralleli.
Funzione di aggregazione
Le funzioni di aggregazione calculate un value (scalare), ad esempio count, sum, average, or minimo, or massimo per le righe all in una colonna or tabella definita dall'espressione. Per altre informazioni, vedere Funzioni di aggregazione.
funzioni Dateandtime
Le funzioni di dateandtime in DAX sono simili alle funzioni di dateandtime in Microsoft Excel. Tuttavia, DAX funzioni si basano su un tipo di dati datetime datetime a partire dal 1° marzo 1900. Per altre informazioni, vedere le funzioni di Dateandtime.
funzioni Filter
Le funzioni di filter in DAX restituiscono tipi di dati specifici, cercano values nelle tabelle related, andfilter da relatedvalues. Le funzioni di ricerca funzionano usando tabelle and relazioni, ad esempio un database. Le funzioni di filtro consentono di modificare il contesto dei dati per creare calcoli dinamici. Per altre informazioni, vedere le funzioni Filter.
Funzioni finanziarie
Le funzioni finanziarie in DAX vengono utilizzate nelle formule che eseguono calcoli finanziari, ad esempio net present valueandrate di rendimento. Queste funzioni sono simili alle funzioni finanziarie usate in Microsoft Excel. Per altre informazioni, vedere Funzioni finanziarie.
Funzioni informative
Una funzione informativa esamina la cella nella riga or fornita come argomento, e and ti dice se value corrisponde al tipo previsto. Ad esempio, la funzione ISERROR restituisce TRUE
if il value a cui si fa riferimento contains un error. Per altre informazioni, vedere Funzioni informative.
Funzioni logiche
Le funzioni logiche agiscono su un'espressione per restituire informazioni sul values nell'espressione. Ad esempio, la funzione TRUE
consente di sapere se un'espressione che si sta valutando restituisce un TRUE
value. Per altre informazioni, vedere Funzioni logiche.
Funzioni matematiche and trigonometriche
Le funzioni matematiche in DAX sono molto simili alle funzioni matematiche di Excel and trigonometriche. Esistono alcune differenze minime nei tipi di dati numerici usati dalle funzioni di DAX. Per altre informazioni, vedere Funzioni matematiche and 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 values da un'altra tabella related, specificare una determinata relazione da usare in un'espressione and specificare la direzione del filtro incrociato. Per altre informazioni, vedere Funzioni di relazione.
Funzioni statistiche
Le funzioni statistiche calculatevaluesrelated alle distribuzioni statistiche and probabilità, ad esempio la deviazione standard and numero di permutazioni. Per altre informazioni, vedere Funzioni statistiche.
Funzioni di testo
Le funzioni di testo in DAX sono molto simili alle relative controparti in Excel. È possibile restituire parte di una stringa, search per il testo all'interno di una stringa, orconcatenate stringa values. DAX fornisce anche funzioni per controllare i formati per date, ore, and numeri. Per altre informazioni, vedere Funzioni di testo.
funzioni di intelligence Time
Le funzioni di intelligence time fornite in DAX consentono di creare calcoli che usano conoscenze predefinite sui calendari and date. Usando intervalli di timeanddate in combinazione con le aggregazioni or calcoli, è possibile creare confronti significativi tra periodi di time confrontabili per vendite, inventario, and così via. Per maggiori informazioni, vedere le funzioni di intelligence Time (DAX).
Funzioni di manipolazione delle tabelle
Queste funzioni restituiscono una tabella or modificare le tabelle esistenti. Ad esempio, usando ADDCOLUMNS è possibile aggiungere colonne calcolate a una tabella specificata, or è possibile restituire una tabella di riepilogo su 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 not una funzione, si tratta di una parola chiave per archiviare il risultato di un'espressione come variabile denominata. Tale variabile può quindi essere passata come argomento ad altre espressioni measure. 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 l'output durationand del calcolo. Quando si crea una formula DAX, i termini usati nella formula determineranno automaticamente il tipo di dati value restituito.
DAX supporta i tipi di dati seguenti:
Tipo di dati nel modello | Tipo di dati in DAX | Descrizione |
---|---|---|
Whole Number |
Intero a 64 bit (otto-byte) value1, 2 | Numeri senza cifre decimali. I numeri interi possono essere positivi or numeri negativi, ma devono essere numeri interi compresi tra -9.223.372.036.854.775.808 (-2^63) and 9.223.372.036.854.775.807 (2^63-1). |
Decimal Number |
Numero reale a 64 bit (otto byte) 1, 2 | I numeri reali sono numeri che possono avere cifre decimali I numeri reali coprono un'ampia range di values: values negativo da -1,79E +308 a -2,23E -308 Zero values positivi da 2,23E -308 a 1,79E + 308 Tuttavia, il numero di cifre significative è limitato a 17 cifre decimali. |
Boolean |
Boolean | Una TrueorFalsevalue. |
Text |
Stringa | Stringa di dati di tipo carattere Unicode. Possono essere stringhe, numeri or o date rappresentate in un testo format. |
Date |
Date/time | Date and e ore in una rappresentazione accettata tra dateetime. Le date valide sono date all dopo il 1° marzo 1900. |
Currency |
Currency | Currency tipo di dati consente values tra -922.337.203.685.477.5808 e 922.337.203.685.477.5807 con una precisione di fixed fino a quattro cifre decimali. |
N/A |
Blank | Un blank è un tipo di dati in DAX che rappresenta and, sostituendo i valori null di SQL. È possibile creare una blank usando la funzione BLANK, and testare gli spazi vuoti usando la funzione logica ISBLANK. |
I modelli di dati tabulari includono anche il tipo di dati tabella
Anche se i tipi di dati vengono in genere impostati automaticamente, è importante comprendere i tipi di dati and come si applicano, in particolare, alle formule DAX. Gli errori nelle formule or, come risultati imprevisti, ad esempio, sono spesso causati dall'uso di un particolare operatore che non può essere utilizzato con un tipo di dati specificato in un argomento. La formula = 1 & 2
restituisce, ad esempio, come risultato la stringa 12. La formula = "1" + "2"
restituisce tuttavia come risultato il valore intero 3.
Contesto
contesto è un concetto importante da comprendere quando si creano formule DAX. Il contesto consente di eseguire un'analisi dinamica, poiché i risultati di una formula cambiano per riflettere la selezione della riga corrente or delle celle and e anche eventuali dati related. La comprensione del contesto and l'uso efficace del contesto è fondamentale per la creazione di analisi dinamiche e ad alte prestazioni, and per la risoluzione dei problemi nelle formule.
Le formule nei modelli tabulari possono essere valutate in un contesto diverso, in base ad altri elementi di progettazione quali:
- Filters applicato in un report di tabella pivot or
- Filters definita 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 query, andcontestofilter.
Contesto di riga
Il contesto di riga può essere considerato come "la riga corrente". If si crea una formula in una colonna calcolata, il contesto di riga per tale formula include values nelle colonne all nella riga corrente. If la tabella è related a un'altra tabella, il contenuto include anche all i values dall'altra tabella che sono related alla riga corrente.
Supponiamo, ad esempio, di creare una colonna calcolata, = [Freight] + [Tax]
, che somma values dei valori di due colonne, Fattura and Imposte, dalla stessa tabella. Questa formula ottiene automaticamente solo il values dalla riga corrente nelle colonne specificate.
Il contesto di riga segue anche tutte le relazioni definite tra tabelle, incluse le relazioni definite all'interno di una colonna calcolata tramite formule DAX, per determinare le righe nelle tabelle related associate alla riga corrente.
Ad esempio, la formula seguente usa la funzione RELATED per recuperare un value fiscale da una tabella related, in base all'area in cui è stato spedito l'ordine. Il value fiscale viene determinato usando il value per l'area nella tabella corrente, cercando l'area nella tabella related, and quindi ottenere il rate fiscale per tale area dalla tabella related.
= [Freight] + RELATED('Region'[TaxRate])
Questa formula ottiene il rate fiscale per la regione corrente dalla tabella delle Regioni and e lo aggiunge alla value della colonna Spedizione. In DAX formule not è davvero necessario conoscere or la relazione esatta che connette le tabelle.
Contesto di più righe
DAX include funzioni che consentono di eseguire l'iterazione dei calcoli in una tabella. Queste funzioni possono presentare più righe correnti, ognuna con un proprio contesto di riga. In sostanza, queste funzioni consentono di creare formule che eseguono operazioni in modo ricorsivo su un ciclo interno and esterno.
Si supponga, ad esempio, che il modello contains una tabella Productsand una tabella Sales. Gli utenti potrebbero voler esaminare l'intera tabella delle vendite, che è piena di transazioni che coinvolgono più prodotti, andfind la quantità più grande ordinata per ogni product in una transazione.
Con DAX è possibile compilare una singola formula che restituisce il valuecorretto, and i risultati vengono aggiornati automaticamente qualsiasi time un utente aggiunge dati alle tabelle.
= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])
Per un esempio dettagliato di questa formula, vedere EARLIER.
Per summarize, la funzione EARLIER archivia il contesto di riga dall'operazione che ha preceduto l'operazione corrente. In all volte, la funzione archivia in memoria due set di contesto: un set di contesto rappresenta la riga corrente per il ciclo interno della formula, and un altro set di contesto rappresenta la riga corrente per il ciclo esterno della formula. DAX invia automaticamente values tra i due cicli in modo da poter creare aggregazioni complesse.
Contesto di query
Ilcontesto di query fa riferimento al subset di dati recuperato in modo implicito per una formula. Ad esempio, quando un utente inserisce un campo measureor in un report, il motore esamina le intestazioni delle colonne di riga and, i filtri (slicer) del report andfilters per determinare il contesto. Le necessarie query vengono quindi eseguite sui dati del modello per ottenere il sottoinsieme di dati corretto, eseguire i calcoli definiti dalla formula, and e quindi popolare values all'interno del report.
Dal momento che il contesto cambia a seconda della posizione della formula, anche i risultati della formula possono cambiare. Ad esempio, supponiamo di creare una formula che calcola la somma di values nella colonna Profitti della tabella Vendite: = SUM('Sales'[Profit])
.
If si usa questa formula in una colonna calcolata all'interno della tabella Sales, i risultati della formula saranno gli stessi per l'intera tabella, perché il contesto di query per la formula è sempre l'intero set di dati della tabella Sales. I risultati porteranno profitto per le regioni all, i prodotti all, gli anni all e così via and.
Tuttavia, gli utenti in genere non vogliono visualizzare lo stesso risultato centinaia di volte, ma vogliono invece ottenere il profitto per un determinato year, un determinato paese, un particolare product, or alcune combinazioni di questi, and quindi ottenere un totale complessivo.
In un report il contesto viene modificato filtrando, aggiungendo or rimuovendo i campi, and usando i filtri dei dati. Per ogni modifica, viene valutato il contesto di query in cui si trova il measure. Pertanto, la stessa formula, usata in un measure, viene valutata in un contesto di query diverso per ogni cella.
contesto di Filter
Filter contesto è il set di values consentito in ogni colonna, or nella values recuperata da una tabella related. Filters può essere applicato alla colonna nel progettista, or nel livello presentazione (report e and tabelle pivot). Filters può essere definito esplicitamente mediante espressioni filter all'interno della formula.
Il contesto Filter viene aggiunto quando si specificano i vincoli filter per il set di values consentiti in una colonna della tabella or, utilizzando gli argomenti di una formula. Filter contesto si applica su altri contesti, ad esempio contesto di riga or contesto di query.
Nei modelli tabulari, esistono molti modi differenti per creare il contesto filter. All'interno del contesto dei client che possono utilizzare il modello, ad esempio i report BI di Power, gli utenti possono creare filters in tempo reale aggiungendo slicer al report or nelle intestazioni di riga e colonna filtersand. È anche possibile specificare espressioni filter direttamente nella formula, per specificare relatedvalues, per specificare tabelle filter utilizzate come input, or per ottenere dinamicamente il contesto per il values utilizzato nei calcoli. È possibile cancellare completamente or o cancellare selettivamente il filters in colonne specifiche. Ciò è molto utile quando si creano formule che calculate totali complessivi.
Per altre informazioni su come creare filters all'interno delle formule, vedere la funzione FILTER (DAX).
Per un esempio di come è possibile cancellare filters per creare totali complessivi, vedere la funzione ALL (DAX).
Per esempi di come cancellare in modo selettivo and applicare filters all'interno delle formule, vedere ALLEXCEPT.
Determinazione del contesto nelle formule
Quando si crea una formula DAX, la formula viene first testata per verificarne la sintassi valida, and quindi verificata per controllare che i nomi delle colonne delle and tabelle incluse nella formula siano presenti nel contesto attuale. If se non è possibile trovare alcuna colonna or nella tabella specificata dalla formula, verrà restituito un error.
Il contesto durante la convalida (and operazioni di ricalcolo) viene determinato come descritto nelle sezioni precedenti, usando le tabelle disponibili nel modello, tutte le relazioni tra le tabelle, and qualsiasi filters applicato.
Ad esempio, if sono stati appena importati alcuni dati in una nuova tabella and viene notrelated in qualsiasi altra tabella (and è not stato applicato qualsiasi filters), l'contesto corrente è l'intero set di colonne della tabella. If la tabella è collegata da relazioni ad altre tabelle, il contesto corrente include le tabelle related. If si aggiunge una colonna dalla tabella a un report che include segmenti and forse qualche rapporto filters, il contesto della formula è il sottinsieme 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 semplici e relazioni and 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
Il linguaggio DAX usa quattro diversi tipi di operatori di calcolo nelle formule:
- Gli operatori di confronto per confrontare valuesand restituiscono un valuevalue
TRUE
logico 'FALSE' . - Operatori aritmetici per eseguire calcoli aritmetici che restituiscono numerici values.
- Gli operatori di concatenazione del testo per unire due or più stringhe di testo.
- Operatori logici che combinano due or più espressioni per restituire un singolo risultato.
Per informazioni dettagliate sugli operatori usati nelle formule di DAX, vedere operatori DAX.
Utilizzo delle tabelle and colonne
Le tabelle nei modelli di dati tabulari sono simili a tabelle di Excel, ma sono diverse nel modo in cui funzionano con i dati and con le formule:
- Le formule funzionano solo con tabelle, colonne and, celle singole not, riferimenti range, matrici or.
- Le formule possono usare relazioni per ottenere values dalle tabelle related. I values recuperati sono sempre related alla riga corrente value.
- Non è possibile avere or dati irregolari come è possibile in un foglio di lavoro di Excel. Ogni riga di una tabella deve contenere lo stesso numero di colonne. Tuttavia, è possibile avere celle values vuote in alcune colonne. Le tabelle dati di Excel and le tabelle del modello tabulare not sono intercambiabili.
- Poiché per ogni colonna è impostato un tipo di dati, ogni value in tale colonna deve essere dello stesso tipo.
Riferimento alle colonne and delle tabelle nelle formule
È possibile fare riferimento a qualsiasi tabella and colonna usando il relativo nome. Ad esempio, nella formula seguente viene illustrato come fare riferimento alle colonne da due tabelle utilizzando il nome completo :
= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])
Quando viene valutata una formula, il progettista del modello first verifica la sintassi generale, and quindi controlla i nomi delle colonne and delle tabelle che fornite in base alle possibili colonne and delle tabelle nel contesto corrente. If il nome è ambiguo orif non è possibile trovare la colonna nella tabella or, si verificherà un error nella tua formula (una stringa #ERROR anziché un dato value nelle celle in cui si verifica il problema error). Per altre informazioni sui requisiti di denominazione per tabelle, colonne and altri oggetti, vedere Requisiti di denominazione nella sintassi DAX.
Relazioni tra tabelle
Creando relazioni tra tabelle, si ottiene la possibilità di usare relatedvalues in altre tabelle per effettuare calcoli. Ad esempio, è possibile usare una colonna calcolata per determinare all i record di spedizione related al rivenditore corrente, and quindi sum i costi di spedizione per ognuno. In molti casi, tuttavia, una relazione potrebbe not necessario. È possibile utilizzare la funzione LOOKUPVALUE in una formula per restituire il value in result_columnName per la riga che soddisfa i criteri specificati negli argomenti search_columnandsearch_value.
Molte funzioni DAX richiedono che esista una relazione tra le tabelle, or tra più tabelle, per individuare le colonne a cui si è fatto riferimento and restituire risultati che hanno senso. 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 or risultati non corretti, solo una relazione in un time viene designata come relazione attiva, ma è possibile modificare la relazione attiva in base alle esigenze per navigare attraverso diverse connessioni nei dati nei calcoli. USERELATIONSHIP funzione può essere usata per specificare un or più relazioni da usare in un calcolo specifico.
Quando si usano le relazioni è importante rispettare le seguenti regole di progettazione delle formule:
Quando le tabelle sono connesse da una relazione, è necessario assicurarsi che le due colonne usate come chiavi abbiano values che corrispondono. L'integrità referenziale viene not applicata, pertanto è possibile creare una relazione anche se ci sono elementi values non corrispondenti in una colonna chiave and. If quando ciò avviene, bisogna considerare che blankvaluesorvalues non corrispondenti potrebbero influire sui risultati delle formule.
Quando si collegano tabelle nel modello usando relazioni, si aumenta l'ambito, orcontesto, in cui vengono valutate le formule. Le modifiche nel contesto derivanti dall'aggiunta di nuove tabelle, nuove relazioni or dalle modifiche nella relazione attiva possono causare la modifica dei risultati in modi che è possibile not prevedere. Per altre informazioni, vedere la sezione Contesto in questo articolo.
Riaggiornamento del processo and
processoandricalcolo sono due operazioni separate ma related. È necessario comprendere attentamente questi concetti durante la progettazione di un modello che contains formule complesse, grandi quantità di dati, or 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.
Il ricalcolo è il processo di aggiornamento dei risultati delle formule, in modo da riflettere le modifiche apportate sia alle formule stesse, and sia ai dati sottostanti. Il ricalcolo può avere effetto sulle prestazioni nei modi seguenti:
Le values in una colonna calcolata vengono calcolate e archiviate and nel modello. Per aggiornare il values nella colonna calcolata, è necessario elaborare il modello usando uno dei tre comandi di elaborazione: Elabora completa, Elabora dati, Elabora ricalcolo or. È necessario sempre ricalcolare il risultato della formula per la colonna intera, ogni volta che la formula viene modificata.
La values calcolata dalle misure viene valutata dinamicamente ogni volta che un utente aggiunge il measure a una tabella pivot or aprire un report; quando l'utente modifica il contesto, values restituito dalla modifica del measure. I risultati del measure riflettono sempre le informazioni più aggiornate nella cache di dati in memoria.
Il ricalcolo di and non influenza effect nelle formule di sicurezza a livello di riga, a meno che il risultato di un ricalcolo restituisca un valuediverso, rendendo quindi la riga interrogabile ornot dai membri del ruolo.
Aggiornamenti
DAX viene costantemente migliorato. Nuove funzioni aggiornate and vengono rilasciate con l'aggiornamento disponibile next, in genere mensile. I servizi vengono aggiornati first, seguiti da applicazioni installate come Power BI Desktop, Excel, SQL Server Management Studio (SSMS), e and l'estensione del progetto Analysis Services per Visual Studio (SSDT). SQL Server Analysis Services viene aggiornato con l'aggiornamento cumulativo next. Le nuove funzioni vengono first annunciate and descritte nel riferimento alla funzione DAX che coincide con gli aggiornamenti di Power BI Desktop.
Le funzioni Notall sono supportate nelle versioni earlier di SQL Server Analysis Services and Excel.
Risoluzione dei problemi
Gli errori sintattici sono i più facili da risolvere. In genere implicano una parentesi mancante or virgola.
L'altro tipo di error si verifica quando la sintassi è corretta, ma il valueor una colonna a cui si fa riferimento not ha senso nel contesto della formula. Tali errori di calcolo semantico and possono essere causati da uno dei problemi seguenti:
- La formula fa riferimento a una colonna, una tabella, una funzione or non esistente.
- La formula sembra corretta, ma quando il motore dati recupera i dati, rileva una mancata corrispondenza del tipo and genera un error.
- La formula passa un numero non corretto di argomenti di tipo or a una funzione.
- La formula fa riferimento a una colonna diversa che ha un error, and, pertanto i suoi values non sono validi.
- La formula fa riferimento a una colonna che ha not stato elaborato, ovvero contiene metadati, ma non dati effettivi da usare per i calcoli.
Nel first quattro casi, DAX contrassegna l'intera colonna che contains la formula non valida. Nel caso last, DAX fa diventare grigia la colonna per indicare che è in uno stato non elaborato.
Strumenti per app and
Power BI Desktop
BI Desktop
Power BI Desktop è un'applicazione gratuita per la modellazione dei dati e la reportistica and. Il progettista del modello include un editor di DAX per creare formule di calcolo DAX.
Power Tabella Pivot in Excel
L'ambiente di progettazione dei modelli 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. La progettazione dei modelli tabulari, installata 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. SSMS include un editor di query DAX per l'esecuzione di query sia su modelli tabulari che multidimensionali and.
DAX Studio
icona di
DAX Studio è uno strumento client open source per la creazione di and che eseguono query DAX su Analysis Services, Power BI Desktop, andPower Pivot nei modelli di Excel.
Tabular Editor
Tabular Editor è uno strumento open source che offre una visualizzazione gerarchica intuitiva di ogni oggetto nei metadati del modello tabulare. L'editor tabulare include un editor DAX con evidenziazione della sintassi, che consente di modificare facilmente misure, colonne calcolate and espressioni di tabella calcolate.
Risorse di formazione
Quando si apprende DAX, è consigliabile usare l'applicazione che verrà usata per creare i modelli di dati. Analysis Services, Power BI Desktop, andPower Pivot in Excel all includono articoli and esercitazioni che includono lezioni sulla creazione di misure, colonne calcolate, andfilters riga usando DAX. Altre risorse:
Usare DAX in Power BI Desktop learning path.
La guida definitiva a DAX di Alberto Ferrari and Marco Russo (Microsoft Press). Now nell'edizione second, questa guida completa fornisce nozioni di base sulle tecniche innovative ad alte prestazioni per iniziare i modelli di dati and professionisti di BUSINESS Intelligence.
Community
DAX ha una vivace community sempre disposta a condividere le proprie competenze. Microsoft Power BI Community ha un forum di discussione speciale solo per DAX, comandi DAXand suggerimenti.