Menu
CoddyTech

Cheat sheet di Power BI

Ultimo aggiornamento

Impara Power BI gratis

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 faDAX
Creare una misuraTotal Sales = SUM ( Sales[Amount] )
Creare una colonna calcolata (un valore per riga)Line Total = Sales[Quantity] * Sales[Unit Price]
Creare una tabella calcolataTop Customers = TOPN ( 10, Customer, [Total Sales] )
Fare riferimento a una colonna: nome della tabella, poi la colonna tra parentesi quadreSales[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 misuraAverage Price = DIVIDE ( [Total Sales], [Total Units] )

Funzioni di aggregazione

Ognuna riassume una colonna nel contesto di filtro corrente.

Cosa faDAX
Sommare una colonnaSUM ( Sales[Amount] )
Media di una colonnaAVERAGE ( Sales[Amount] )
Valore più piccoloMIN ( Sales[Order Date] )
Valore più grandeMAX ( Sales[Order Date] )
Contare le righe di una tabellaCOUNTROWS ( Sales )
Contare i valori non vuoti di una colonnaCOUNT ( Sales[Amount] )
Contare i valori distintiDISTINCTCOUNT ( Sales[Customer Key] )
Dividere in sicurezza: un valore vuoto invece di un errore quando il divisore è 0DIVIDE ( [Total Sales], [Total Units] )
Dividere con un valore da mostrare quando il divisore è 0DIVIDE ( [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 faDAX
Moltiplicare per riga, poi sommareSUMX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Media di un risultato per rigaAVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Risultato per riga più grandeMAXX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Media di una misura per clienteAVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] )
Usare una colonna di una tabella correlata nell'espressioneSUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) )
Contare le righe che soddisfano una condizioneCOUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) )
Classificare ogni prodotto in base a una misuraRANKX ( 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 testoCONCATENATEX ( 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 faDAX
Filtrare su un valoreCALCULATE ( [Total Sales], Product[Category] = "Bikes" )
Filtrare su un elenco di valoriCALCULATE ( [Total Sales], Product[Color] IN { "Red", "Blue" } )
Due filtri (AND)CALCULATE ( [Total Sales], Product[Color] = "Red", Store[Country] = "Spain" )
OR su due colonneCALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) )
Filtrare in base a una misuraCALCULATE ( [Total Sales], FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) )
Mantenere il filtro esistente e fare l'intersezione con il nuovoCALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] IN { "Red", "Blue" } ) )
Rimuovere i filtri su una colonnaCALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) )
Rimuovere tutti i filtri su una tabellaCALCULATE ( [Total Sales], ALL ( Product ) )
Rimuovere tutti i filtri su una tabella tranne alcune colonneCALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Country] ) )
Mantenere la selezione dei filtri dei dati, ignorare le righe dell'oggetto visivoCALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) )
Usare una relazione inattivaCALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) )
Far passare un filtro in entrambe le direzioni per una misuraCALCULATE ( COUNTROWS ( Customer ), CROSSFILTER ( Sales[Customer Key], Customer[Customer Key], BOTH ) )
Filtrare con una tabella senza relazioneCALCULATE ( [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 faDAX
Progressivo da inizio annoTOTALYTD ( [Total Sales], 'Date'[Date] )
Progressivo da inizio anno, con anno fiscale che termina il 30 giugnoTOTALYTD ( [Total Sales], 'Date'[Date], "6/30" )
Progressivo da inizio anno dentro CALCULATECALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) )
Progressivo da inizio trimestreTOTALQTD ( [Total Sales], 'Date'[Date] )
Progressivo da inizio meseTOTALMTD ( [Total Sales], 'Date'[Date] )
Stesso periodo dell'anno precedenteCALCULATE ( [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 precedenteCALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) )
L'intero periodo un anno primaCALCULATE ( [Total Sales], PARALLELPERIOD ( 'Date'[Date], -1, YEAR ) )
Gli ultimi 12 mesi fino all'ultima data visibileCALCULATE ( [Total Sales], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH ) )
Un intervallo di date fissoCALCULATE ( [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 faDAX
Percentuale su tutte le categorieCategory % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) )
Percentuale su ciò che lasciano i filtri dei datiVisible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) )
Crescita anno su annoYoY % = VAR LastYear = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LastYear, LastYear )
Totale progressivo su tutto il periodoRunning 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 5Top 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] )
Contare i clienti sopra una sogliaBig Customers = COUNTROWS ( FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) )
Fare in modo che un totale sommi le sue righeBonus Total = SUMX ( VALUES ( Product[Category] ), [Bonus] )
Mostrare un valore solo a un livello di una matriceCategory Rank = IF ( ISINSCOPE ( Product[Category] ), RANKX ( ALL ( Product[Category] ), [Total Sales] ) )
Saldo di chiusura: l'ultima data che ha un valoreClosing 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 faDAX
Una condizioneIF ( [Total Sales] > 1000, "High", "Low" )
Più valori di un'espressioneSWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" )
Fasce, controllate dall'alto verso il bassoSWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" )
AND e ORIF ( Sales[Quantity] > 2 && Sales[Amount] > 50, "Big", "Small" )
Il valore è vuoto?ISBLANK ( [Total Sales] )
Primo valore non vuotoCOALESCE ( [Total Sales], 0 )
Il filtro lascia esattamente un valore?HASONEVALUE ( Product[Category] )
Quel valore, oppure un valore predefinitoSELECTEDVALUE ( Product[Category], "All categories" )
Questa riga dell'oggetto visivo è raggruppata per la colonna?ISINSCOPE ( Product[Category] )
Restituire un valore vuotoBLANK ()

Funzioni di testo

L'operatore & unisce il testo; FORMAT trasforma un numero o una data in testo.

Cosa faDAX
Unire testoCustomer[First Name] & " " & Customer[Last Name]
Formattare un numeroFORMAT ( [Total Sales], "#,0.00" )
Formattare una dataFORMAT ( 'Date'[Date], "mmm yyyy" )
Primi caratteriLEFT ( Product[Code], 3 )
Caratteri da una posizioneMID ( Product[Code], 4, 2 )
LunghezzaLEN ( Product[Name] )
MaiuscoloUPPER ( Store[City] )
Rimuovere gli spazi in eccessoTRIM ( Customer[Name] )
Sostituire testoSUBSTITUTE ( 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 faDAX
La data di oggiTODAY ()
Costruire una dataDATE ( 2025, 12, 31 )
Anno di una dataYEAR ( 'Date'[Date] )
Numero del meseMONTH ( 'Date'[Date] )
Giorno della settimana, con lunedì uguale a 1WEEKDAY ( 'Date'[Date], 2 )
Numero della settimana, con settimane che iniziano il lunedìWEEKNUM ( 'Date'[Date], 2 )
Ultimo giorno del meseEOMONTH ( 'Date'[Date], 0 )
Lo stesso giorno un mese primaEDATE ( 'Date'[Date], -1 )
Giorni tra due dateDATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY )
Una tabella date da date fisseCALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) )
Una tabella date dalle date del modelloCALENDARAUTO ()

Relazioni e ricerche

RELATED segue una relazione dal lato molti al lato uno.

Cosa faDAX
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 relazioneLOOKUPVALUE ( 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 rigaUSERPRINCIPALNAME ()

Funzioni di tabella

Restituiscono tabelle: usale in una tabella calcolata, dentro CALCULATE o in un iteratore.

Cosa faDAX
Valori distinti nel filtro correnteVALUES ( Product[Category] )
Righe che soddisfano una condizioneFILTER ( Product, Product[Price] > 100 )
Le prime N righe in base a una misuraTOPN ( 5, ALL ( Product[Product] ), [Total Sales] )
Raggruppare per colonne e aggiungere misureSUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] )
Aggiungere una colonna a una tabellaADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] )
Scegliere e rinominare colonneSELECTCOLUMNS ( Customer, "Name", Customer[Name], "City", Customer[City] )
Un elenco di numeriGENERATESERIES ( 1, 10, 1 )
Tutte le combinazioni di due tabelleCROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) )
Impilare due tabelle con le stesse colonneUNION ( 'Sales 2024', 'Sales 2025' )

Variabili

VAR dà un nome a un passaggio e lo calcola una volta sola; RETURN restituisce il risultato.

Cosa faDAX
Una variabileMargin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue )
Più variabiliSales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY
Una tabella in una variabileTop 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 faM
Mantenere le righe che corrispondonoTable.SelectRows(Source, each [Status] = "Paid")
Rimuovere colonneTable.RemoveColumns(Source, {"Notes", "Temp"})
Impostare i tipi di colonnaTable.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}})
Rinominare una colonnaTable.RenameColumns(Source, {{"amt", "Amount"}})
Aggiungere una colonnaTable.AddColumn(Source, "Total", each [Quantity] * [Price], type number)
Unire (join) due queryTable.NestedJoin(Sales, {"ProductID"}, Products, {"ProductID"}, "Product", JoinKind.LeftOuter)
Accodare (impilare) queryTable.Combine({Sales2024, Sales2025})
Trasformare colonne in righe (unpivot)Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount")
Raggruppare e aggregareTable.Group(Source, {"Category"}, {{"Sales", each List.Sum([Amount]), type number}})
Sostituire gli errori con un valoreTable.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?
Sì. Funzioni come 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.

Illustrazione dei linguaggi di programmazione di Coddy

Impara Power BI con Coddy

Inizia