LookUp - スクリプト関数
Lookup() は、すでにロードされているテーブルを参照し、項目 match_field_name における値 match_field_value の最初の出現に対応する field_name の値を返します。テーブルは、現在のテーブルまたは前にロードして別のテーブルにすることができます。
構文:
lookup(field_name,
match_field_name, match_field_value [, table_name])
戻り値データ型: dual
引数:
引数
field_name |
戻り値が必要な項目名。 入力値は文字列として指定する必要があります (たとえば、引用符で囲まれた文字列)。 |
match_field_name |
match_field_value を検索する項目の名前。 入力値は文字列として指定する必要があります (たとえば、引用符で囲まれた文字列)。 |
match_field_value |
match_field_name 項目で検索する値。 |
table_name |
値を検索するテーブルの名前。入力値は文字列として指定する必要があります (例えば、引用符で囲まれた文字列)。
table_name が省略されている場合は、現在のテーブルとして処理されます。
|
情報メモ引数に引用符がない場合、現在のテーブルを参照します。他のテーブルを参照するには、引数を単一引用符で囲みます。
制限事項:
連結などの複雑な操作の結果テーブルでは、検索順は明確に定義されませんが、それ以外の場合、検索はロード順に実行されます。field_name と match_field_name は両方とも、table_name で指定された同一テーブルの項目であることが必要です。
一致するものがない場合は、NULL が返されます。
ロード スクリプト
以下のデータをインライン データとしてデータロードエディタにロードして、以下の例を作成します。
ProductList:
Load * Inline [
ProductID|Product|Category|Price
1|AA|1|1
2|BB|1|3
3|CC|2|8
4|DD|3|2
] (delimiter is '|');
OrderData:
Load *, Lookup('Category', 'ProductID', ProductID, 'ProductList') as CategoryID
Inline [
InvoiceID|CustomerID|ProductID|Units
1|Astrida|1|8
1|Astrida|2|6
2|Betacab|3|10
3|Divadip|3|5
4|Divadip|4|10
] (delimiter is '|');
Drop Table ProductList;
インライン ロードの使用の詳細については、インライン ロード を参照してください。
ビジュアライゼーションの作成
Qlik Sense シートにテーブル ビジュアライゼーションを作成します。項目 ProductID、InvoiceID、CustomerID、Units、CategoryID をテーブルに追加します。
結果
結果のテーブル
ProductID |
InvoiceID |
CustomerID |
ユニット: |
CategoryID |
1 |
1 |
Astrida |
8 |
1 |
2 | 1 | Astrida | 6 | 1 |
3 | 2 | Betacab | 10 | 2 |
3 | 3 | Divadip | 5 | 2 |
4 | 4 | Divadip | 10 | 3 |
説明
サンプル データでは、Lookup() 関数を以下の形式で使用します。
Lookup('Category', 'ProductID', ProductID, 'ProductList')
ProductList テーブルが最初にロードされます。
Lookup() 関数を使用して、OrderData テーブルが構築されます。この関数では、3 番目の引数として、ProductID が指定されていますProductList の 'ProductID' (単一引用符で囲まれた 2 番目の引数) で、この項目の値が検索されます。
関数は、'Category' (ProductList テーブル) の値を CategoryID.としてロードして返します。
drop ステートメントは、不要になった ProductList テーブルをデータ モデルから削除します。結果の OrderData テーブルが残ります。
情報メモ
Lookup() 関数には柔軟性があり、過去にロードしたテーブルにもアクセスできます。ただし、Applymap() 関数と比べると、処理に時間がかかります。