sintassi DAX
Questo articolo descrive i requisiti di sintassi and per il linguaggio delle espressioni di formula DAX.
Requisiti della sintassi
Una formula DAX inizia sempre con un sign uguale (=
). Dopo che è uguale a sign, è possibile fornire qualsiasi espressione che restituisca un valore scalare, or un'espressione che può essere convertita in scalare. Di seguito sono elencate le quattro opzioni disponibili.
Una costante scalare, or, è un'espressione che utilizza un operatore scalare (
+,-,*,/,>=,...,&&, ...
)Riferimenti alle colonne delle tabelle or. Il linguaggio di DAX usa sempre tabelle and colonne come input per le funzioni, mai una matrice or set arbitrario di values.
Operatori, costanti andvalues forniti come parte di un'espressione.
Il risultato di una funzione and con i suoi argomenti obbligatori. Alcune funzioni DAX restituiscono una tabella anziché uno scalare, and devono essere racchiuse in una funzione che valuta la tabella and restituisce un valore scalare; a meno che la tabella non sia a singola colonna e composta da una sola riga, nel qual caso viene considerata come uno scalare value.
La maggior parte delle funzioni DAX richiede un or più argomenti, che possono includere tabelle, colonne, espressioni, andvalues. Tuttavia, alcune funzioni, ad esempio PI, not richiedono argomenti, ma richiedono sempre parentesi per indicare l'argomento Null. Ad esempio, è necessario digitare sempre PI(), notPI. È inoltre possibile annidare le funzioni all'interno di altre funzioni.
Espressioni. Un'espressione può contenere qualsiasi orall degli operatori, delle costanti e dei riferimenti or alle colonne.
Ad esempio, di seguito sono riportate all formule valide.
Formula | Result |
---|---|
= 3 |
3 |
= "Sales" |
Sales |
= 'Sales'[Amount] |
If si usa questa formula all'interno della tabella Sales, si otterrà il value della colonna Amount nella tabella Sales per la riga corrente. |
= (0.03 *[Amount]) =0.03 * [Amount] |
Tre% del value nella colonna Amount della tabella corrente. Sebbene questa formula possa essere usata per calculate una percentuale, il risultato viene not visualizzato come percentuale a meno che non si applichi la formattazione nella tabella. |
= PI() |
Il value della costante pi. |
Le formule possono comportarsi in modo diverso a seconda della modalità di utilizzo. È sempre necessario essere consapevoli del contesto and di come i dati che usate nella formula siano collegati related ad altri dati che potrebbero essere usati nel calcolo.
Requisiti per la denominazione
Un modello di dati spesso contains più tabelle. Insieme le tabelle and, insieme alle loro colonne, formano un database archiviato nel motore di analisi in memoria (VertiPaq). All'interno di tale database, all tabelle devono avere nomi univoci. Inoltre, le colonne devono avere nomi univoci all'interno di ogni tabella. All i nomi degli oggetti sono senza distinzione tra maiuscole e minuscole; Ad esempio, i nomi SALESandSales rappresentano la stessa tabella.
Ogni colonna andmeasure aggiunta a un modello di dati esistente deve appartenere a una tabella specifica. È possibile specificare la tabella che contains la colonna in modo implicito, quando si crea una colonna calcolata all'interno di una tabella, or in modo esplicito, quando si crea un measureand specificare il nome della tabella in cui deve essere archiviata la definizione measure.
Quando si usa una tabella or colonna come input per una funzione, è in genere necessario qualificare nome della colonna. Il nome completo di una colonna è costituito dal nome della tabella, seguito da quello della colonna tra parentesi quadre: ad esempio, 'U.S. Sales'[Products]. L'uso di un nome completo è sempre obbligatorio quando si fa riferimento a una colonna nei contesti seguenti:
Come argomento della funzione,
VALUES
Come argomento per le funzioni,
ALL
orALLEXCEPT
In un parametro filter per le funzioni
CALCULATE
orCALCULATETABLE
Come argomento della funzione,
RELATEDTABLE
Come argomento per qualsiasi funzione di intelligence time
Il nome non completo corrisponde solo al nome della colonna, racchiuso tra parentesi quadre, ad esempio [Sales Amount]. Ad esempio, quando si fa riferimento a un value scalare dalla stessa riga della tabella corrente, è possibile usare un nome di colonna non qualificato.
If il nome di una tabella contains spazi, parole chiave riservate, or caratteri non consentiti, è necessario racchiudere il nome della tabella tra virgolette singole. È inoltre necessario racchiudere i nomi di tabella tra virgolette if il nome contains qualsiasi carattere al di fuori del carattere alfanumerico ANSI range, indipendentemente dal fatto che le impostazioni locali supportino il set di caratteri ornot. Ad esempio, if si apre una cartella di lavoro che contains nomi di tabella scritti in caratteri cirilici, ad esempio "Таблица", il nome della tabella deve essere racchiuso tra virgolette, even anche se not contiene spazi.
Nota
Per immettere più facilmente i nomi completi di colonne, usare la funzionalità di completamento automatico nell'editor delle formule.
Tabelle
I nomi delle tabelle sono necessari ogni volta che la colonna proviene da una tabella diversa da quella corrente e devono essere univoci all'interno del database.
I nomi delle tabelle devono essere racchiusi tra virgolette singole if contengono spazi, altri caratteri speciali or qualsiasi carattere alfanumerico non inglese.
Misure
Measure i nomi devono essere sempre racchiusi tra parentesi.
Measure nomi possono contenere spazi.
Ogni nome measure deve essere univoco all'interno di un modello. Pertanto, il nome della tabella è facoltativo davanti a un nome di measure quando si fa riferimento a un measureesistente. Tuttavia, quando si crea un measure è necessario specificare sempre una tabella in cui verrà archiviata la definizione measure.
Colonne
I nomi delle colonne devono essere univoci nel contesto di una tabella. Possono tuttavia essere presenti più tabelle che contengono colonne con gli stessi nomi. In tal caso, l'ambiguità viene risolta specificando il nome della tabella.
In generale, è possibile fare riferimento alle colonne senza fare riferimento alla tabella di base a cui appartengono, except in caso di conflitto di nomi per risolvere or con determinate funzioni che richiedono che i nomi delle colonne siano completi.
Parole chiave riservate
If Se il nome che usi per una tabella è lo stesso di una parola chiave riservata di Analysis Services, verrà generato un error. and È necessario rinominare la tabella. Tuttavia, è possibile usare parole chiave nei nomi degli oggetti if il nome dell'oggetto è racchiuso tra parentesi quadre (per le colonne) or virgolette (per le tabelle).
Nota
Le virgolette possono essere rappresentate da caratteri diversi, a seconda dell'applicazione. If si incollano formule da un documento esterno or pagina Web, assicurarsi di controllare il codice ASCII del carattere utilizzato per aprire and virgolette di chiusura, per assicurarsi che siano uguali. In caso contrario, DAX potrebbe non essere in grado di riconoscere i simboli tra virgolette, rendendo il riferimento non valido.
Caratteri speciali
I seguenti tipi di caratteri and sono not validi nei nomi di tabelle, colonne, or misure:
Spazi iniziali or finali; a meno che gli spazi non siano racchiusi da delimitatori di nome, parentesi, or apostrofi singoli.
Caratteri di controllo
I caratteri seguenti not validi nei nomi degli oggetti:
.,;':/\\*|?&%$!+=()[]{}<>
Esempi di nomi di oggetto
Nella tabella seguente sono riportati alcuni esempi di nomi di oggetto:
Tipi di oggetto | Esempi | Commento |
---|---|---|
Nome tabella | Sales | If il nome della tabella not contiene spazi or altri caratteri speciali, il nome not deve essere racchiuso tra virgolette. |
Nome tabella | 'Canada Sales' | If il nome contains spazi, tabulazioni or altri caratteri speciali, racchiudi il nome tra virgolette singole. |
Nome di colonna completo | Sales[Amount] | Il nome della tabella precede il nome della colonna, and il nome della colonna è racchiuso tra parentesi quadre. |
Nome pienamente qualificato measure | Sales[Profit] | Il nome della tabella precede il nome measure, and il nome del measure è racchiuso tra parentesi quadre. In determinati contesti, un nome completo è sempre obbligatorio. |
Nome di colonna non completo | [Amount] | Il nome non completo corrisponde al semplice nome della colonna, tra parentesi quadre. I contesti in cui è possibile usare il nome non qualificato includono formule in una colonna calcolata all'interno della stessa tabella, or in una funzione di aggregazione che esegue l'analisi sulla stessa tabella. |
Nome di colonna completo in tabella con spazi | 'Canada Sales'[Qty] | Il nome della tabella contains contiene spazi, pertanto deve essere racchiuso tra virgolette singole. |
Altre limitazioni
La sintassi necessaria per ogni funzione, and il tipo di operazione che può eseguire, varia notevolmente a seconda della funzione. In generale, tuttavia, le regole seguenti si applicano alle formule alland espressioni:
DAX formule and espressioni non possono modificare or inserire singole values nelle tabelle.
Non è possibile creare righe calcolate utilizzando DAX. È possibile creare solo colonne calcolate e misure and.
Quando si definiscono le colonne calcolate, è possibile annidare le funzioni a qualsiasi livello.
DAX include diverse funzioni che restituiscono una tabella. In genere, si usa il values restituito da queste funzioni come input per altre funzioni, che richiedono una tabella come input.
Operatori DAXand costanti
Nella tabella seguente sono elencati gli operatori supportati da DAX. Per altre informazioni sulla sintassi dei singoli operatori, vedere operatori DAX.
Tipo di operatore | Uso del simbolo and |
---|---|
Operatore di parentesi |
() ordine di precedenza and raggruppamento di argomenti |
Operatori aritmetici |
+ (addizione)- (sottrazione)* (moltiplicazione)/ (divisione)^ (esponenziazione) |
Operatori di confronto |
= (uguale a)> (maggiore di)< (minore di)>= (maggiore o uguale a or)<= (minore o uguale a or)<> (not uguale a) |
Operatore di concatenazione del testo |
& (concatenazione) |
Operatori logici |
&& (and)|| (or) |
Tipi di dati
È not necessario eseguire il cast, convert, or in caso contrario specificare il tipo di dati di una colonna orvalue utilizzata in una formula DAX. Quando si usano dati in una formula di DAX, DAX identifica automaticamente i tipi di dati nelle colonne a cui si fa riferimento and del values digitato, and esegue conversioni implicite, se necessario per completare l'operazione specificata.
Ad esempio, if si tenta di aggiungere un numero a un datevalue, il motore interpreterà l'operazione nel contesto della funzione, andconvert i numeri a un tipo di dati comune, and quindi presentare il risultato nel formatprevisto , un date.
Esistono tuttavia alcune limitazioni sul values che possono essere convertite correttamente. If un valueor una colonna ha un tipo di dati non compatibile con l'operazione corrente, DAX restituisce un error. Inoltre, DAXnot fornisce funzioni che consentono di modificare in modo esplicito, convert, or eseguire il cast del tipo di dati esistenti importati in un modello di dati.
Importante
DAX supporta not l'uso del tipo di dati variant. Pertanto, quando si carica or importare dati in un modello di dati, è previsto che i dati in ogni colonna in genere corrispondano a un tipo di dati coerente.
Alcune funzioni restituiscono scalari values, incluse le stringhe, mentre altre funzioni operano sia con numeri interi and che con numeri reali, or date and orari. Il tipo di dati necessario per ogni funzione è descritto nella sezione DAX funzioni.
È possibile usare tabelle contenenti più colonne and più righe di dati come argomento di una funzione. Alcune funzioni restituiscono anche tabelle archiviate in memoria and possono essere usate come argomenti per altre funzioni.
Date and time
DAX archivia dateandtimevalues usando il tipo di dati datetime usato da Microsoft SQL Server. Datetime format usa un numero a virgola mobile in cui Datevalues corrispondono alla parte integer che rappresenta il numero di giorni dal 30 dicembre 1899. Time values corrispondono alla parte decimale di un datevalue in cui ore, minuti and secondi sono rappresentati da frazioni decimali di un day. DAX date and time converte implicitamente convert argomenti al tipo di dati datetime.
Nota
Il exactvalue dateTime massimo supportato da DAX è 31 dicembre 9999 00:00:00.
Date and time letterale
A partire dalla versione di agosto 2021 di Power BI Desktop, DAXdateandDAXdateandvalues datetime può essere specificato come valore letterale nella formatdt"YYYY-MM-DD"
, dt"YYYY-MM-DDThh:mm:ss"
, ordt"YYYY-MM-DD hh:mm:ss"
. Quando specificato come valore letterale, l'uso delle funzioni DATE, TIME, DATEVALUE, TIMEVALUE nell'espressione è not necessario.
Ad esempio, l'espressione seguente usa funzioni DATEandTIME per filter in OrderDate:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)
La stessa espressione filter può essere specificata come valore letterale:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)
Nota
Il format letterale tipizzato datetime DAXdateand è not supportato nelle versioni all di Power BI Desktop, Analysis Services andPower Pivot in Excel. Le nuove funzionalità di DAX aggiornate and vengono first in genere introdotte in Power BI Desktop and poi incluse in Analysis Services andPower Pivot in Excel.