Calcolare le classificazioni
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.
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.
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.
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
)
)
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.