Condividi tramite


Informazioni su DAX nei modelli tabulari (SSAS Tabular)

Data Analysis Expressions (DAX) è il linguaggio delle formule usato per creare calcoli personalizzati nelle cartelle di lavoro di PowerPivot per cartelle di lavoro di Microsoft Excel e nei progetti di modelli tabulari di Analysis Services. Le formule DAX includono funzioni, operatori e valori per eseguire calcoli avanzati sui dati in tabelle e colonne.

Anche se DAX si applica sia alle cartelle di lavoro di PowerPivot che ai progetti di modello tabulare, questo argomento si applica maggiormente ai progetti modello tabulare creati in SQL Server Data Tools (SSDT). Prima di leggere questo argomento, è necessario avere una buona conoscenza dei modelli tabulari e dell'ambiente di creazione del progetto di modelli tabulari in SQL Server Data Tools (SSDT).

Sezioni di questo argomento:

DAX nei modelli tabulari

In entrambi i modelli PowerPivot e tabulari, dal punto di vista funzionale, non esiste alcuna differenza nel modo in cui le formule DAX calcolano i valori dai rispettivi set di dati. Tuttavia, i luoghi in cui vengono create le formule DAX nella cartella di lavoro e negli strumenti di creazione dei modelli sono diversi, così come i luoghi in cui viene valutato il contesto in determinate misure.

In PowerPivot le formule di calcolo vengono in genere create dall'utente della cartella di lavoro per l'analisi self-service di Business Intelligence. Le colonne calcolate vengono create per una tabella nella finestra PowerPivot e le misure vengono create in tabelle pivot o nell'area di calcolo. A differenza dei progetti di modelli tabulari, le cartelle di lavoro di PowerPivot non forniscono sicurezza basata sui ruoli, che può usare formule DAX per proteggere i dati.

Nei progetti di modello tabulare, le formule di calcolo vengono create nella finestra di progettazione modelli in SQL Server Data Tools (SSDT) dagli autori di modelli. Mentre i valori per le colonne calcolate, calcolati utilizzando formule DAX, vengono visualizzati immediatamente nella tabella del progettista di modelli, le misure non vengono calcolate fino a quando un utente non specifica un filtro in un client di report. Questo avviene, ad esempio, in Power View o nelle tabelle pivot di Microsoft Excel, con l'eccezione della funzionalità di anteprima delle misure nella griglia delle misure.

Se si importa una cartella di lavoro di PowerPivot in un nuovo progetto di modello tabulare usando il modello di progetto Importa da PowerPivot, le formule DAX per le colonne calcolate verranno create automaticamente nel nuovo modello tabulare. Le formule DAX per le misure implicite ed esplicite nella cartella di lavoro verranno create automaticamente nel nuovo modello tabulare come misure esplicite. Poiché la funzionalità di filtro delle righe sicura e ruolo non esiste già nelle cartelle di lavoro di PowerPivot, sarà necessario creare almeno un ruolo nel nuovo modello tabulare per fornire l'accesso ai dati del modello ai membri del ruolo. Le formule DAX nei filtri di riga sono necessarie solo se si desidera proteggere i dati della tabella a livello di riga.

Formule DAX in colonne calcolate, misure e filtri di riga

Per i modelli tabulari creati in SQL Server Data Tools (SSDT), le formule DAX vengono usate in colonne calcolate, misure e filtri di riga.

Colonne calcolate

Una colonna calcolata è una colonna aggiunta a una tabella esistente (nella finestra di progettazione modelli) e quindi crea una formula DAX che definisce i valori di colonna. È possibile creare formule per le colonne calcolate nella finestra di progettazione modelli usando la barra della formula.

Annotazioni

Le colonne calcolate non sono supportate per i modelli che recuperano dati da un'origine dati relazionale tramite la modalità DirectQuery.

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 database. Ad esempio, in una tabella Date, quando la formula viene immessa nella barra della formula =[Calendar Year] & " Q" & [Calendar Quarter] , un valore per ogni riga della tabella viene calcolato prendendo i valori dalla colonna Calendar Year (nella stessa tabella Date), aggiungendo uno spazio e la lettera maiuscola Q e quindi aggiungendo i valori dalla colonna Calendar Quarter (nella stessa tabella Date). Il risultato di ogni riga nella colonna calcolata viene calcolato immediatamente e viene visualizzato, ad esempio, come 2010 Q1. I valori di colonna vengono ricalcolati solo se i dati vengono rielaborati.

Per altre informazioni, vedere Colonne calcolate (SSAS tabulare).

Misure

Le misure sono formule dinamiche in cui i risultati cambiano a seconda del contesto. Le misure vengono utilizzate nei formati di creazione di report che supportano la combinazione e il filtro dei dati del modello usando più attributi, ad esempio un report di Power View o una tabella pivot di Excel o un grafico pivot. Nei progetti di modello tabulare le misure vengono definite dall'autore del modello usando la griglia delle misure (e la barra della formula) nella finestra di progettazione modelli in SQL Server Data Tools (SSDT).

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 DAX. 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. Nel riquadro Proprietà vengono visualizzati anche altri dettagli della misura.

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. Tale client potrebbe essere una tabella pivot di Excel o un grafico pivot, un report di Power View o una query MDX. Indipendentemente dal client di report, viene eseguita una query separata per ogni cella nei risultati. Vale a dire, ogni combinazione di intestazioni di riga e di colonna in una tabella pivot, o ogni selezione di filtri e slicer in un report di Power View genera un subset di dati diverso su cui viene calcolata la misura. Ad esempio, in una misura con la formula , Total Sales:=SUM([Sales Amount])quando un utente inserisce la misura Total Sales nella finestra Valori in una tabella pivot e quindi inserisce la colonna Product Category da una tabella Product nella finestra Filtri, la somma di Sales Amount viene calcolata e visualizzata per ogni categoria di prodotto.

A differenza delle colonne calcolate e dei filtri di riga, la sintassi per una misura include il nome della misura che precede la formula. Nell'esempio appena specificato, 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 di report e a seconda delle prospettive e dei ruoli è disponibile per tutti gli utenti del modello.

Per altre informazioni, vedere Misure (SSAS tabulare).

Filtri di riga

I filtri di riga definiscono le righe di una tabella visibili ai membri di un determinato ruolo. È possibile creare filtri di riga per ogni tabella in un modello usando formule DAX. I filtri di riga vengono creati per un ruolo specifico usando Gestione ruoli in SQL Server Management Studio. I filtri di riga possono essere definiti anche per un modello distribuito usando le proprietà del ruolo in SQL Server Management Studio.

In un filtro di riga, una formula DAX, che deve restituire una condizione BOolean TRUE/FALSE, definisce le righe che possono essere restituite dai risultati di una query da parte di membri di quel particolare ruolo. Impossibile restituire righe non incluse nella formula DAX. Ad esempio, per i membri del ruolo Sales, la tabella Customers con la formula DAX seguente, =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, ad esempio SUM, vengono restituite solo per i clienti negli Stati Uniti.

Quando si definisce un filtro di riga usando 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 i filtri di riga del ruolo consentono l'accesso a tale set di righe specifico, l'utente può visualizzare i dati per tale riga.

I filtri di riga si applicano alle righe specificate e alle righe correlate. Quando una tabella dispone di più relazioni, tramite i filtri viene applicata la sicurezza alla relazione che è attiva. I filtri di riga verranno intersecati con altri filtri di riga definiti per le tabelle correlate.

Per altre informazioni, vedere Ruoli (SSAS tabulare).

Tipi di dati DAX

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.

I modelli tabulari e DAX supportano 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 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.
Booleano Booleano Un valore vero o falso.
Testo Stringa Stringa di dati di tipo carattere Unicode. Può trattarsi di stringhe, numeri o date rappresentati in un formato di testo.
Dati 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.
Non disponibile Vuoto Un tipo di dati blank in DAX rappresenta e sostituisce i valori Null di SQL. È possibile creare un blank utilizzando la funzione BLANK e testare la presenza di blank utilizzando la funzione logica ISBLANK.

I modelli tabulari includono anche il tipo di dati "Table" come input o output in 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.

Per informazioni dettagliate sui tipi di dati nei modelli tabulari e sulle conversioni esplicite e implicite dei tipi di dati in DAX, vedere Tipi di dati supportati (SSAS tabulare).For detailed information about data types in tabular models and explicit and implicit conversions of data types in DAX, see Data Types Supported (SSAS Tabular).

Operatori DAX

Nel linguaggio DAX vengono utilizzati quattro tipi diversi di operatori di calcolo nelle formule:

  • Operatori di confronto per confrontare i valori e restituire un valore TRUE\FALSE logico.

  • 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 DAX, vedere Informazioni di riferimento sugli operatori DAX per PowerPivot.

Formule DAX

Le formule DAX sono essenziali per la creazione di calcoli in colonne calcolate e misure e la protezione dei dati tramite filtri a livello di riga. Per creare formule per le colonne calcolate e le misure, si userà la barra della formula nella parte superiore della finestra di Progettazione modelli. Per creare formule per i filtri di riga, si userà la finestra di dialogo Gestione ruoli. Lo scopo delle informazioni fornite in questa sezione è quello di facilitare la comprensione delle nozioni fondamentali relative alle formule DAX.

Nozioni di base sulle formule

DAX consente agli autori di modelli tabulari di definire calcoli personalizzati in entrambe le tabelle del modello, come parte delle colonne calcolate e come misure associate alle tabelle, ma non visualizzate direttamente in esse. DAX consente anche agli autori di modelli di proteggere i dati creando calcoli che restituiscono un valore booleano che definisce le righe in una determinata tabella o correlata possono essere sottoposte a query dagli utenti membri del ruolo associato.

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 Descrizione
=TODAY() Inserisce la data odierna in ogni riga della colonna.
=3 Inserisce il valore 3 in ogni riga della colonna.
=[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.

Annotazioni

In una colonna calcolata, non appena si accetta la formula e la formula viene convalidata, la colonna viene popolata con valori. In una misura, premendo INVIO viene salvata la definizione della misura nella griglia delle misure con la tabella. Se una formula non è valida, verrà visualizzato un errore.

In questo esempio verrà esaminata una formula più complessa 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 La funzione COUNTROWS (DAX) 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.

Uso del completamento automatico della formula

Sia la barra della formula nella finestra Progettazione modelli che la finestra Filtri riga della formula nella finestra di dialogo Gestione ruoli forniscono una funzionalità completamento automatico. che consente di immettere una sintassi della formula valida visualizzando le opzioni per ogni elemento della formula.

  • È possibile usare il completamento automatico della formula al centro di una formula esistente con funzioni annidate. 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.

Annotazioni

Alcuni limiti vengono applicati nelle misure relative all'annidamento delle funzioni per garantire che le prestazioni non siano influenzate dai numerosi calcoli richiesti dalle dipendenze tra le colonne.

Funzioni DAX

Questa sezione offre una panoramica dei tipi di funzioni supportate in DAX. Per informazioni più dettagliate, vedere Informazioni di riferimento sulle funzioni DAX.

DAX offre un'ampia gamma di 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 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 informazioni sul funzionamento di queste funzioni, vedere Context in DAX Formulas più avanti in questo argomento.

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

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. Tuttavia, le funzioni DAX sono basate sui datetime tipi di dati usati da Microsoft SQL Server. Per altre informazioni, vedere Funzioni di data e ora (DAX).

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 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 (DAX).

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 (DAX).

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 (DAX).

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 ulteriori informazioni, vedere Funzioni matematiche e trigonometriche (DAX).

Funzioni di statistiche

DAX fornisce funzioni statistiche che eseguono aggregazioni. Oltre a creare somme e medie o trovare i valori minimo e massimo, in DAX è anche possibile filtrare una colonna prima di aggregare o creare aggregazioni in base alle tabelle correlate. Per altre informazioni, vedere Funzioni statistiche (DAX).

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. In DAX sono inoltre disponibili funzioni per il controllo dei formati per date, ore e numeri. Per altre informazioni, vedere Funzioni di testo (DAX).

Funzioni di Time Intelligence

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. 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 Table-Valued

Esistono funzioni DAX che generano tabelle, accettano tabelle come input o eseguono entrambe le operazioni. Poiché una tabella può avere una singola colonna, le funzioni con valori di tabella accettano anche singole colonne come input. Comprendere come usare queste funzioni con valori di tabella è importante per l'uso completo delle formule DAX. DAX include i tipi seguenti di funzioni con valori di tabella:

Funzioni di filtro Restituisce una colonna, una tabella o valori correlati alla riga corrente.

Funzioni di aggregazione Aggregare qualsiasi espressione sulle righe di una tabella.

Funzioni di analisi temporale Restituiscono una tabella di date o utilizzano una tabella di date per calcolare un'aggregazione.

Contesto nelle formule DAX

Il contesto è un concetto importante da comprendere quando si creano formule con 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 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 a 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.

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

Per una spiegazione approfondita di questa formula, consultare la 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 della 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 altro campo valore in una tabella pivot o in un report basato su un modello tabulare, il motore esamina le intestazioni di riga e di colonna, i Slicers e i filtri del report per determinare il contesto. Le query necessarie vengono quindi eseguite sull'origine dati per ottenere il sottoinsieme di dati corretto, eseguire i calcoli definiti dalla formula e quindi popolare ogni cella nella tabella pivot o nel report. Il set di dati recuperati è il contesto di query per ogni cella.

Avvertimento

Per un modello in modalità DirectQuery, il contesto viene valutato e quindi le operazioni set per recuperare il sottoinsieme di dati corretto e calcolare i risultati vengono convertite in istruzioni SQL. Tali istruzioni vengono quindi eseguite direttamente nell'archivio dati relazionale. Pertanto, anche se il metodo di recupero dei dati e il calcolo dei risultati è diverso, il contesto stesso non cambia.

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.

Tuttavia, gli utenti in genere non vogliono visualizzare lo stesso risultato centinaia di volte, ma vogliono invece ottenere il profitto per un determinato anno, un determinato paese/area geografica, un determinato prodotto o una combinazione di questi, e quindi ottenere un totale complessivo.

In una tabella pivot, il contesto può essere modificato aggiungendo o rimuovendo intestazioni di colonna e di riga e aggiungendo o rimuovendo filtri dei dati. Ogni volta che gli utenti aggiungono intestazioni di colonna o di riga alla tabella pivot, modificano il contesto della query in cui viene valutata la misurazione. Le operazioni di sezionamento e filtro influiscono anche sul contesto. Pertanto, la stessa formula utilizzata in una misura viene valutata in un contesto di query diverso per ogni cella.

Contesto del 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. 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 utilizzare il modello, ad esempio i report di Power View, gli utenti possono creare filtri al volo aggiungendo slicers o filtri del report sui titoli di riga e 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 funzione FILTER.

Per un esempio di come è possibile cancellare i filtri per creare totali complessivi, vedere la funzione ALL.

Per esempi di come cancellare e applicare in modo selettivo filtri all'interno delle formule, vedere la funzione 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.

Esempi di contesto nelle formule
  1. La funzione RELATED Function espande il contesto della riga corrente per includere i valori in una colonna correlata. In questo modo è possibile eseguire ricerche. Nell'esempio riportato in questo argomento viene illustrata l'interazione tra filtro e contesto di riga.

  2. La funzione FILTER Function consente di specificare le righe da includere nel contesto corrente. Gli esempi in questo argomento illustrano anche come incorporare filtri all'interno di altre funzioni che eseguono aggregazioni.

  3. La funzione ALL Function imposta il contesto all'interno di una formula. È possibile usarlo per eseguire l'override dei filtri applicati come risultato del contesto di query.

  4. La funzione FUNZIONE ALLEXCEPT consente di rimuovere tutti i filtri tranne uno specificato. Entrambi gli argomenti includono esempi che illustrano la creazione di formule e la comprensione di contesti complessi.

  5. Le funzioni EARLIER Function e EARLIEST Function consentono di scorrere le tabelle eseguendo calcoli, facendo riferimento a un valore da un ciclo interno. Se si ha familiarità con il concetto di ricorsione e con cicli interni ed esterni, si apprezzerà la potenza che le funzioni EARLIER e EARLIEST forniscono. Se non si ha più di questi concetti, è necessario seguire attentamente la procedura descritta nell'esempio per vedere come vengono usati i contesti interni ed esterni nei calcoli.

Formule e modello tabulare

Progettazione modelli, in SQL Server Data Tools (SSDT), è un'area in cui è possibile usare più tabelle di dati e connettere le tabelle in un modello tabulare. All'interno di questo modello, le tabelle vengono unite da relazioni su colonne con valori comuni (chiavi). Il modello tabulare consente di collegare valori a colonne in altre tabelle e di creare calcoli più interessanti. Proprio come in un database relazionale, è possibile connettere molti livelli di tabelle correlate e usare colonne da una delle tabelle nei risultati.

Ad esempio, è possibile collegare una tabella sales, una tabella products e una tabella delle categorie di prodotti e gli utenti possono usare varie combinazioni delle colonne nelle tabelle pivot e nei report. I campi correlati possono essere usati per filtrare le tabelle connesse o per creare calcoli su subset. Se non si ha familiarità con il database relazionale e l'uso di tabelle e join, vedere Relazioni (SSAS tabulare).)

I modelli tabulari supportano più relazioni tra le tabelle. Per evitare confusione o risultati errati, viene designata una sola relazione alla volta come relazione attiva, ma è possibile modificare la relazione attiva in base alle esigenze per attraversare connessioni diverse nei dati nei calcoli. La funzione USERELATIONSHIP (DAX) può essere utilizzata per specificare una o più relazioni da utilizzare in un calcolo specifico.

In un modello tabulare è necessario osservare queste regole di progettazione delle formule:

  • Quando le tabelle sono connesse da una relazione, è necessario assicurarsi che le due colonne usate come chiavi abbiano valori corrispondenti. L'integrità referenziale non viene tuttavia applicata; pertanto è possibile avere valori non corrispondenti in una colonna chiave e creare comunque 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 Context in DAX Formulas in precedenza in questo argomento.

Utilizzo di tabelle e colonne

Le tabelle nei modelli tabulari sono simili a tabelle di Excel, ma sono diverse nel modo in cui funzionano con i dati e con le 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 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 "Requisiti di denominazione" in Specifica della sintassi DAX per PowerPivot.

Relazioni tra tabelle

Creando relazioni tra tabelle, è possibile cercare i dati in un'altra tabella e usare i valori correlati per eseguire calcoli complessi. Ad esempio, è possibile usare una colonna calcolata per cercare 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 funzione LOOKUPVALUE in una formula per restituire il valore in result_columnName per la riga che soddisfa i criteri specificati nei parametri 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. Per altre informazioni, vedere Formule e modello tabulare in precedenza in questo argomento.

Aggiornamento dei risultati delle formule (processo)

Il processo di dati e il ricalcolo sono due operazioni separate 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 dei dati è il processo di aggiornamento dei dati in un modello con nuovi dati 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 usando uno dei tre comandi di elaborazione: Elaborazione completa, Elaborazione dati o Ricalcolo processo. È 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 alcun effetto sulle formule di filtro di riga, a meno che il risultato di un ricalcolo restituisca un valore diverso, rendendo quindi la riga interrogabile o non interrogabile dai membri del ruolo.

Per altre informazioni, vedere Elaborare i dati (SSAS Tabular).

Risoluzione degli errori nelle formule

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. Per informazioni sulla sintassi delle singole funzioni, vedere Guida di riferimento alle funzioni DAX.

L'altro tipo di errore si verifica quando la sintassi è corretta, ma il valore o la colonna a cui si fa riferimento non ha senso 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 che rileva una mancata corrispondenza del tipo e genera un errore.

  • La formula passa un numero o un tipo di parametri non corretti a una funzione.

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

Risorse aggiuntive

L'esercitazione sulla modellazione tabulare (Adventure Works Tutorial) fornisce istruzioni dettagliate su come creare un modello tabulare che include molti calcoli in colonne calcolate, misure e filtri di riga. Per la maggior parte delle formule, viene fornita una descrizione di ciò che la formula deve eseguire.

Il blog del team di Analysis Services e PowerPivot fornisce informazioni, suggerimenti, notizie e annunci su SQL Server 2014 Analysis Services (SSAS) e PowerPivot.

Il Centro risorse DAX fornisce informazioni interne ed esterne su DAX, incluse numerose soluzioni DAX inviate da professionisti leader di Business Intelligence.

Vedere anche

Riferimento a Data Analysis Expressions (DAX)
Misure (SSAS Tabulare)
Colonne calcolate (SSAS tabulare)
Ruoli (SSAS Tabulare)
Indicatori KPI (SSAS tabulare)
Origini dati supportate (SSAS tabulare)