Condividi tramite


Usare SELECTEDVALUE anziché VALUES

In qualità di modello di dati, a volte potrebbe essere necessario scrivere un'espressione DAX che verifica se una colonna viene filtrata in base a un valore specifico.

Nelle versioni precedenti di DAX, questo requisito è stato raggiunto in modo sicuro usando un modello che include tre funzioni DAX; IF, HASONEVALUE e VALUES. La definizione di misura seguente presenta un esempio. Calcola l'importo dell'imposta di vendita, ma solo per le vendite effettuate ai clienti australiani.

Australian Sales Tax =
IF(
    HASONEVALUE(Customer[Country-Region]),
    IF(
        VALUES(Customer[Country-Region]) = "Australia",
        [Sales] * 0.10
    )
)

Nell'esempio, la funzione HASONEVALUE restituisce TRUE solo quando un singolo valore della colonna Paese-Regione è visibile nel contesto di filtro corrente. Quando è TRUE, la funzione VALUES viene confrontata con il testo letterale "Australia". Quando la funzione VALUES restituisce TRUE, la misura delle vendite viene moltiplicata per 0,10 (che rappresenta il 10%). Se la funzione HASONEVALUE restituisce FALSE, perché più valori filtrano la colonna, la prima funzione IF restituisce BLANK.

L'uso del HASONEVALUE è una tecnica difensiva. È necessario perché è possibile che più valori filtrino la colonna paese-area geografica. In questo caso, la funzione VALUES restituisce una tabella di più righe. Il confronto di una tabella di più righe con un valore scalare genera un errore.

Recommendation

È consigliabile usare la funzione SELECTEDVALUE. Ottiene lo stesso risultato del modello descritto in questo articolo, ma in modo più efficiente ed elegante.

Usando la funzione SELECTEDVALUE, la definizione di misura di esempio viene ora riscritta.

Australian Sales Tax =
IF(
    SELECTEDVALUE(Customer[Country-Region]) = "Australia",
    [Sales] * 0.10
)

Suggerimento

È possibile passare un risultato alternativo valore nella funzione SELECTEDVALUE. Il valore del risultato alternativo viene restituito quando non vengono applicati filtri o più filtri alla colonna.