M365Con 2027 – conferenza online gratuita · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Demistificare le DAX UDF: VAL vs. EXPR spiegati

By ·

Bentornato sul blog di accompagnamento del podcast! Nel nostro ultimo episodio ci siamo immersi a fondo nel potente mondo delle funzioni definite dall'utente (UDF) di DAX. Se hai bee…

Automatically translated with AI from the original post. Read the English original

▶ BLOGDemystifying DAX UDFs:VAL vs. EXPR ExplainedM365.FM
Titelbild: Demystifying DAX UDFs: VAL vs. EXPR Explained

Bentornato nel blog di accompagnamento al podcast! Nell'ultimo episodio ci siamo immersi a fondo nel mondo potente delle funzioni definite dall'utente (UDF) in DAX. Se hai sperimentato le UDF in Power BI o Analysis Services, saprai che sono davvero un cambiamento radicale per eliminare la duplicazione del codice e centralizzare la logica di business. Tuttavia, addentrarsi nella modellazione avanzata senza capire le sfumature delle modalità dei parametri è una ricetta per bug silenziosi, totali inattesi e fastidiosi timeout delle query. Per ascoltare l'analisi audio completa e vedere esempi reali di questi concetti in azione, non perdere l'episodio di approfondimento su DAX UDF VAL vs EXPR: Prevent Timeouts and Wrong Totals.

In questo articolo approfondiamo le differenze fondamentali tra le modalità dei parametri VAL ed EXPR. Al termine della lettura saprai esattamente quando catturare un valore statico e quando usare un'espressione dinamica e sensibile al contesto, per mantenere i tuoi modelli semantici veloci e accurati.

Panoramica delle DAX UDF

Cosa sono le DAX UDF?

Le funzioni definite dall'utente (UDF) in DAX ti permettono di creare calcoli personalizzati da riutilizzare in tutti i tuoi modelli di dati. Invece di scrivere più volte la stessa formula, la definisci una sola volta come funzione e la richiami dove ti serve. Questo approccio aiuta a mantenere il lavoro organizzato e coerente.

Pensa alle DAX UDF come a blocchi costruttivi per i tuoi report. Incapsulano la logica, così non devi ripeterti. Questo fa risparmiare tempo e riduce gli errori. Puoi anche condividere queste funzioni con il tuo team, rendendo più semplice la collaborazione.

Ecco una rapida panoramica di ciò che distingue le DAX UDF da altre funzioni definite dall'utente nell'analisi dei dati:

CaratteristicaDescrizione
Logica centralizzataLe DAX UDF consentono di definire e riutilizzare centralmente i calcoli DAX, rendendo i modelli più facili da gestire e modificare.
RiutilizzabilitàConsentono di incapsulare e riutilizzare la logica in diverse espressioni DAX e modelli semantici.
Efficienza nel tempoLe DAX UDF fanno risparmiare tempo quando riutilizzi DAX in modelli e progetti diversi.
Miglioramento delle prestazioniPossono migliorare le prestazioni in scenari con calcoli di misure a più livelli, riducendo il sovraccarico del motore di formule.
Organizzazione migliorataLe DAX UDF aiutano a organizzare i modelli e a migliorare il riutilizzo nei calcoli e nei report a valle.

Importanza delle DAX UDF

Usare le funzioni definite dall'utente in DAX migliora lo sviluppo dei report in molti modi. Innanzitutto, rendono i modelli più puliti e più facili da mantenere. Quando aggiorni una funzione, tutte le misure che la usano si aggiornano automaticamente. Questo riduce la probabilità di errori e mantiene i report coerenti.

Le DAX UDF aumentano anche la scalabilità. Aiutano i report a crescere senza diventare disordinati o lenti. Puoi costruire calcoli complessi passo dopo passo e riutilizzare questi passaggi in altre parti del modello. Questa struttura modulare rende il lavoro più efficiente.

Ecco alcuni dei vantaggi chiave che ottieni usando le DAX UDF:

  • Riducono la duplicazione della logica, il che abbassa gli errori e fa risparmiare tempo.
  • Ti permettono di aggiornare le regole di business in un unico punto, con le modifiche che si riflettono ovunque.
  • Migliorano la collaborazione mettendo a disposizione del team una libreria condivisa di funzioni.
  • Semplificano lo sviluppo dei report, riducendo il tempo necessario fino al 70-80%.

Rispetto alle formule DAX tradizionali, le DAX UDF possono anche migliorare drasticamente le prestazioni. Ad esempio, alcuni test mostrano che le UDF riducono il tempo di calcolo da oltre 6.000 millisecondi a poco più di 160 millisecondi, un miglioramento del 97%.

Padroneggiando le funzioni definite dall'utente in DAX, ottieni un controllo migliore sui tuoi modelli di dati. Crei report più veloci, più facili da mantenere e più affidabili. Questa competenza ti aiuta a fornire analisi di alta qualità che rispondono alle esigenze del business.

Smettila di usare male le DAX UDF: gli errori più comuni

Fraintendere i tipi di dati

Molti utenti hanno difficoltà con i tipi di dati quando lavorano con le DAX UDF. Spesso sottovalutano l'importanza di usare il tipo corretto per i parametri. Questo fraintendimento può portare a risultati inattesi. Ad esempio, se passi un valore di testo a una funzione che si aspetta un numero, il calcolo può fallire o restituire risultati errati.

Ecco alcuni errori comuni legati ai tipi di dati:

  • Gli utenti confondono spesso i formati numerici e quelli di testo.
  • Potrebbero non rendersi conto che DAX tratta le date come numeri, il che può complicare i calcoli.
  • Un uso scorretto dei tipi di dati può ridurre le prestazioni del modello, con report lenti.

Uso errato della sintassi

Gli errori di sintassi sono un altro problema comune quando si lavora con le UDF di DAX. Un piccolo errore nel codice può interrompere l'esecuzione dei calcoli. Quando si commette un errore di sintassi, DAX visualizza un simbolo di avviso giallo nell'editor delle espressioni. Questo simbolo indica che qualcosa non va, ma non sempre chiarisce il problema esatto.

Ecco alcuni errori di sintassi tipici da evitare:

  • Dimenticare di chiudere parentesi tonde o quadre.
  • Usare nomi di funzione errati o scriverli con errori di ortografia.
  • Non separare gli argomenti con virgole.

Questi errori possono causare frustrazione e far perdere tempo. Controlla sempre la sintassi prima di eseguire le espressioni DAX.

Ignorare la gestione degli errori

Una gestione efficace degli errori è fondamentale per garantire l'affidabilità delle tue UDF di DAX. Molti utenti trascurano questo aspetto, che può causare il fallimento dei calcoli. Ad esempio, se una funzione riceve un tipo di input imprevisto, può restituire un errore invece di un risultato utile.

Per evitare questi problemi, valuta l'adozione delle seguenti strategie:

  • Usa la funzione IFERROR() per fornire un valore alternativo. In questo modo gli errori non compromettono le visualizzazioni.
  • Usa ISBLANK() per verificare i valori realmente vuoti, distinguendoli dallo zero o dalle stringhe vuote.
  • Implementa COALESCE() per restituire il primo valore non vuoto da un elenco di espressioni.

Puoi anche definire funzioni che verificano i tipi di input. Ad esempio, usa ISSTRING() per verificare se un input è una stringa. Se non lo è, restituisci BLANK(). Questo approccio garantisce che i calcoli restino solidi e affidabili.

Evitando questi errori comuni, puoi migliorare le tue UDF di DAX e le prestazioni complessive del modello di dati. Ricorda che capire come usare VAL e EXPR in modo corretto è la chiave per sfruttare appieno il potenziale delle funzioni definite dall'utente di DAX.

Comprendere VAL in DAX

Scopo di VAL

La funzione VAL in DAX ha uno scopo specifico: converte la rappresentazione testuale di un numero in un valore numerico effettivo. Questa funzione è essenziale quando si lavora con dati che possono arrivare in formati diversi. Ad esempio, se ricevi un numero come testo da un'origine dati, puoi usare VAL per convertirlo in un formato numerico utilizzabile. Questa conversione consente di eseguire calcoli in modo accurato.

Dovresti usare VAL quando:

  • Devi assicurarti che i calcoli lavorino con valori numerici.
  • Vuoi evitare errori causati dall'uso di testo al posto di numeri.
  • Gestisci input degli utenti che potrebbero non essere sempre nel formato corretto.

Sintassi di VAL

La sintassi della funzione VAL è semplice:

VAL(<text>)
  • <text>: questo parametro rappresenta la stringa di testo da convertire in un numero. Può essere un input di testo diretto o un riferimento a una colonna contenente valori di testo.

Ecco un semplice esempio di come potresti usare la funzione VAL:

SalesAmount = VAL('Sales'[SalesText])

In questo esempio, la funzione converte il testo della colonna 'SalesText' in un valore numerico, consentendoti di eseguire calcoli su di esso.

Esempi di utilizzo di VAL

Esploriamo alcuni esempi pratici di utilizzo della funzione VAL in DAX.

  1. Conversione di base: supponi di avere una colonna denominata 'RevenueText' che contiene cifre di fatturato come testo. Puoi creare una misura per convertire questi valori in numeri:

    TotalRevenue = SUMX('Sales', VAL('Sales'[RevenueText]))

    Questa misura calcola il fatturato totale convertendo ogni voce di testo in un numero.

  2. Gestione dell'input utente: se hai uno scenario in cui gli utenti inseriscono numeri come testo, puoi usare VAL per garantire che i calcoli restino accurati. Ad esempio, se un utente inserisce un obiettivo di vendita come testo, puoi convertirlo:

    SalesTarget = VAL(UserInput[TargetText])

    Questo garantisce che i calcoli basati sull'obiettivo di vendita siano corretti.

  3. Prevenzione degli errori: usare VAL può aiutare a prevenire errori nei report. Se tenti di eseguire calcoli su valori di testo senza convertirli, potresti incontrare problemi. Usando VAL, ti proteggi da questi errori:

    AdjustedSales = IF(ISERROR(VAL('Sales'[SalesText])), 0, VAL('Sales'[SalesText]))

    In questo esempio, se la conversione fallisce, la misura restituisce 0 invece di generare un errore.

Comprendendo lo scopo e l'uso corretto della funzione VAL, puoi migliorare le tue UDF di DAX. Questa conoscenza ti permette di gestire i dati in modo più efficace e garantisce che i calcoli producano risultati accurati.

Comprendere EXPR in DAX

Scopo di EXPR

La modalità di parametro EXPR in DAX svolge un ruolo fondamentale quando vuoi che le tue funzioni definite dall'utente reagiscano in modo dinamico alle modifiche del modello dati. A differenza di VAL, che acquisisce un valore fisso al momento della chiamata della funzione, EXPR ti permette di passare un'espressione che viene valutata ogni volta che la funzione viene eseguita. Questo significa che i tuoi calcoli possono adattarsi automaticamente a contesti di filtro o contesti di riga diversi.

Usa EXPR quando la tua funzione deve rispondere a condizioni dei dati che cambiano. Ad esempio, se vuoi calcolare una misura che dipende dal filtro corrente o dalla selezione di un segmentatore, EXPR ti consente di passare questa logica come espressione. Questa flessibilità rende le tue funzioni definite dall'utente più potenti e consapevoli del contesto.

Suggerimento: usa EXPR per creare calcoli dinamici che si aggiornano in base alle interazioni degli utenti o ai filtri sui dati. Questo ti aiuta a costruire report che riflettono approfondimenti in tempo reale.

Sintassi di EXPR

La sintassi per usare EXPR nelle funzioni definite dall'utente di DAX richiede di dichiarare il parametro come espressione. Ecco la forma generale:

DEFINE FUNCTION MyFunction(EXPR paramName AS EXPRESSION)
RETURNS <return_type>
AS
BEGIN
    RETURN <calculation_using paramName>
END
  • paramName: il nome del parametro che riceverà l'espressione.
  • EXPRESSION: specifica che il parametro si aspetta un'espressione anziché un valore fisso.

Quando chiami la funzione, passi un'espressione DAX invece di un semplice valore. La funzione valuta questa espressione ogni volta che viene eseguita, tenendo conto del contesto di filtro o di riga corrente.

Esempi di utilizzo di EXPR

Vediamo alcuni esempi pratici per capire come funziona EXPR nelle funzioni definite dall'utente di DAX.

  1. Esempio di filtro dinamico

Supponiamo di voler creare una funzione che calcola le vendite totali ma che permetta di passare dinamicamente un'espressione di filtro:

DEFINE FUNCTION TotalSalesWithFilter(EXPR FilterExpression AS EXPRESSION)
RETURNS DECIMAL
AS
BEGIN
    RETURN CALCULATE(SUM(Sales[Amount]), FilterExpression)
END

Quando chiami questa funzione, puoi passare diverse espressioni di filtro:

TotalSalesWithFilter(FILTER(Sales, Sales[Region] = "West"))

Questa chiamata calcola le vendite totali solo per la regione Ovest. La funzione valuta l'espressione di filtro ogni volta, adattandosi al contesto che fornisci.

  1. Calcolo sensibile al contesto

Puoi anche usare EXPR per passare una misura o un calcolo che dipende dal contesto di riga o di filtro corrente:

DEFINE FUNCTION CalculateMargin(EXPR SalesExpr AS EXPRESSION, EXPR CostExpr AS EXPRESSION)
RETURNS DECIMAL
AS
BEGIN
    RETURN SalesExpr - CostExpr
END

Chiamare questa funzione con espressioni come SUM(Sales[Amount]) e SUM(Sales[Cost]) ti permette di calcolare dinamicamente il margine in base ai filtri correnti.

  1. Uso di EXPR con CALCULATE

Racchiudi sempre i parametri EXPR all'interno di CALCULATE quando vuoi forzare le transizioni di contesto. Questo garantisce che l'espressione venga valutata correttamente nel contesto di filtro desiderato.

Nota: usare EXPR in modo errato, passando valori statici o non racchiudendo le espressioni in CALCULATE, può produrre risultati inattesi.

Padroneggiando EXPR nelle tue funzioni definite dall'utente di DAX, acquisisci la capacità di scrivere calcoli flessibili e consapevoli del contesto. Questa competenza ti aiuta a costruire report che rispondono con precisione alle selezioni degli utenti e alle modifiche dei dati.

Best practice per le funzioni definite dall'utente di DAX

Suggerimenti per un uso efficace

Per ottimizzare le tue funzioni definite dall'utente di DAX, segui queste best practice:

  • Fai attenzione ai problemi di transizione di contesto quando usi i parametri EXPR. Le transizioni di contesto possono produrre risultati inattesi se non gestite correttamente.
  • Usa CALCULATE per gli scenari complessi. Questa funzione aiuta a gestire efficacemente i contesti di tabella, garantendo che i calcoli riflettano la logica prevista.
  • Privilegia lo sviluppo modulare. Scomponi la logica complessa in parti gestibili. Questo approccio semplifica la manutenzione e migliora le prestazioni.
  • Standardizza la logica di business tra i team. La coerenza nel modo in cui definisci e usi le funzioni migliora la collaborazione e riduce la ridondanza.
  • Ottimizza i calcoli in un unico punto. Questa pratica ti permette di migliorare prestazioni e manutenibilità aggiornando la logica senza dover cercare in più punti.

Scenari comuni e soluzioni

Capire quando usare VAL ed EXPR può migliorare significativamente le tue UDF DAX. Ecco alcuni scenari comuni:

  • Usa i parametri VAL quando il valore del parametro è statico o non dipende dal contesto di riga. Ad esempio, se ti serve una soglia fissa, VAL è la scelta giusta.
  • Scegli i parametri EXPR quando il parametro deve essere valutato in contesti di riga diversi. Questa flessibilità consente calcoli dinamici, come iterare su tabelle o filtrare in base a metriche calcolate.

Ecco alcuni esempi specifici per illustrare questi punti:

  1. Nella funzione BestCustomers, l'uso di parametri EXPR permette di valutare la metrica per ogni cliente, producendo risultati accurati.
  2. Quando si usano i parametri VAL, la funzione valuta la metrica una sola volta. Questo può portare a risultati errati o vuoti se il contesto cambia.
  3. La necessità delle transizioni di contesto è fondamentale. I parametri EXPR possono essere gestiti esplicitamente con CALCULATE per garantire una valutazione corretta.

Applicando queste best practice, puoi semplificare la manutenzione e migliorare le prestazioni delle tue funzioni definite dall'utente in DAX. Questo approccio non solo potenzia i tuoi calcoli, ma contribuisce anche all'efficienza a lungo termine dei tuoi modelli di dati.


In questo blog hai scoperto il significato di VAL ed EXPR nelle funzioni definite dall'utente in DAX. Capire questi concetti ti aiuta a evitare errori comuni e a potenziare i tuoi modelli di dati.

  • VAL acquisisce valori fissi, mentre EXPR consente calcoli dinamici.
  • Un uso corretto di queste funzioni migliora precisione e prestazioni.

Applicando queste conoscenze, puoi creare DAX UDF più efficaci. Inizia oggi stesso a mettere in pratica questi accorgimenti per portare al livello successivo le tue competenze di data analytics! 🚀 Non dimenticare di dare un'occhiata all'episodio correlato per una panoramica audio completa e una discussione su DAX UDF VAL vs EXPR: Prevent Timeouts and Wrong Totals.

Domande frequenti

Qual è la differenza tra VAL ed EXPR in DAX?

VAL acquisisce un valore fisso al momento della chiamata della funzione. EXPR valuta un'espressione in modo dinamico, adattandosi alle modifiche del contesto di filtro o di riga.

Quando devo usare VAL?

Usa VAL quando ti serve un valore numerico costante. È ideale per scenari in cui l'input non cambia in base al contesto, come le soglie.

Quando EXPR è la scelta migliore?

Scegli EXPR quando i tuoi calcoli devono rispondere a condizioni dei dati che cambiano. Consente valutazioni dinamiche basate sulle interazioni degli utenti o sui filtri.

Posso combinare VAL ed EXPR nella stessa funzione?

Sì, puoi combinare VAL ed EXPR in una funzione. Basta assicurarti di usarli in modo appropriato, a seconda che ti servano valori fissi o espressioni dinamiche.

Come posso migliorare le prestazioni delle mie DAX UDF?

Per migliorare le prestazioni, riduci al minimo i calcoli complessi all'interno delle funzioni. Usa VAL per i valori statici e racchiudi le valutazioni EXPR in CALCULATE per gestire in modo efficace le transizioni di contesto.

Quali errori comuni devo evitare con le DAX UDF?

Evita un uso errato dei tipi di dati, una sintassi scorretta e la mancata gestione degli errori. Questi errori possono portare a risultati imprecisi e compromettere le prestazioni del modello di dati.

Esiste un modo per testare le mie DAX UDF?

Sì, puoi testare le tue DAX UDF creando report di esempio oppure usando DAX Studio. Questo ti permette di valutare le prestazioni e verificare la precisione dei calcoli.

Dove posso trovare altre risorse sulle DAX UDF?

Puoi trovare risorse aggiuntive sulle DAX UDF nella documentazione ufficiale di Microsoft, nei corsi online e nei forum della community. Queste piattaforme offrono spunti preziosi ed esempi utili.

Entities in this article

Azure Functions DAX user-defined functions (UDFs) Power BI Data analyst Filter context

Related articles

RSS