对于您希望从您可以使用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;