對於您希望從您可以使用MAPPING
負荷,然後用ApplyMap()
功能的另一個值查找一個單值簡單的查找。例如,說我有如下表:
LOAD
*
INLINE [
UserID, System
1, Windows
2, Linux
3, Windows
];
我有一個包含用戶名和用戶名如下另一個表:
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
(與SQL JOIN類似)。
如果您不希望將它們加入單個表格(但將其保留爲「明星」方案),只需確保您希望鏈接的字段命名相同即可。例如:
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文檔中工作。
但是,如果您希望將數據存儲在單個表中(例如,輸出到QVD),那麼在你的情況下,你將需要JOIN
你的兩張表變成Data
。我們可以重新排列了一些表來讓我們的生活更容易一點,如果我們首先把你的Data
表,我們就可以加入你的其他兩個表上:
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「提取,因爲它幾乎被加載兩次,這可能需要一些時間(例如從長途服務器等)因此一次抓取數據然後在內存中切片(更快)可能會更好。一個簡單的例子可能如下:
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;