Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le funzioni definite dall'utente (UDF) di Data Analysis Expressions (DAX) permettono di integrare nei tuoi modelli logica DAX riutilizzabile e parametrizzata, semplificando la scrittura, la gestione e la condivisione del codice DAX. Invece di ripetere formule nelle misure, nelle colonne calcolate e negli oggetti visivi, le UDF (Funzioni Definite dall'Utente) offrono flessibilità in stile programmazione ai tuoi modelli semantici, consentendo di definire le funzioni una sola volta e usarle ovunque DAX sia supportato.
Le funzioni definite dall'utente DAX sono disponibili a livello generale in Power BI Desktop e nel servizio Power BI a partire dalla versione di giugno 2026. Per altre informazioni, vedere Funzioni definite dall'utente DAX.
Perché usare le funzioni definite dall'utente?
- Riutilizzabilità e coerenza: definire un calcolo una volta e riutilizzarlo ovunque.
- Gestibilità: aggiornare la logica in un'unica posizione per correggere o evolvere le regole.
- Creazione più sicura: gli hint di tipo facoltativi e gli aiuti per il controllo del tipo supportano un codice prevedibile e resistente agli errori.
- Oggetti modello di prima classe: le UDF (funzioni definite dall'utente) si trovano nel modello e possono essere visualizzate in Esplora modelli.
Definire una funzione
È possibile definire una funzione definita dall'utente in Power BI Desktop usando la vista query DAX (DQV) o la vista TMDL.
Sintassi generale
La sintassi generale per una UDF è:
/// Optional description above the function
/// @param {ParameterType} ParameterName - ParameterDescription
/// ...
/// @returns Return description
FUNCTION <FunctionName> = ( [<ParameterName> [: [<ParameterType>] [<ParameterSubtype>] [<ParameterPassingMode>]] [= <DefaultExpression>], ...] ) => <FunctionBody>
Esempio: Funzione fiscale semplice
Ecco un semplice esempio in DQV che aggiunge l'imposta all'importo specificato. È anche possibile valutare le funzioni definite dall'utente in DQV.
DEFINE
/// AddTax takes in amount and returns amount including tax
FUNCTION AddTax = (
amount : NUMERIC
) =>
amount * 1.1
EVALUATE
{ AddTax ( 10 ) }
// Returns 11
Dopo aver definito una funzione definita dall'utente, è possibile aggiornare il modello o utilizzare il "code lens" per aggiungere la funzione al modello.
Lo stesso esempio può essere creato nella visualizzazione TMDL.
createOrReplace
/// AddTax takes in amount and returns amount including tax
function AddTax = (amount : NUMERIC) => amount * 1.1
Dopo aver definito una UDF, puoi applicare le modifiche per aggiungere la funzione al tuo modello.
Gestire le funzioni definite dall'utente
Dopo aver definito e aggiunto al modello, è possibile visualizzare e gestire tutte le funzioni definite dall'utente da Esplora modelli nel nodo Funzioni .
Nella vista query DAX (DQV) è possibile usare query rapide tramite Esplora modelli per definire e valutare facilmente le funzioni.
Nella visualizzazione TMDL, è possibile trascinare funzioni nell'area di disegno oppure usare Script TMDL per farlo in Esplora modelli.
Se si usa un Power BI Project, le funzioni vengono archiviate anche nella cartella functions.tmdl all'interno della cartella definition.
Usare funzioni definite dall'utente
Dopo aver aggiunto una UDF al modello, è possibile usarla ovunque DAX sia supportato. Qui viene usato AddTax come esempio.
Usare funzioni definite dall'utente con contesto di filtro completo con misure.
Total Sales with Tax = AddTax ( [Total Sales] )
Applicare le UDF su ogni riga di una tabella con colonne calcolate.
Sales Amount with Tax = CONVERT ( AddTax ( 'Sales'[Sales Amount] ), CURRENCY )
Usa gli UDF direttamente negli oggetti visivi con calcoli visivi.
Sales Amount with Tax = AddTax ( [Sales Amount] )
Nidificare le funzioni definite dall'utente per scenari avanzati.
DEFINE
/// AddTax takes in amount and returns amount including tax
FUNCTION AddTax = (
amount : NUMERIC
) =>
amount * 1.1
FUNCTION AddTaxAndDiscount = (
amount : NUMERIC,
discount : NUMERIC
) =>
AddTax ( amount - discount )
EVALUATE
{ AddTaxAndDiscount ( 10, 2 ) }
// Returns 8.8
Parameters
Le funzioni definite dall'utente DAX supportano zero o più parametri. Per rendere le funzioni più sicure e prevedibili, è possibile specificare facoltativamente hint per il tipo di parametro:
-
Tipo: tipo di valore accettato dal parametro (
AnyVal,Scalar,Table,AnyRefCalendarRef,ColumnRefMeasureRef, , oTableRef). -
Sottotipo (solo per il tipo scalare): tipo di dati scalare specifico (
Variant,Int64,DecimalDouble,String,DateTime,Boolean, oNumeric). -
ParameterMode: quando l'argomento viene valutato (
valper valutazione immediata oexprper valutazione ritardata).
Le annotazioni di tipo seguono la forma: [type] [subtype] [parameterMode]
Esempio: Cast dei tipi
DEFINE
/// returns x cast to an Int64
FUNCTION CastToInt = (
x : SCALAR INT64 VAL
) =>
x
EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5
Questo esempio usa un Scalar tipo, un Int64 sottotipo e val parameterMode. È anche possibile ottenere lo stesso effetto includendo solo il Int64 sottotipo come illustrato nell'esempio seguente. Le stringhe non numeriche generano un errore.
DEFINE
/// returns x as an Int64
FUNCTION CastToInt = (
x : INT64
) =>
x
EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5
Controllo dei tipi
Convalidare i tipi di parametro all'interno della funzione usando funzioni di controllo dei tipi DAX predefinite, ad esempio:
Per un elenco completo delle funzioni di controllo dei tipi disponibili, vedere Funzioni definite dall'utente DAX.
Contenuti correlati
Per altre informazioni sull'uso di funzioni definite dall'utente, vedere le risorse seguenti: