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 の値にフィルター処理されるときに BLANK を返します。または、result_columnNameのコンテキストに複数の個別の値がある場合はエラーが返されます。 |
戻り値
result_columnName と search_columnName のすべてのペアが完全に一致する行の search_value の値。
すべての検索値を満たす一致がない場合、関数は BLANK または alternateResult (指定されている場合) を返します。 つまり、一部の条件のみが一致する場合、関数はルックアップ値を返しません。
複数の行が検索値と一致し、これらの行の result_columnName の値が同じ場合、その値が返されます。 ただし、 result_columnName が異なる値を返す場合、関数はエラーまたは alternateResult (指定されている場合) を返します。
備考
結果列を含むテーブルと検索列を含むテーブルの間にリレーションシップが存在する場合、ほとんどの場合、RELATEDではなくLOOKUPVALUE関数を使用する方が効率的であり、パフォーマンスが向上します。
search_columnNameとsearch_valueの複数のペアを指定できます。search_valueパラメーターとalternateResultパラメーターは、関数が検索テーブルの行を反復処理する前に評価されます。行コンテキストで評価されると、 LOOKUPVALUE は、現在の行をフィルターに変換して、 CALCULATEなどのコンテキスト遷移を実行します。 計算列では、式がそれらの列を明示的に参照していない場合でも、同じテーブル内の他の列への依存関係が発生する可能性があります。 これらの依存関係により、循環依存関係エラーが発生する可能性があります。
LOOKUPVALUE は、
result_columnNameを含むテーブルからフィルターを削除し、そのテーブルに適用 ALL のと同じフィルター削除動作を行います。 双方向リレーションシップを介して他のテーブルから伝達されるフィルターは、引き続きルックアップ結果に影響を与える可能性があります。 例 3 は、これらのフィルターによって参照が制限される場合に、ソース テーブルのフィルターを削除する方法を示しています。ISERRORまたはIFERRORを使用して、LOOKUPVALUEによって返されるエラーをキャプチャしないようにします。 1 つの出力値を特定できないときに関数への入力でエラーが発生する場合は、
alternateResultパラメーターを指定することが、エラーを処理するための最も信頼性が高く、最もパフォーマンスの高い方法です。alternateResultパラメーターは、Power Pivot 計算列で指定した場合にエラーを返します。-
この関数は、計算列または行レベル セキュリティ (RLS) 規則で使用する場合、DirectQuery モードでは使用できません。
この記事の例は、Adventure Works DW 2020 Power BI Desktop モデルのサンプルと共に使用できます。 モデルを取得するには、サンプル モデル
例 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] )
例 3
この例では、Product[ProductKey] と Sales[ProductKey] の間のリレーションシップのクロスフィルターの方向を Both に変更します。 これにより、 Sales のフィルターで製品をフィルター処理 できます。
Sales の次の計算列は、固定参照製品の名前を検索します。 現在の販売行の製品ではなく、参照製品を使用して、双方向フィルターで参照を制限する方法を示します。
Reference Product Name =
VAR ReferenceProductKey = 528
RETURN
LOOKUPVALUE ( 'Product'[Product], 'Product'[ProductKey], ReferenceProductKey )
内部コンテキスト遷移では、現在の Sales 行からフィルターが作成されます。 これらのフィルターは、双方向の関係を通じて Product に伝達されます。 異なるプロダクト キーを持つ販売行の場合、参照製品が存在する場合でも、ルックアップは BLANK を返します。
計算列の数式を次の式に置き換えます。 REMOVEFILTERS は、検索の前にコンテキスト遷移によって作成された Sales フィルターをクリアします。
Reference Product Name =
VAR ReferenceProductKey = 528
RETURN
CALCULATE (
LOOKUPVALUE ( 'Product'[Product], 'Product'[ProductKey], ReferenceProductKey ),
REMOVEFILTERS ( Sales )
)
変更後の数式は、現在の販売行の製品に関係なく、参照製品の名前を返します。 この例の後に、リレーションシップの元のクロスフィルターの方向を復元します。