Condividi tramite


Panoramica di DAX

Data Analysis Expressions (DAX) è un linguaggio di espressione formula usato in Analysis Services, Power BI e Power Pivot in Excel. DAX le formule includono funzioni, operatori e valori per eseguire calcoli avanzati e query sui dati nelle tabelle e nelle colonne correlate nei modelli di dati tabulari.

Questo articolo fornisce solo un'introduzione di base ai concetti più importanti in DAX. DAX Descrive come si applica a tutti i prodotti che lo usano. Alcune funzionalità potrebbero tuttavia non essere valide per determinati prodotti o casi d'uso. Fare riferimento alla documentazione del prodotto che descrive la sua particolare implementazione di DAX.

Calcoli

DAX le formule 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 utilizzando la barra della formula DAX nella finestra di progettazione modelli.

Una formula in una misura può usare funzioni di aggregazione standard create automaticamente usando la funzionalità Somma automatica, ad esempio COUNT o SUM, oppure è possibile definire una formula personalizzata usando la barra della DAX formula. Le misure denominate 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, ma altrimenti i risultati non vengono immediatamente visualizzati da nessuna parte. 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. Questo client potrebbe 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 slicer e filtri in un report di Power BI genera un sottoinsieme di dati diverso in base al quale viene calcolata la misurazione. 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.

Per altre informazioni, vedere: Misure in Misure di Power BI Desktopin Misure di Analysis Services inPower Pivot

Colonne calcolate

Una colonna calcolata è una colonna aggiunta a una tabella esistente (in Progettazione modelli) e quindi crea una DAX formula che definisce i valori della colonna. Quando una colonna calcolata contiene una formula valida DAX , i valori vengono calcolati per ogni riga non appena viene immessa 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.

Per altre informazioni, vedere: Colonne calcolate in Colonne calcolate di Power BI Desktop in Colonne calcolate di Analysis Servicesin Power Pivot.

Tabelle calcolate

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. Anziché eseguire query e caricare valori nelle colonne della nuova tabella da un'origine dati, una DAX formula definisce i valori della tabella.

Le tabelle calcolate possono essere utili in una dimensione legata al gioco di ruolo. 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 calcolate e visualizzarle o nasconderle come un'altra tabella qualsiasi. Le tabelle calcolate vengono ricalcolate se una delle tabelle da cui vengono estratti i dati viene aggiornata.

Per ulteriori informazioni, vedere: Tabelle calcolate in Power BI DesktopTabelle calcolate in Analysis Services.

Sicurezza a livello di riga

Con la sicurezza a livello di riga, una DAX formula deve restituire 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 e le aggregazioni, ad esempio SUM vengono 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 utilizzando la 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.

Per altre informazioni, vedere: Sicurezza a livello di riga con ruoli di Power BIin Analysis Services

Query

DAX È possibile creare ed eseguire query in SQL Server Management Studio (SSMS) e in 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 Le query sono spesso più facili da scrivere e più efficienti rispetto alle query MDX (Multidimensional Data Expressions).

Una query DAX è un'istruzione simile a un'istruzione SELECT in T-SQL. Il tipo di DAX query 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 le query DAX.

Formule

DAX le formule sono essenziali per la creazione di calcoli in colonne e misure calcolate e la protezione dei dati usando la sicurezza a livello di riga. Per creare formule per colonne e misure calcolate, utilizzare la barra della formula nella parte superiore della finestra di Progettazione modelli o nell'Editor DAX . Per creare formule per la sicurezza a livello di riga, usare la finestra di dialogo Gestione ruoli o 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 le formule 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:

  1. Ogni formula deve iniziare con un segno di uguale (=).

  2. È possibile digitare o selezionare il nome di una funzione oppure digitare un'espressione.

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

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

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

  6. 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 del tempo trascorso 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 DATESBETWEEN funzione 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 STARTOFQUARTER funzione restituisce la data di inizio del trimestre.
LASTDATE La LASTDATE funzione 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, le funzioni SUMX, AVERAGEXe MINX tutte richiedono 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 è possibile usare per eseguire calcoli usando date e ore, creare valori condizionali, usare stringhe, eseguire ricerche in base alle relazioni e la possibilità di scorrere una tabella per eseguire calcoli ricorsivi. Se si ha familiarità con le formule di Excel, molte di queste funzioni appariranno molto simili; Tuttavia, DAX le formule sono diverse nei modi importanti seguenti:

  • Una DAX funzione fa sempre riferimento a una colonna completa o a una tabella. Se si desidera utilizzare solo particolari valori di una tabella o colonna, è possibile aggiungere filtri alla formula.

  • Se è necessario personalizzare i calcoli in base a riga per riga, DAX fornisce funzioni che consentono di usare il valore di riga corrente o un valore correlato 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 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.

  • DAX le funzioni includono un'ampia gamma di 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), ad esempio count, sum, average, minimum o maximum 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 simili alle funzioni di data e ora 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 Funzioni di data e ora.

Funzioni di filtro

Le funzioni di filtro in DAX restituiscono tipi di dati specifici, cercano i valori nei racconti correlati e filtrano in base ai valori correlati. Le funzioni di ricerca funzionano usando tabelle e relazioni, ad esempio 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 utilizzate nelle formule che eseguono calcoli finanziari, ad esempio il valore attuale netto e 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. Ad esempio, la funzione ISERROR 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. Ad esempio, la funzione TRUE consente di sapere se un'espressione che si sta valutando restituisce 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 alcune differenze minime nei tipi di dati numerici usati dalle funzioni di 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 relazione specifica 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 relative controparti in Excel. È possibile restituire parte di una stringa, cercare testo all'interno di una stringa o concatenare valori stringa. DAX fornisce inoltre funzioni per controllare i formati per date, ore e numeri. Per altre informazioni, vedere Funzioni di testo.

Funzioni di intelligenza temporale

Le funzioni di intelligenza temporale fornite in DAX consentono di creare calcoli che usano conoscenze predefinite su calendari e date. Usando intervalli di data e ora in combinazione con aggregazioni o calcoli, è possibile creare confronti significativi tra periodi di tempo confrontabili per vendite, inventario e così via. Per ulteriori informazioni, vedere Funzioni di analisi temporale (DAX).

Funzioni di manipolazione delle tabelle

Queste funzioni restituiscono una tabella o modificano le tabelle esistenti. Ad esempio, usando ADDCOLUMNS è possibile aggiungere colonne calcolate a una tabella specificata oppure restituire una tabella di riepilogo su un set di gruppi con la SUMMARIZECOLUMNS funzione . 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, è una parola chiave per archiviare il risultato di un'espressione come variabile denominata. La variabile 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 DAX tipo di dati per la durata e l'output del calcolo. Quando si crea una DAX formula, i termini usati nella formula determineranno automaticamente il tipo di dati del valore restituito.

DAX supporta i tipi di dati seguenti:

Tipo di dati nel modello Tipo di dati in DAX Descrizione
Whole Number 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).
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 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 Booleano Un valore vero o falso.
Text Stringa Stringa di dati di tipo carattere Unicode. Può trattarsi di stringhe, numeri o date rappresentati in un formato di testo.
Date 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.
Currency 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.
Variant Variante Usato per le espressioni, ad esempio DAX le misure, che possono restituire tipi di dati diversi. Ad esempio, una DAX misura che restituisce un numero intero o una stringa sarà di tipo variant.
N/A Vuoto Un valore vuoto è un tipo di dati in DAX che rappresenta e sostituisce i valori Null SQL. È possibile creare un valore vuoto usando la BLANK funzione e testare gli spazi vuoti usando la funzione logica , ISBLANK.

I modelli di dati tabulari includono anche il tipo di dati Table come input o output in molte DAX funzioni. Ad esempio, la FILTER funzione accetta una tabella come input e restituisce un'altra tabella che contiene 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 comprendere i tipi di dati e come si applicano, in particolare, alle DAX formule. 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.

Nota

I calcoli sui tipi di dati stringa possono essere vincolati a 64 kb.

Contesto

contesto è un concetto importante da comprendere quando si creano formule DAX. Il contesto è ciò che consente di eseguire analisi dinamiche, poiché i risultati di una formula vengono cambiati per riflettere la riga o la selezione della cella corrente e anche i 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 anche tutte le relazioni definite tra tabelle, incluse le relazioni definite all'interno di una colonna calcolata tramite DAX formule, per determinare quali righe nelle tabelle correlate sono associate alla riga corrente.

Ad esempio, la formula seguente usa la RELATED funzione per recuperare un valore fiscale da una tabella correlata, in base all'area in cui è stato spedito 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 DAX formule non è necessario conoscere o specificare la relazione specifica 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 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 singola formula che restituisce il valore corretto e i risultati vengono aggiornati automaticamente ogni volta che un utente aggiunge dati alle tabelle.

= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])

Per un esempio dettagliato di questa formula, vedere EARLIER.

Per riepilogare, la EARLIER funzione archivia 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 inserisce automaticamente i valori 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 una misura o un campo in un report, il motore esamina le intestazioni di riga e di colonna, i suddivisori 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 slicer. 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 in Desktop 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. Il contesto del filtro si applica sopra altri contesti, come 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, come i report di Power BI, gli utenti possono creare filtri rapidamente al volo aggiungendo slicer 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 all'interno delle formule, vedere LaFILTER funzione (DAX). Per un esempio di come è possibile cancellare i filtri per creare totali complessivi, vedere la ALL funzione (DAX).

Per esempi di come cancellare e applicare in modo selettivo i filtri all'interno delle formule, vedere ALLEXCEPT.

Determinazione del contesto nelle formule

Quando si crea una DAX formula, la formula viene testata per la prima volta per la sintassi valida e quindi testata per assicurarsi che i nomi delle colonne e delle tabelle incluse nella formula siano disponibili 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

Il linguaggio DAX usa quattro diversi tipi di operatori di calcolo nelle formule:

  • Operatori di confronto per confrontare i valori e restituire un TRUEvalore logico 'FALSE'.
  • Operatori aritmetici per eseguire calcoli aritmetici che restituiscono valori numerici.
  • Operatori di concatenazione di testo per unire 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 di 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 di due tabelle utilizzando il nome qualificato per intero:


= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])

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 se non è possibile trovare la colonna o la tabella, verrà visualizzato un errore nella formula (una stringa #ERROR anziché un valore di dati nelle celle in cui si verifica l'errore). Per altre informazioni sui requisiti di denominazione per tabelle, colonne e altri oggetti, vedere Requisiti di denominazione nella DAX sintassi.

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 utilizzare la LOOKUPVALUE funzione 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 DAX funzioni richiedono che esista una relazione tra le tabelle o tra più tabelle per individuare le colonne a cui si è fatto riferimento e restituire i 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 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. USERELATIONSHIP la funzione può essere utilizzata per specificare una o più relazioni da utilizzare in un calcolo specifico.

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 nella relazione attiva possono modificare i risultati in modi che potresti non 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

DAX viene costantemente migliorato. 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 annunciate per la prima volta e descritte nel riferimento alla DAX funzione che coincide 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, DAX contrassegna l'intera colonna che contiene la formula non valida. Nell'ultimo caso, la colonna DAX viene ingrigita per indicare che la colonna si trova in uno stato non elaborato.

App e strumenti

Power BI Desktop per analisi dati

Power BI Desktop

Power BI Desktop è un'applicazione gratuita per la creazione di report e la modellazione dei dati. Il progettista del modello include un editor di DAX per creare formule di calcolo DAX.

Power Pivot in Excel

Power Pivot in Excel

La finestra di progettazione modelli di Power Pivot in Excel include un DAX editor per la creazione di DAX formule di calcolo.

Visual Studio

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

SQL Server Management Studio (SSMS) è uno strumento essenziale per l'utilizzo di Analysis Services. SSMS include un DAX editor di query per l'esecuzione di query su modelli tabulari e multidimensionali.

DAX Studio

icona di DAX Studio

DAX Studio è uno strumento client open source per la creazione e l'esecuzione DAX di query su Analysis Services, Power BI Desktop e Power Pivot nei modelli di Excel.

Editor tabellare

Icona di 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 DAX editor con evidenziazione della sintassi, che consente di modificare facilmente misure, colonne calcolate ed 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 e Power Pivot in Excel includono articoli ed esercitazioni che includono lezioni sulla creazione di misure, colonne calcolate e filtri di riga tramite DAX. Altre risorse:

Videos

Usare DAX nel percorso di apprendimento di Power BI Desktop .

La Guida Definitiva 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.

La Guida definitiva per DAX'immagine di un libro

Comunità

DAX ha una vivace community sempre disposta a condividere le proprie competenze. La community di Microsoft Power BI ha un forum di discussione speciale solo per DAX, DAX comandi e suggerimenti.