Calcolare le classificazioni

Completato

La funzione DAX RANKX è una funzione iteratore speciale che è possibile usare per calcolare le classificazioni. La sintassi è la seguente:

RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])

Analogamente a tutte le funzioni iteratore, è necessario passare una tabella e un'espressione. È facoltativamente possibile passare un valore di classificazione, impostare la direzione dell'ordine o determinare come gestire le classificazioni quando i valori sono equivalenti.

Direzione dell'ordine

La direzione dell'ordine è crescente o decrescente. Quando si classificano informazioni favorevoli, ad esempio i valori dei ricavi, si userà probabilmente l'ordine decrescente in modo che i ricavi più alti vengano elencati per primi. Quando si classificano informazioni sfavorevoli, ad esempio i reclami dei clienti, è possibile usare l'ordine crescente in modo che il numero più basso di reclami venga elencato per primo. Se non si passa un argomento order, la funzione userà 0 (zero) (a indicare l'ordine decrescente).

Gestire i valori equivalenti

È possibile gestire i valori equivalenti ignorando i valori di classificazione o usando una classificazione densa, che usa il valore di classificazione successivo dopo un valore equivalente. Se non si passa un argomento ties, la funzione userà Skip. Più avanti in questa unità si avrà la possibilità di usare un esempio di ogni argomento ties.

Creare misure di classificazione

Aggiungere la misura seguente alla tabella Product:

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity]
)

Aggiungere la misura Product Quantity Rank all'oggetto visivo tabella disponibile nella Pagina 2 del report. L'oggetto visivo tabella raggruppa i prodotti per biciclette e visualizza la quantità, che ordina i prodotti in base alla quantità decrescente.

La funzione RANKX esegue l'iterazione su una tabella restituita dalla funzione DAX ALL. La funzione ALL viene usata per restituire tutte le righe di una tabella del modello o i valori di una o più colonne e ignora tutti i filtri. Pertanto, in questo caso, viene restituita una tabella costituita da tutti i valori della colonna Product della tabella Product. La funzione RANKX deve usare la funzione ALL perché l'oggetto visivo tabella verrà raggruppato per prodotto (che è un filtro nella tabella Product).

Si noti che nell'oggetto visivo tabella due prodotti hanno un valore equivalente per il decimo posto e che la classificazione del prodotto successivo sarà 12. Questo oggetto visivo è un esempio di utilizzo dell'argomento ties Skipped.

Immagine che mostra un oggetto visivo tabella denominato Bike Sales. È costituito da tre colonne: Product, Quantity e Product Quantity Rank. Le righe della tabella sono ordinate per quantità decrescente. Due prodotti condividono la classificazione 10 e il prodotto successivo avrà la classificazione 12.

L'attività successiva consiste nell'immettere la logica seguente per modificare la definizione della misura Product Quantity Rank in modo da usare una classificazione densa:

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity],
    ,
    ,
    DENSE
)

Si noti che nell'oggetto visivo tabella non esiste più una classificazione ignorata. Con due prodotti che hanno un valore equivalente per il decimo posto, la classificazione successiva sarà 11.

Immagine che mostra un oggetto visivo tabella denominato Bike Sales. È costituito da tre colonne: Product, Quantity e Product Quantity Rank. Le righe della tabella sono ordinate per quantità decrescente. Due prodotti condividono la classificazione 10 e il prodotto successivo avrà la classificazione 11.

Si noti che il totale di oggetti visivi tabella per Product Quantity Rank è uno (1). Il motivo è perché viene classificato il totale di tutti i prodotti.

Immagine che mostra che il totale di Product Quantity Rank è 1.

Non è consigliabile classificare i prodotti totali, quindi ora si userà la logica seguente per modificare la definizione della misura in modo che restituisca BLANK, a meno che non venga filtrato un singolo prodotto:

Product Quantity Rank =
IF(
    HASONEVALUE('Product'[Product]),
    RANKX(
        ALL('Product'[Product]),
        [Quantity],
        ,
        ,
        DENSE
    )
)

Immagine che mostra che il totale di Product Quantity Rank è BLANK.

Si noti che il totale di Product Quantity Rank è ora BLANK, risultato ottenuto usando la funzione DAX HASONEVALUE per verificare se la colonna Product della tabella Product ha un solo valore nel contesto di filtro. È il caso di ogni gruppo di prodotti, ma non del totale, che rappresenta tutti i prodotti.

Il contesto di filtro e la funzione HASONEVALUE saranno trattati nel modulo relativo al contesto di filtro.