別の値から単一の値を検索したい単純な検索では、MAPPING
ロードを使用してからApplyMap()
関数を使用できます。たとえば、次のテーブルがあるとします。
LOAD
*
INLINE [
UserID, System
1, Windows
2, Linux
3, Windows
];
次のように、UserID と UserName を含む別のテーブルがあります。
LOAD
*
INLINE [
UserID, UserName
1, Alice
2, Bob
3, Carol
];
ApplyMap
次に、上記のテーブルを次のように組み合わせることができます。
UserNameMap:
MAPPING LOAD
*
INLINE [
UserID, UserName
1, Alice
2, Bob
3, Carol
];
SystemData:
LOAD
UserID,
ApplyMap('UserNameMap', UserID, 'MISSING') as UserName,
System
INLINE [
UserID, System
1, Windows
2, Linux
3, Windows
];
ApplyMap は非常に高速で、ロード時間が大幅に遅くなることはありません (ただし、QVD の直接ロードほど速くはありません)。ただし、前述のように、ApplyMap は、単一の値をテーブルにマップする場合にのみ使用できます。join
より多くのフィールドについて、結果を 1 つのテーブルに結合する場合は (SQL JOIN に似ています)を使用する必要があります。
それらを 1 つのテーブルに結合したくない場合 (ただし、「スター」スキームのままにしておく場合) は、リンクするフィールドの名前が同じであることを確認してください。例えば:
A_Left:
Load a_id_left,
a_name_left as [Name_Left]
inline [
a_id_left, a_name_left
1, 'nwsnd'
2, 'dcsdcws'
3, 'fsdf' ];
A_Rigtht:
Load a_id_right,
a_name_right as [Name_Right]
inline [
a_id_right, a_name_right
1, 'nwsnd'
2, 'dcsdcws'
3, 'fsdf' ];
Data:
Load id,
a_id_left,
a_id_right,
data
inline [
id, a_id_left, a_right_id, data
1, 1, 2, 37
1, 1, 3, 18
1, 2, 3, 62
];
(ロードに失敗するため、「データ」から「名前」フィールドを削除しました)。
これは、QlikView の自動フィールド結合により、QlikView ドキュメントで機能します。
ただし、データを 1 つのテーブルに格納したい場合 (QVD への出力など) JOIN
、2 つのテーブルをData
. テーブルのいくつかを再配置して、生活を少し楽にすることができます。Data
テーブルを最初に配置すると、他の2つのテーブルを結合できます。
Data:
Load id,
a_id_left,
a_id_right,
data
inline [
id, a_id_left, a_id_right, data
1, 1, 2, 37
1, 1, 3, 18
1, 2, 3, 62
];
LEFT JOIN (Data)
Load a_id_left,
a_name_left as [Name_Left]
inline [
a_id_left, a_name_left
1, 'nwsnd'
2, 'dcsdcws'
3, 'fsdf' ];
LEFT JOIN (Data)
Load a_id_right,
a_name_right as [Name_Right]
inline [
a_id_right, a_name_right
1, 'nwsnd'
2, 'dcsdcws'
3, 'fsdf' ];
これは、「データ」という名前の単一のテーブルに再分類され、QVD などに出力できます。
「テーブル A」の抽出はほぼ 2 回読み込まれるため、最適化を検討することをお勧めします。これには (長距離サーバーなどから) 時間がかかる場合があるため、一度にデータを取得してからスライスする方がよい場合があります。それがメモリに入ったら(はるかに高速です)。簡単な例は次のようになります。
TableA:
LOAD
a_id_left,
a_id_right,
a_name_left,
a_name_right
FROM ...;
Data:
Load id,
a_id_left,
a_id_right,
data
inline [
id, a_id_left, a_id_right, data
1, 1, 2, 37
1, 1, 3, 18
1, 2, 3, 62
];
LEFT JOIN (Data)
LOAD DISTINCT
a_id_left,
a_name_left as [Name_Left]
RESIDENT TableA;
LEFT JOIN (Data)
LOAD DISTINCT
a_id_right,
a_name_right as [Name_Right]
RESIDENT TableA;
DROP TABLE TableA;