Сегодня потребовалось объединить несколько таблиц непосредственно в QlikView, но вот засада есть две команды JOIN и CONCATENATE
Пора раз и навсегда разобраться что и когда нужно использовать …..
JOIN – позволяет добавить новые столбцы в таблицу
CONCATENATE - совместить данные из двух таблиц (аналог UNION SQL)
Есть еще интересный оператор KEEP (позволяет выровнять таблицы по количеству записей в зависимости от LEFT RIGHT INNER)
Как работает CONCATENATE
Если напрямую загрузить две таблицы например сотрудников двух компаний то если открыть модель можно увидеть что они связаны
через вспомогательную таблицу $Syn 1
И наша схема выглядит так..
что по мере разрастания количества таблиц будет напоминать большую кашу, дабы все это привести в человеческий вид воспользуемся CONCATENATE
1..Неявное связывание (QlikView должен был автоматически сам связать эти таблицы по одинаковым полям, но так как количество полей в таблицах не совпадает связать не получилось )
Как выход добавить еще одно поле Department в таблицу Stamford Employees и таблицы свяжутся сами автоматически
2..Можно отменить неявное связывание если указать ключевое слово перед таблицей NOCONCATENATE
3.. Явное связывание (определенно лучше чем неявное, есть возможность связать таблицы с разным набором полей)
Указываем секретное слово CONCATENATE в скобочках пишем таблицу в которую сливаем данные
Как работает JOIN
Тем кто знаком с любой СУБД и так все понятно, для остальных есть 4 вида объединений: INNER, LEFT, RIGHT, OUTER
Пусть есть 2 таблицы
Синтаксис примерно такой
MyTable:
LOAD
Field1,
Field2
FROM myqvd1.qvd (qvd);
LEFT JOIN (MyTable)
LOAD
Field2,
Field3
FROM myqvd2.qvd (qvd);
LOAD
Field1,
Field2
FROM myqvd1.qvd (qvd);
LEFT JOIN (MyTable)
LOAD
Field2,
Field3
FROM myqvd2.qvd (qvd);
В итоге получим для
LEFT JOIN
|
RIGHT JOIN
|
INNER JOIN
|
OUTER JOIN
|
ГЛАВНОЕ ЧТОБЫ СТОЛБЦЫ ИМЕЛИ ОДИНАКОВОЕ НАЗВАНИЕ!!
Иначе получите на выходе CROSS JOIN
Как работает KEEP
На этом кажется все….
Блондинке в автошколе задают вопрос:
- Как работает двигатель?
- Можно своими словами?
- Конечно?
- Вжжжж, ввжжж, вжжж.