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 valuespecifico.

In earlier versioni di DAX, questo requisito è stato raggiunto in modo sicuro usando un modello che include tre funzioni DAX; IF, HASONEVALUEandVALUES. La definizione di measure 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 value della colonna paese-regione è visibile nel contesto corrente di filter. Quando è TRUE, la funzione VALUES viene confrontata con il testo letterale "Australia". Quando la funzione restituisce , le vendite vengono moltiplicate per 0,10 (che rappresenta il 10%). If la funzione HASONEVALUE restituisce FALSE, poiché c'è più di una valuefilters nella colonna, la funzione firstIF restituisce BLANK.

L'uso del HASONEVALUE è una tecnica difensiva. È necessario perché è possibile che la colonna country-region appaia in modo multiplo valuesfilter. In questo caso, la funzione VALUES restituisce una tabella di più righe. Il confronto di una tabella di più righe con un value scalare comporta un error.

Recommendation

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

Usando la funzione SELECTEDVALUE, la definizione di measure di esempio viene now riscritta.

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

Suggerimento

È possibile passare un risultato alternativo divalue nella funzione SELECTEDVALUE. Il risultato alternativo value viene restituito quando alla colonna non vengono applicate filters,or più filters.