LOOKUPVALUE
1 つ以上の検索条件で指定されたすべての条件を満たす行の値を返します。
構文
LOOKUPVALUE (
<result_columnName>,
<search_columnName>,
<search_value>
[, <search2_columnName>, <search2_value>]…
[, <alternateResult>]
)
パラメーター
用語 | 定義 |
---|---|
result_columnName |
返す値を含む既存の列の名前。 式にすることはできません。 |
search_columnName |
既存の列の名前。 result_columnNameと同じテーブルまたは関連するテーブルに含めることができます。 式にすることはできません。 search_columnNameとsearch_valueの複数のペアを指定できます。 |
search_value |
search_columnNameで検索する値。 search_columnNameとsearch_valueの複数のペアを指定できます。 |
alternateResult |
(省略可能)result_columnNameのコンテキストが 0 個以上の個別の値にフィルター処理されたときに返される値。 指定しない場合、result_columnNameが 0 個の値にフィルター処理されたとき、またはresult_columnNameのコンテキストに複数の個別の値がある場合にエラーが発生した場合、関数は BLANK を返します。 |
戻り値
search_columnName
と search_value
のすべてのペアが完全に一致する行の result_columnName
の値。
すべての検索値を満たす一致するものがない場合は、BLANK または alternateResult
(指定されている場合) が返されます。 つまり、一部の条件のみが一致する場合、関数はルックアップ値を返しません。
複数の行が検索値と一致し、これらの行の result_columnName
の値が同じ場合、その値が返されます。 ただし、result_columnName
が異なる値を返す場合は、エラーまたは alternateResult
(指定されている場合) が返されます。
備考
結果列を含むテーブルと検索列を含むテーブルの間にリレーションシップがある場合、ほとんどの場合、LOOKUPVALUE ではなく RELATED 関数を使用する方が効率的であり、パフォーマンスが向上します。
search_columnName
とsearch_value
の複数のペアを指定できます。search_value
パラメーターとalternateResult
パラメーターは、関数が検索テーブルの行を反復処理する前に評価されます。ISERROR または IFERROR 関数を使用して、LOOKUPVALUEによって返されるエラーをキャプチャしないようにします。 1 つの出力値を特定できないときに関数への入力でエラーが発生する場合は、
alternateResult
パラメーターを指定することが、エラーを処理するための最も信頼性が高く、最もパフォーマンスの高い方法です。alternateResult
パラメーターは、Power Pivot 計算列で指定した場合にエラーを返します。この関数は、計算列または行レベル セキュリティ (RLS) 規則で使用する場合、DirectQuery モードでは使用できません。
例 1
この例では、LOOKUPVALUE を使用して、注文が行われた日に注文の支払いに使用される通貨の平均レートを検索します。
Exchange Rate =
LOOKUPVALUE (
'Currency Rate'[Average Rate],
'Currency Rate'[CurrencyKey], [CurrencyKey],
'Currency Rate'[DateKey], [OrderDateKey]
)
正しい日付と通貨の平均レートを見つけるには、注文日と通貨の両方が必要です。 OrderDateKey と CurrencyKey は、Currency Rate テーブルの平均レートを検索するために使用されるキーです。
為替レートを使用すると、次の方法で現地通貨で販売金額を計算できます。
Sales Amount Local Currency = [Sales Amount] * [Exchange Rate]
例 2
この例では、Sales テーブルで定義されている次の計算列は、LOOKUPVALUE 関数を使用して、Sales Order テーブルからチャネル値を返します。
CHANNEL =
LOOKUPVALUE (
'Sales Order'[Channel],
'Sales Order'[SalesOrderLineKey],
[SalesOrderLineKey]
)
ただし、この場合は、Sales Order テーブルと Sales テーブルの間にリレーションシップがあるため、RELATED 関数を使用する方が効率的です。
CHANNEL = RELATED('Sales Order'[Channel])