Сегодня хочу рассказать о теме, которая будет особо интересна начинающему разработчику – слияние таблиц. Поговорим, как работать с CONCATENATE и JOIN, чтобы собрать данные из разных таблиц.

Если кратко, CONCATENATE добавляет строки в предыдущую загруженную таблицу, а JOIN – столбцы:

Слияние таблиц в QlikView

Теперь о конкатенации на примерах.

Задача

Давайте рассмотрим такой пример: одна компания решила переместить отдел сотрудников продаж из одного офиса в другой. Соответственно, появилась задача объединить таблицы данных обо всех сотрудниках в единую таблицу.

Вот наши источники данных:Слияние таблиц в QlikView

  • Первая таблица (Scranton Employees) содержит данные с именами сотрудников и названием отделов, в которых они работают.
  • Вторая таблица (Stamford Employees) содержит имена сотрудников отдела продаж другого подразделения компании, но без указания отдела.

Если данные загрузить автоматически в QlikView, мы увидим, что две таблицы загружены отдельно и объединены через синтетическую таблицу:

Слияние таблиц в QlikView

А это не то, что мы хотели получить, ведь при добавлении новых таблиц модель данных превратится в смесь элементов. Будем действовать более элегантно при помощи одного из вариантов конкатенации.

Автоматическая конкатенация

Автоматически QlikView не выполняет слияние наших двух таблиц, поскольку они имеют разные названия полей.

Одно из возможных решений задачи – добавить дополнительную колонку во вторую таблицу с названием «Department», где для каждого сотрудника прописать функционал отдела как «Sales». После добавления этого поля QlikView автоматически объединит данные – ничего специально прописывать будет не нужно.

Предотвращение автоматической конкатенации

Но возьмем случай, когда у вас есть две таблицы с одинаковыми названиями колонок и их количеством, но вы по какой-то причине не хотите автоматически объединять таблицы в одну при загрузке в Qlik. Тогда вы можете добавить к вашему скрипту загрузки данных LOAD префикс NOCONCATENATE. Этот префикс говорит QlikView не объединять данные в одну таблицу, а загрузить данные в отдельные таблицы.

Слияние таблиц в QlikView

Эксплицитная конкатенация

В работе я предпочитаю использовать эксплицитную конкатенацию (открытое слияние данных), поскольку у нее есть два важных преимущества:

  • Проще поддерживать и понимать скрипт.
  • Возможность объединить таблицы с не полностью идентичным набором общих полей.

Загрузка данных LOAD в этом случае работает с префиксом CONCATENATE. Этот префикс говорит QlikView загрузить данные из новой таблицы в предыдущую таблицу. Поля, которые не совпадают между собой, автоматически получают значения null.

По умолчанию QlikView при конкатенации подгружает данные в предыдущую таблицу, но если вы хотите добавить данные в другую таблицу, надо указать имя целевой таблицы в скобках. Я рекомендую всегда указать имя целевой таблицы – опять же из соображений более простой поддержки скрипта.Конец формы

В скрипте ниже вы можете увидеть, как первая таблица объединяется со второй таблицей, даже при том, что у них нет полного набора одинаковых полей:

Слияние таблиц в QlikView

Файлы для скачивания:

Пример, который мы сегодня разбирали, взят с блога Qlikfix, поэтому можно скачать исходный xls-файл и qvw с автоматической и эксплицитной конкатенацией:

На этом сегодня все!

P.s. Ну а кто хочет более углубленного понимания слияния таблиц и оптимизации модели данных, рекомендую прочитать статью по оптимизации индексов ключевых полей, от Сергея — http://blog.atkcg.ru/optimizatciya-indexov-klyutchevikh-poley/