DAX: Usare SELECTEDVALUE invece di VALUESDAX: Use SELECTEDVALUE instead of VALUES

Gli autori di modelli di dati potrebbero avere a volte l'esigenza di scrivere un'espressione DAX che verifica se una colonna è filtrata in base a un valore specifico.As a data modeler, sometimes you might need to write a DAX expression that tests whether a column is filtered by a specific value.

Nelle versioni precedenti di DAX questa esigenza poteva essere soddisfatta in modo sicuro usando un modello che coinvolge tre funzioni DAX.In earlier versions of DAX, this requirement was safely achieved by using a pattern involving three DAX functions. Le funzioni sono IF, HASONEVALUE e VALUES.The functions are IF, HASONEVALUE and VALUES. Nella definizione di misura seguente viene presentato un esempio.The following measure definition presents an example. Calcola l'importo dell'imposta di vendita, ma solo per le vendite effettuate ai clienti australiani.It calculates the sales tax amount, but only for sales made to Australian customers.

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

In questo esempio la funzione HASONEVALUE restituisce TRUE solo quando un singolo valore filtra la colonna Country-Region.In the example, the HASONEVALUE function returns TRUE only when a single value filters the Country-Region column. Quando è TRUE, la funzione VALUES viene confrontata con il testo letterale "Australia".When it's TRUE, the VALUES function is compared to the literal text "Australia". Quando la funzione VALUES restituisce TRUE, la misura Sales viene moltiplicata per 0,10 (che rappresenta il 10%).When the VALUES function returns TRUE, the Sales measure is multiplied by 0.10 (representing 10%). Se la funzione HASONEVALUE restituisce FALSE, poiché più di un valore filtra la colonna, la prima funzione IF restituisce BLANK.If the HASONEVALUE function returns FALSE—because more than one value filters the column—the first IF function returns BLANK.

L'uso di HASONEVALUE è una tecnica difensiva.The use of the HASONEVALUE is a defensive technique. È necessario perché è possibile che più valori filtrino la colonna Country-Region.It's required because it's possible that multiple values filter the Country-Region column. In questo caso, la funzione VALUES restituisce una tabella di più righe.In this case, the VALUES function returns a table of multiple rows. Il confronto tra una tabella di più righe e un valore scalare causa un errore.Comparing a table of multiple rows to a scalar value results in an error.

RaccomandazioneRecommendation

Si consiglia di usare la funzione SELECTEDVALUE.We recommend that you use the SELECTEDVALUE function. Ottiene lo stesso risultato del modello descritto in questo articolo, ma in modo più efficiente ed elegante.It achieves the same outcome as the pattern described in this article, yet more efficiently and elegantly.

La definizione della misura di esempio viene ora riscritta usando la funzione SELECTEDVALUE.Using the SELECTEDVALUE function, the example measure definition is now rewritten.

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

Suggerimento

È possibile passare un valore di risultato alternativo nella funzione SELECTEDVALUE.It's possible to pass an alternate result value into the SELECTEDVALUE function. Il valore del risultato alternativo viene restituito quando alla colonna non è applicato alcun filtro o sono applicati più filtri.The alternate result value is returned when either no filters—or multiple filters—are applied to the column.

Passaggi successiviNext steps

Per altre informazioni su questo articolo, vedere le risorse seguenti:For more information about this article, check out the following resources: