LOOKUPVALUE

Si applica a:colonna calcolatatabella calcolata calcolo visivomisura

Restituisce il valore per la riga che soddisfa tutti i criteri specificati da una o più condizioni di ricerca.

Sintassi

LOOKUPVALUE (
    <result_columnName>,
    <search_columnName>,
    <search_value>
    [, <search2_columnName>, <search2_value>]…
    [, <alternateResult>]
)

Parametri

Termine Definizione
result_columnName Nome di una colonna esistente che contiene il valore che si desidera restituire. Non può essere un'espressione.
search_columnName Nome di una colonna esistente. Può trovarsi nella stessa tabella di result_columnName o in una tabella correlata. Non può essere un'espressione. È possibile specificare più coppie di search_columnName e search_value.
search_value Valore da cercare in search_columnName. È possibile specificare più coppie di search_columnName e search_value.
alternateResult (Facoltativo) Valore restituito quando il contesto per result_columnName viene filtrato fino a zero o più valori distinti. Se non specificato, la funzione restituisce BLANK quando result_columnName viene filtrata fino a zero valori o un errore quando il contesto per result_columnName ha più di un valore distinto.

Valore restituito

Valore di result_columnName nella riga in cui tutte le coppie di search_columnName e search_value hanno una corrispondenza esatta.

Se nessuna corrispondenza soddisfa tutti i valori di ricerca, la funzione restituisce BLANK o alternateResult (se specificato). In altre parole, la funzione non restituisce un valore di ricerca se solo alcuni dei criteri corrispondono.

Se più righe corrispondono ai valori di ricerca e i valori in result_columnName per queste righe sono identici, viene restituito tale valore. Tuttavia, se result_columnName restituisce valori diversi, la funzione restituisce un errore o alternateResult (se specificato).

Osservazioni

  • Se esiste una relazione tra la tabella che contiene la colonna dei risultati e le tabelle che contengono le colonne di ricerca, nella maggior parte dei casi, l'uso della RELATED funzione anziché LOOKUPVALUE è più efficiente e offre prestazioni migliori.

  • È possibile specificare più coppie di search_columnName e search_value.

  • I parametri search_value e alternateResult vengono valutati prima che la funzione eselabori le righe della tabella di ricerca.

  • Quando viene valutato in un contesto di riga, LOOKUPVALUE esegue la transizione di contesto, ad esempio CALCULATE, convertendo la riga corrente in filtri. In una colonna calcolata è possibile introdurre dipendenze da altre colonne della stessa tabella, anche quando l'espressione non fa riferimento in modo esplicito a tali colonne. Queste dipendenze possono causare errori di dipendenza circolari.

  • LOOKUPVALUE rimuove i filtri dalla tabella che contiene result_columnName, con lo stesso comportamento ALL di rimozione del filtro applicato a tale tabella. I filtri propagati da altre tabelle tramite relazioni bidirezionali possono comunque influire sul risultato della ricerca. Nell'esempio 3 viene illustrato come rimuovere i filtri della tabella di origine quando tali filtri limitano la ricerca.

  • Evitare di usare ISERROR o IFERROR per acquisire un errore restituito da LOOKUPVALUE. Se alcuni input per la funzione generano un errore quando non è possibile determinare un singolo valore di output, specificando un alternateResult parametro è il modo più affidabile e con le prestazioni più elevate per gestire l'errore.

  • Il parametro alternateResult restituisce un errore se specificato in una colonna calcolata di Power Pivot.

  • Questa funzione non è supportata per l'uso in modalità DirectQuery quando viene usata nelle colonne calcolate o nelle regole di sicurezza a livello di riga.

Gli esempi in questo articolo possono essere usati con il modello adventure works DW 2020 di Power BI Desktop di esempio. Per ottenere il modello, vedere DAX modello di esempio.

Esempio 1

In questo esempio, LOOKUPVALUE cerca la valuta usata per pagare l'ordine nel giorno in cui è stato effettuato l'ordine:

Exchange Rate =
LOOKUPVALUE (
    'Currency Rate'[Average Rate],
    'Currency Rate'[CurrencyKey], [CurrencyKey],
    'Currency Rate'[DateKey], [OrderDateKey]
)

Hai bisogno sia della data dell'ordine che della valuta per trovare il tasso medio per la data e la valuta corretti. OrderDateKey e CurrencyKey sono le chiavi usate per cercare il Tasso medio nella tabella Valuta.

È possibile utilizzare il tasso di cambio per calcolare l'importo delle vendite nella valuta locale con:

Sales Amount Local Currency =
[Sales Amount] * [Exchange Rate]

Esempio 2

In questo esempio, la colonna calcolata seguente definita nella tabella Sales usa la funzione LOOKUPVALUE per restituire i valori del canale dalla tabella Sales Order.

CHANNEL =
LOOKUPVALUE (
    'Sales Order'[Channel],
    'Sales Order'[SalesOrderLineKey], [SalesOrderLineKey]
)

Tuttavia, in questo caso, poiché esiste una relazione tra le tabelle Sales Order e Sales , è più efficiente usare la RELATED funzione .

CHANNEL =
RELATED ( 'Sales Order'[Channel] )

Esempio 3

Per questo esempio, modificare la direzione del filtro incrociato della relazione tra Product[ProductKey] e Sales[ProductKey] in Entrambi. In questo modo è possibile filtrare i filtri in Vendite.

La colonna calcolata seguente in Sales cerca il nome di un prodotto di riferimento fisso. L'uso di un prodotto di riferimento, anziché del prodotto nella riga di vendita corrente, dimostra in che modo i filtri bidirezionali possono limitare la ricerca.

Reference Product Name =
VAR ReferenceProductKey = 528
RETURN
    LOOKUPVALUE ( 'Product'[Product], 'Product'[ProductKey], ReferenceProductKey )

La transizione del contesto interno crea filtri dalla riga Sales corrente. Questi filtri vengono propagati a Product tramite la relazione bidirezionale. Per una riga di vendita con un codice Product Key diverso, la ricerca restituisce BLANK anche se il prodotto di riferimento esiste.

Sostituire la formula della colonna calcolata con l'espressione seguente. REMOVEFILTERS cancella i filtri Sales creati dalla transizione di contesto prima della ricerca:

Reference Product Name =
VAR ReferenceProductKey = 528
RETURN
    CALCULATE (
        LOOKUPVALUE ( 'Product'[Product], 'Product'[ProductKey], ReferenceProductKey ),
        REMOVEFILTERS ( Sales )
    )

La formula modificata restituisce il nome del prodotto di riferimento indipendentemente dal prodotto nella riga di vendita corrente. Ripristinare la direzione originale del filtro incrociato della relazione dopo questo esempio.