TOPN in DAX per classifiche dinamiche in Power BI

Emilio Santoro 7 agosto 2026
Visualizza i primi 100 ordini di vendita ordinati per chiave e linea, mostrando i dettagli dei rivenditori.

Indice

Quando un report deve evidenziare i prodotti più venduti, i clienti più redditizi o le categorie che generano maggiore margine, mostrare l’intero dataset spesso nasconde ciò che conta davvero. In DAX, la funzione TOPN permette di selezionare dinamicamente i primi N elementi, rispettando filtri, slicer e contesto del report Power BI. Vediamo come funziona, come trasformare il risultato in una misura utile e quali errori evitare.

Una selezione dinamica per concentrarsi sui dati più rilevanti

  • TOPN restituisce una tabella con le prime N righe ordinate secondo un’espressione.
  • In caso di parità al limite, il risultato può contenere più righe di quelle richieste.
  • Per ottenere una misura numerica servono funzioni come SUMX o CALCULATE.
  • ALLSELECTED mantiene le selezioni dell’utente, mentre ALL le rimuove.
  • Un secondo criterio di ordinamento aiuta a ottenere una classifica più prevedibile.

Analisi dati: sconti medi per regione e metodo di pagamento, prezzo unitario per categoria e regione, ordini per regione. Il topn dei dati è visibile.

Che cosa restituisce davvero TOPN in DAX

TOPN seleziona le prime righe di una tabella in base a un valore di ordinamento. La tabella può essere una tabella del modello, una tabella filtrata oppure una tabella costruita al volo con funzioni come FILTER, SUMMARIZE o ADDCOLUMNS.

Il punto che crea più confusione è questo: TOPN restituisce una tabella, non un numero. Per questo non posso inserirla direttamente in una scheda che si aspetta una misura numerica. Devo prima aggregare le righe selezionate oppure usarle come filtro per un’altra misura.

TOPN(
    ,
    ,
    ,
    []
)

Parametro Funzione
N_Value Numero di righe da selezionare. Se è pari o inferiore a 0, il risultato è una tabella vuota.
Table Insieme di dati dal quale estrarre gli elementi migliori.
OrderBy_Expression Colonna, misura o espressione usata per stabilire l’ordine.
Order DESC o 0 per l’ordine decrescente, ASC o 1 per quello crescente.

Se ometto l’ultimo parametro, l’ordinamento è decrescente. La documentazione di Microsoft Learn chiarisce anche un dettaglio importante: la funzione non garantisce l’ordine finale delle righe restituite. Quindi il visual deve essere ordinato separatamente.

Come creare una misura per i primi prodotti venduti

Immaginiamo un modello con una tabella Vendite, una dimensione Prodotto e una relazione corretta tra le due. La misura di base può essere molto semplice:

Totale vendite =
SUM('Vendite'[Importo])

Per sommare soltanto le vendite dei primi 10 prodotti uso una variabile tabellare e poi applico il filtro alla misura. In questo modo il calcolo resta leggibile e risponde correttamente alle selezioni del report.

Vendite top 10 prodotti =
VAR TopProducts =
    TOPN(
        10,
        ALLSELECTED('Prodotto'[Nome prodotto]),
        [Totale vendite], DESC,
        'Prodotto'[Nome prodotto], ASC
    )
RETURN
    CALCULATE(
        [Totale vendite],
        KEEPFILTERS(TopProducts)
    )

ALLSELECTED conserva i filtri esterni applicati dall’utente, per esempio anno, regione o canale di vendita. Se seleziono il 2026 e la regione Lazio, la classifica viene calcolata dentro quel perimetro, non sull’intero database.

Il secondo criterio, basato sul nome del prodotto, funziona da spareggio. Senza di esso, dieci prodotti con lo stesso valore al limite potrebbero produrre un risultato più ampio oppure una selezione non prevedibile. Se il nome non è univoco, è preferibile usare un codice prodotto univoco come criterio secondario.

Quando serve SUMX

In alcuni casi costruisco una tabella virtuale che contiene già il valore calcolato per ogni elemento. Qui SUMX attraversa le righe della tabella e somma il risultato dell’espressione.

Vendite top 10 con SUMX =
VAR TabellaProdotti =
    ADDCOLUMNS(
        ALLSELECTED('Prodotto'[Nome prodotto]),
        "@Vendite", [Totale vendite]
    )
VAR TopProducts =
    TOPN(
        10,
        TabellaProdotti,
        [@Vendite], DESC,
        'Prodotto'[Nome prodotto], ASC
    )
RETURN
    SUMX(TopProducts, [@Vendite])

Preferisco questo schema quando devo riutilizzare il valore calcolato in più passaggi, per esempio per costruire una quota, un confronto o un’analisi cumulativa. Per una misura semplice, invece, CALCULATE con KEEPFILTERS è spesso più immediato.

Come rendere il numero di elementi dinamico

Un valore fisso come 10 va bene per una prima analisi, ma nei dashboard reali è più utile lasciare all’utente la scelta tra 5, 10, 20 o altri valori. Per farlo creo una tabella disconnessa con GENERATESERIES.

N Top =
GENERATESERIES(3, 20, 1)

La tabella produce i numeri da 3 a 20 con incremento di 1. Dopo aver aggiunto la colonna Value a uno slicer, creo la misura che legge la selezione e usa 10 come valore predefinito.

Numero selezionato =
SELECTEDVALUE('N Top'[Value], 10)

A questo punto la misura diventa completamente flessibile:

Vendite top N =
VAR NumeroTop = [Numero selezionato]
VAR TopProducts =
    TOPN(
        NumeroTop,
        ALLSELECTED('Prodotto'[Nome prodotto]),
        [Totale vendite], DESC,
        'Prodotto'[Nome prodotto], ASC
    )
RETURN
    CALCULATE(
        [Totale vendite],
        KEEPFILTERS(TopProducts)
    )

Questa soluzione è utile quando il report deve servire pubblici diversi. Un responsabile commerciale può concentrarsi sui primi 5 prodotti, mentre un analista può allargare la vista ai primi 20 senza modificare la formula.

Calcolare la quota generata dai primi N

La selezione diventa ancora più interessante quando la confronto con il totale del perimetro scelto. La misura seguente mostra quale percentuale delle vendite arriva dai prodotti migliori.

Quota vendite top N =
DIVIDE(
    [Vendite top N],
    CALCULATE(
        [Totale vendite],
        ALLSELECTED('Prodotto'[Nome prodotto])
    )
)

Se il risultato è 0,68, significa che i prodotti selezionati generano il 68% delle vendite nel contesto attivo. È un dato molto più utile di una semplice lista, perché aiuta a capire la concentrazione del fatturato.

TOPN, RANKX e filtro Top N del visual

Queste tre soluzioni vengono spesso confuse, ma rispondono a esigenze diverse. La scelta corretta dipende dal fatto che io voglia ottenere una tabella, una posizione numerica oppure solo filtrare un grafico.

Soluzione Restituisce Quando usarla
TOPN Una tabella di elementi selezionati Per calcolare totali, quote e analisi sui primi N valori.
RANKX Un numero che rappresenta la posizione Per mostrare il ranking di ogni prodotto in una tabella o matrice.
Filtro Top N del visual Un filtro applicato a un singolo elemento grafico Per una configurazione rapida senza creare una misura dedicata.

Una misura di posizione con RANKX può essere scritta così:

Posizione prodotto =
RANKX(
    ALLSELECTED('Prodotto'[Nome prodotto]),
    [Totale vendite],
    ,
    DESC,
    DENSE
)

RANKX assegna una posizione, ma da solo non calcola il totale dei primi prodotti. Se due articoli hanno lo stesso valore, la modalità DENSE assegna loro la stessa posizione senza lasciare buchi nella sequenza. Per un totale aggregato, TOPN resta generalmente più adatto.

Il filtro Top N disponibile nel riquadro dei filtri è pratico per un grafico isolato. Io lo uso per prototipi veloci, ma per una logica riutilizzabile preferisco DAX, perché una misura può alimentare card, tooltip, KPI e calcoli di incidenza nello stesso report.

Gli errori che alterano la classifica

Usare ALL quando servirebbe ALLSELECTED

Con ALL rimuovo i filtri dalla colonna o dalla tabella indicata. È corretto se voglio una classifica globale, ma può sorprendere chi sta analizzando un singolo anno o una sola area geografica. Con ALLSELECTED mantengo invece il perimetro scelto dagli utenti tramite slicer e filtri esterni.

Restituire direttamente una tabella da una misura

Una misura deve produrre un valore scalare. Se assegno direttamente il risultato della funzione a una misura, Power BI restituisce un errore o non può valutare l’espressione nel modo atteso. Devo usare CALCULATE, SUMX, COUNTX o un’altra funzione che trasformi la tabella in un risultato numerico.

Dimenticare i valori BLANK

Prodotti senza vendite possono entrare nella tabella di valutazione se il modello o la misura li restituisce come vuoti. Quando questo crea classifiche poco utili, filtro la tabella prima di applicare TOPN.

VAR ProdottiConVendite =
    FILTER(
        ALLSELECTED('Prodotto'[Nome prodotto]),
        NOT ISBLANK([Totale vendite])
    )

La gestione dei vuoti dipende dall’obiettivo. In una classifica commerciale voglio quasi sempre escluderli, mentre in un controllo di copertura del catalogo potrebbero essere proprio il dato da mettere in evidenza.

Confondere selezione e ordinamento

L’ordine scritto nella formula serve a decidere quali righe entrano nel risultato, ma non obbliga una tabella o un grafico a visualizzarle nello stesso ordine. Dopo aver creato il visual, lo ordino esplicitamente per Totale vendite decrescente o per la misura di ranking.

Leggi anche: Esempi di Power BI e DAX per decisioni aziendali migliori

Applicare la funzione alla tabella sbagliata

Calcolare una classifica direttamente su milioni di righe della tabella dei fatti può aumentare inutilmente il lavoro del motore. Di solito ottengo risultati migliori applicando la selezione alla dimensione prodotto, cliente o categoria, usando poi la misura per valutare ogni elemento.

La qualità del modello conta più di una formula sofisticata. Relazioni corrette, schema a stella e misure riutilizzabili rendono la classifica più veloce e molto più facile da controllare.

Come scegliere una classifica affidabile nel report

Per un’analisi interattiva uso una tabella disconnessa per il numero di elementi, ALLSELECTED per rispettare le selezioni e un criterio secondario per gestire i pareggi. Questa combinazione copre la maggior parte dei casi pratici senza complicare inutilmente il modello.

Se invece devo mostrare soltanto i prodotti migliori in un grafico, il filtro Top N del visual può essere sufficiente. La differenza emerge quando il risultato deve alimentare altri indicatori, come la quota sul totale, il margine cumulativo o un confronto tra periodi.

Il mio controllo finale è sempre semplice: provo un filtro su anno, area e categoria, verifico il comportamento dei pareggi e confronto il totale dei primi N con il totale generale. Se questi tre test restituiscono risultati coerenti, la misura è pronta per entrare nel report.

Domande frequenti

TOPN restituisce una tabella, quindi non può essere inserita direttamente in una misura numerica. Puoi usarla con CALCULATE e KEEPFILTERS per applicare la selezione alla misura Totale vendite, oppure con SUMX per sommare i valori di una tabella virtuale.

ALLSELECTED mantiene i filtri esterni scelti dall'utente, come anno, regione o canale, e calcola la classifica dentro quel perimetro. ALL rimuove invece i filtri dalla colonna o dalla tabella indicata, producendo una classifica globale.

Crea una tabella disconnessa con GENERATESERIES, ad esempio da 3 a 20, inserisci la colonna Value in uno slicer e leggi la selezione con SELECTEDVALUE. Puoi impostare 10 come valore predefinito quando non è selezionato un solo elemento.

TOPN è adatto per calcolare totali, quote e analisi sui primi N valori. RANKX restituisce invece la posizione numerica di ogni prodotto, mentre il filtro Top N del visual è utile per limitare rapidamente un singolo grafico senza creare una misura riutilizzabile.

Valuta l'articolo

Valutazione: 0.00 Numero di voti: 0

Tag

topn
rankx
allselected
sumx
generateseries
Autor Emilio Santoro
Emilio Santoro
Mi chiamo Emilio Santoro e mi occupo di analisi dati, business intelligence e data science da 4 anni. Ho iniziato a esplorare questo mondo perché sono affascinato dal potenziale dei dati nel trasformare le decisioni aziendali e nel fornire una comprensione più profonda dei fenomeni. Sul sito mondobi.it, cerco di rendere accessibili concetti complessi, condividendo la mia esperienza nel collegare la teoria alla pratica e nel presentare informazioni in modo chiaro e organizzato. La mia priorità è offrire contenuti accurati, utili e sempre aggiornati, basati su un'attenta verifica delle fonti e un confronto costante con le tendenze del settore.

Condividi post

Scrivi un commento