Для простого поиска, когда вы хотите найти одиночное значение из другого значения, вы можете использовать загрузку 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
(что похоже на 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 и т. Д.
Возможно, вы захотите подумать об оптимизации извлечения «Таблица А», поскольку оно почти загружается дважды, это может занять некоторое время (например, с удаленного сервера и т. д.), поэтому может быть лучше получить ваши данные за один раз, а затем нарезать как только он окажется в памяти (намного быстрее). Быстрый пример может быть таким, как показано ниже:
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;
person
i_saw_drones
schedule
06.05.2014