Cheat sheet di Power BI
Ultimo aggiornamento
Misure, colonne e tabelle
Una misura viene calcolata per ogni cella di un oggetto visivo; una colonna calcolata viene calcolata una volta per riga e salvata.
| Cosa fa | DAX |
|---|---|
| Creare una misura | Total Sales = SUM ( Sales[Amount] ) |
| Creare una colonna calcolata (un valore per riga) | Line Total = Sales[Quantity] * Sales[Unit Price] |
| Creare una tabella calcolata | Top Customers = TOPN ( 10, Customer, [Total Sales] ) |
| Fare riferimento a una colonna: nome della tabella, poi la colonna tra parentesi quadre | Sales[Amount] |
| Mettere tra apici un nome di tabella che contiene uno spazio o è una parola riservata | 'Date'[Date] |
| Fare riferimento a una misura: solo parentesi quadre | [Total Sales] |
| Usare una misura dentro un'altra misura | Average Price = DIVIDE ( [Total Sales], [Total Units] ) |
Funzioni di aggregazione
Ognuna riassume una colonna nel contesto di filtro corrente.
| Cosa fa | DAX |
|---|---|
| Sommare una colonna | SUM ( Sales[Amount] ) |
| Media di una colonna | AVERAGE ( Sales[Amount] ) |
| Valore più piccolo | MIN ( Sales[Order Date] ) |
| Valore più grande | MAX ( Sales[Order Date] ) |
| Contare le righe di una tabella | COUNTROWS ( Sales ) |
| Contare i valori non vuoti di una colonna | COUNT ( Sales[Amount] ) |
| Contare i valori distinti | DISTINCTCOUNT ( Sales[Customer Key] ) |
| Dividere in sicurezza: un valore vuoto invece di un errore quando il divisore è 0 | DIVIDE ( [Total Sales], [Total Units] ) |
| Dividere con un valore da mostrare quando il divisore è 0 | DIVIDE ( [Profit], [Total Sales], 0 ) |
Iteratori (le funzioni X)
Scorrono una tabella riga per riga, valutano un'espressione per ogni riga e poi aggregano i risultati.
| Cosa fa | DAX |
|---|---|
| Moltiplicare per riga, poi sommare | SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Media di un risultato per riga | AVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Risultato per riga più grande | MAXX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Media di una misura per cliente | AVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] ) |
| Usare una colonna di una tabella correlata nell'espressione | SUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) ) |
| Contare le righe che soddisfano una condizione | COUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) ) |
| Classificare ogni prodotto in base a una misura | RANKX ( ALL ( Product[Product] ), [Total Sales] ) |
| Classificare senza salti dopo i pari merito (1, 1, 2) | RANKX ( ALL ( Product[Product] ), [Total Sales], , DESC, DENSE ) |
| Unire valori in un unico testo | CONCATENATEX ( VALUES ( Product[Category] ), Product[Category], ", " ) |
CALCULATE e funzioni di filtro
CALCULATE valuta un'espressione con filtri modificati. Un filtro sulla stessa colonna sostituisce quello precedente; filtri su colonne diverse si combinano con AND.
| Cosa fa | DAX |
|---|---|
| Filtrare su un valore | CALCULATE ( [Total Sales], Product[Category] = "Bikes" ) |
| Filtrare su un elenco di valori | CALCULATE ( [Total Sales], Product[Color] IN { "Red", "Blue" } ) |
| Due filtri (AND) | CALCULATE ( [Total Sales], Product[Color] = "Red", Store[Country] = "Spain" ) |
| OR su due colonne | CALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) ) |
| Filtrare in base a una misura | CALCULATE ( [Total Sales], FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Mantenere il filtro esistente e fare l'intersezione con il nuovo | CALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] IN { "Red", "Blue" } ) ) |
| Rimuovere i filtri su una colonna | CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) |
| Rimuovere tutti i filtri su una tabella | CALCULATE ( [Total Sales], ALL ( Product ) ) |
| Rimuovere tutti i filtri su una tabella tranne alcune colonne | CALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Country] ) ) |
| Mantenere la selezione dei filtri dei dati, ignorare le righe dell'oggetto visivo | CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) |
| Usare una relazione inattiva | CALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) ) |
| Far passare un filtro in entrambe le direzioni per una misura | CALCULATE ( COUNTROWS ( Customer ), CROSSFILTER ( Sales[Customer Key], Customer[Customer Key], BOTH ) ) |
| Filtrare con una tabella senza relazione | CALCULATE ( [Total Sales], TREATAS ( VALUES ( Budget[Category] ), Product[Category] ) ) |
Time intelligence
Queste funzioni richiedono una tabella date: una riga per giorno, senza buchi, contrassegnata come tabella date.
| Cosa fa | DAX |
|---|---|
| Progressivo da inizio anno | TOTALYTD ( [Total Sales], 'Date'[Date] ) |
| Progressivo da inizio anno, con anno fiscale che termina il 30 giugno | TOTALYTD ( [Total Sales], 'Date'[Date], "6/30" ) |
| Progressivo da inizio anno dentro CALCULATE | CALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) ) |
| Progressivo da inizio trimestre | TOTALQTD ( [Total Sales], 'Date'[Date] ) |
| Progressivo da inizio mese | TOTALMTD ( [Total Sales], 'Date'[Date] ) |
| Stesso periodo dell'anno precedente | CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) |
| Spostare le date di un intervallo (qui un mese indietro) | CALCULATE ( [Total Sales], DATEADD ( 'Date'[Date], -1, MONTH ) ) |
| L'intero mese precedente | CALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) ) |
| L'intero periodo un anno prima | CALCULATE ( [Total Sales], PARALLELPERIOD ( 'Date'[Date], -1, YEAR ) ) |
| Gli ultimi 12 mesi fino all'ultima data visibile | CALCULATE ( [Total Sales], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH ) ) |
| Un intervallo di date fisso | CALCULATE ( [Total Sales], DATESBETWEEN ( 'Date'[Date], DATE ( 2025, 1, 1 ), DATE ( 2025, 3, 31 ) ) ) |
Schemi di misure comuni
Copiali, poi rinomina tabelle e colonne come nel tuo modello.
| Cosa fa | DAX |
|---|---|
| Percentuale su tutte le categorie | Category % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) ) |
| Percentuale su ciò che lasciano i filtri dei dati | Visible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) ) |
| Crescita anno su anno | YoY % = VAR LastYear = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LastYear, LastYear ) |
| Totale progressivo su tutto il periodo | Running Total = CALCULATE ( [Total Sales], FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) ) |
| Media mobile a 7 giorni (per giorno con vendite) | Sales 7 Day Avg = AVERAGEX ( DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -7, DAY ), [Total Sales] ) |
| Mostrare un valore solo per i primi 5 | Top 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] ) |
| Contare i clienti sopra una soglia | Big Customers = COUNTROWS ( FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Fare in modo che un totale sommi le sue righe | Bonus Total = SUMX ( VALUES ( Product[Category] ), [Bonus] ) |
| Mostrare un valore solo a un livello di una matrice | Category Rank = IF ( ISINSCOPE ( Product[Category] ), RANKX ( ALL ( Product[Category] ), [Total Sales] ) ) |
| Saldo di chiusura: l'ultima data che ha un valore | Closing Units = CALCULATE ( SUM ( Inventory[Units] ), LASTNONBLANK ( 'Date'[Date], CALCULATE ( SUM ( Inventory[Units] ) ) ) ) |
Funzioni logiche e informative
Per le condizioni, e per sapere cosa contiene il contesto di filtro.
| Cosa fa | DAX |
|---|---|
| Una condizione | IF ( [Total Sales] > 1000, "High", "Low" ) |
| Più valori di un'espressione | SWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" ) |
| Fasce, controllate dall'alto verso il basso | SWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" ) |
| AND e OR | IF ( Sales[Quantity] > 2 && Sales[Amount] > 50, "Big", "Small" ) |
| Il valore è vuoto? | ISBLANK ( [Total Sales] ) |
| Primo valore non vuoto | COALESCE ( [Total Sales], 0 ) |
| Il filtro lascia esattamente un valore? | HASONEVALUE ( Product[Category] ) |
| Quel valore, oppure un valore predefinito | SELECTEDVALUE ( Product[Category], "All categories" ) |
| Questa riga dell'oggetto visivo è raggruppata per la colonna? | ISINSCOPE ( Product[Category] ) |
| Restituire un valore vuoto | BLANK () |
Funzioni di testo
L'operatore & unisce il testo; FORMAT trasforma un numero o una data in testo.
| Cosa fa | DAX |
|---|---|
| Unire testo | Customer[First Name] & " " & Customer[Last Name] |
| Formattare un numero | FORMAT ( [Total Sales], "#,0.00" ) |
| Formattare una data | FORMAT ( 'Date'[Date], "mmm yyyy" ) |
| Primi caratteri | LEFT ( Product[Code], 3 ) |
| Caratteri da una posizione | MID ( Product[Code], 4, 2 ) |
| Lunghezza | LEN ( Product[Name] ) |
| Maiuscolo | UPPER ( Store[City] ) |
| Rimuovere gli spazi in eccesso | TRIM ( Customer[Name] ) |
| Sostituire testo | SUBSTITUTE ( Customer[Phone], " ", "" ) |
| Posizione di un testo, senza distinguere maiuscole e minuscole (0 se manca) | SEARCH ( "pro", Product[Name], 1, 0 ) |
Funzioni di data
In fondo le date sono numeri, quindi puoi sottrarle per ottenere i giorni.
| Cosa fa | DAX |
|---|---|
| La data di oggi | TODAY () |
| Costruire una data | DATE ( 2025, 12, 31 ) |
| Anno di una data | YEAR ( 'Date'[Date] ) |
| Numero del mese | MONTH ( 'Date'[Date] ) |
| Giorno della settimana, con lunedì uguale a 1 | WEEKDAY ( 'Date'[Date], 2 ) |
| Numero della settimana, con settimane che iniziano il lunedì | WEEKNUM ( 'Date'[Date], 2 ) |
| Ultimo giorno del mese | EOMONTH ( 'Date'[Date], 0 ) |
| Lo stesso giorno un mese prima | EDATE ( 'Date'[Date], -1 ) |
| Giorni tra due date | DATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY ) |
| Una tabella date da date fisse | CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) ) |
| Una tabella date dalle date del modello | CALENDARAUTO () |
Relazioni e ricerche
RELATED segue una relazione dal lato molti al lato uno.
| Cosa fa | DAX |
|---|---|
| Valore dal lato uno (in una colonna di Sales) | RELATED ( Product[Category] ) |
| Le righe del lato molti della riga corrente (in una colonna di Customer) | COUNTROWS ( RELATEDTABLE ( Sales ) ) |
| Cercare un valore senza relazione | LOOKUPVALUE ( Product[Price], Product[SKU], Sales[SKU] ) |
| Percorso padre figlio (per gerarchie e sicurezza a livello di riga) | PATH ( Employee[Employee ID], Employee[Manager ID] ) |
| L'utente che ha eseguito l'accesso, per la sicurezza dinamica a livello di riga | USERPRINCIPALNAME () |
Funzioni di tabella
Restituiscono tabelle: usale in una tabella calcolata, dentro CALCULATE o in un iteratore.
| Cosa fa | DAX |
|---|---|
| Valori distinti nel filtro corrente | VALUES ( Product[Category] ) |
| Righe che soddisfano una condizione | FILTER ( Product, Product[Price] > 100 ) |
| Le prime N righe in base a una misura | TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) |
| Raggruppare per colonne e aggiungere misure | SUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] ) |
| Aggiungere una colonna a una tabella | ADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] ) |
| Scegliere e rinominare colonne | SELECTCOLUMNS ( Customer, "Name", Customer[Name], "City", Customer[City] ) |
| Un elenco di numeri | GENERATESERIES ( 1, 10, 1 ) |
| Tutte le combinazioni di due tabelle | CROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) ) |
| Impilare due tabelle con le stesse colonne | UNION ( 'Sales 2024', 'Sales 2025' ) |
Variabili
VAR dà un nome a un passaggio e lo calcola una volta sola; RETURN restituisce il risultato.
| Cosa fa | DAX |
|---|---|
| Una variabile | Margin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue ) |
| Più variabili | Sales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY |
| Una tabella in una variabile | Top 5 Total = VAR Top5 = TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) RETURN CALCULATE ( [Total Sales], Top5 ) |
Passaggi di Power Query (M)
Power Query prepara i dati prima del caricamento. Queste sono le formule M dietro i pulsanti più comuni.
| Cosa fa | M |
|---|---|
| Mantenere le righe che corrispondono | Table.SelectRows(Source, each [Status] = "Paid") |
| Rimuovere colonne | Table.RemoveColumns(Source, {"Notes", "Temp"}) |
| Impostare i tipi di colonna | Table.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}}) |
| Rinominare una colonna | Table.RenameColumns(Source, {{"amt", "Amount"}}) |
| Aggiungere una colonna | Table.AddColumn(Source, "Total", each [Quantity] * [Price], type number) |
| Unire (join) due query | Table.NestedJoin(Sales, {"ProductID"}, Products, {"ProductID"}, "Product", JoinKind.LeftOuter) |
| Accodare (impilare) query | Table.Combine({Sales2024, Sales2025}) |
| Trasformare colonne in righe (unpivot) | Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount") |
| Raggruppare e aggregare | Table.Group(Source, {"Category"}, {{"Sales", each List.Sum([Amount]), type number}}) |
| Sostituire gli errori con un valore | Table.ReplaceErrorValues(Source, {{"Amount", 0}}) |
Questa cheat sheet di Power BI raccoglie in una sola pagina il DAX che scrivi più spesso: aggregazioni, gli iteratori X, CALCULATE e le funzioni che cambiano i filtri, time intelligence, funzioni di testo e di data, e schemi di misure da copiare, come la percentuale sul totale, la crescita anno su anno e i totali progressivi.
Gli esempi usano un modello di vendite con le tabelle Sales, Product, Customer e 'Date'; rinominale come nel tuo modello. Il DAX è stato analizzato dal motore del corso di Power BI di Coddy, dove puoi scriverlo in un'area di lavoro di Power BI nel browser e farlo controllare.
Domande frequenti sulla cheat sheet di Power BI
Questa cheat sheet di Power BI è gratuita?
Sì. Leggila qui o salvala nei preferiti; non serve registrarsi.
Che differenza c'è tra una misura e una colonna calcolata?
Una colonna calcolata viene calcolata una volta per riga all'aggiornamento e salvata, quindi puoi usarla per filtrare e raggruppare. Una misura viene calcolata per ogni cella di un oggetto visivo, con i filtri di quella cella, e non salva nulla. Totali e rapporti vanno nelle misure.
Cosa fa CALCULATE?
Valuta un'espressione con filtri modificati: aggiunge, sostituisce o rimuove filtri, poi calcola il risultato. Quasi tutto il DAX che va oltre i totali semplici è CALCULATE con gli argomenti di filtro giusti.
Perché usare DIVIDE invece dell'operatore /?
DIVIDE restituisce un valore vuoto (o un valore a tua scelta) quando il divisore è zero o vuoto. L'operatore / restituisce infinito o un valore di errore, che compare negli oggetti visivi.Serve una tabella date per la time intelligence?
TOTALYTD e SAMEPERIODLASTYEAR richiedono una tabella con una riga per giorno, senza buchi e con anni interi, collegata alle tabelle dei fatti e contrassegnata come tabella date.Questo DAX funziona in Power Pivot di Excel e in Analysis Services?
Il linguaggio DAX è lo stesso, quindi quasi tutto funziona anche lì. Alcune funzioni più recenti arrivano prima in Power BI.
Dove posso esercitarmi con DAX?
Nel corso di Power BI di Coddy: ogni lezione ti dà un'area di lavoro di Power BI nel browser e controlla la tua misura sui dati della lezione e su copie nascoste di quei dati.