Объединение таблиц с помощью операторов Join и Keep
Объединение — операция объединения двух таблиц в одну. Записи результирующей таблицы представляют собой комбинации записей в исходных таблицах. При этом две такие записи, составляющие одну комбинацию в результирующей таблице, как правило, имеют общее значение одного или нескольких общих полей. Такое объединение называется естественным. В программе Qlik Sense объединение может выполняться в скрипте, создавая логическую таблицу.
Таблицы, которые находятся в скрипте, можно объединять. Логика Qlik Sense будет распознавать не отдельные таблицы, а результаты объединения, которые будут представлены в одной внутренней таблице. В некоторых случаях это требуется, однако существуют недостатки:
- Загруженные таблицы часто становятся больше, и программа Qlik Sense работает медленнее.
- Некоторая информация может быть потеряна: частота (количество записей) в исходной таблице может быть больше недоступна.
Функция Keep, которая позволяет уменьшить одну или обе таблицы до пересечения данных таблиц перед сохранением таблиц в программу Qlik Sense, предназначена для уменьшения количества случаев, когда необходимо использовать явные объединения.
Join
Самым простым способом создания объединения является использование префикса Join в скрипте, который позволяет объединять внутреннюю таблицу с другой именованной таблицей или последней созданной таблицей. Объединение будет внешним и позволит создать все возможные сочетания значений из двух таблиц.
Пример:
Результирующая внутренняя таблица имеет поля a, b, c и d. Количество записей различается в зависимости от значений полей этих двух таблиц.
Для получения дополнительной информации см. Join.
Использование Join
Явный префикс Join в языке скриптов в программе Qlik Sense выполняет полное объединение двух таблиц. В результате получается одна таблица. Выполнение таких объединений часто может приводить к получению очень больших таблиц.
Выполните следующие действия.
- Откройте приложение Учебное пособие по написанию скриптов продвинутого уровня.
- Добавьте новый раздел скрипта в Редакторе загрузки данных.
- Вызовите раздел Transactions.
-
Под элементом DataFiles в меню справа щелкните Выбрать данные.
- Загрузите, а затем выберите Transactions.csv.
- В окне Выбрать данные из щелкните команду Вставить скрипт.
- Загрузите, а затем выберите Salesman.xlsx.
- В окне Выбрать данные из щелкните команду Вставить скрипт.
- Щелкните команду Загрузить данные.
- Откройте раздел Просмотр модели данных. Модель данных выглядит так:
Скрипт должен выглядеть следующим образом:
Однако результат, полученный в результате разделения таблиц Transactions и Salesman, может быть нежелательным. Возможно, лучше объединить две таблицы.
Выполните следующие действия.
- Чтобы задать имя объединенной таблицы, добавьте следующую строку над первым оператором LOAD:
- Чтобы объединить таблицы Transactions и Salesman, добавьте следующую строку над вторым оператором LOAD:
- Щелкните команду Загрузить данные.
- Откройте раздел Просмотр модели данных. Модель данных выглядит так:
Transactions:
Join(Transactions)
Скрипт должен выглядеть следующим образом:
Transactions:
LOAD
"Transaction ID",
"Salesman ID",
Product,
"Serial No",
"ID Customer",
"List Price",
"Gross Margin"
FROM [lib://DataFiles/Transactions.csv]
(txt, codepage is 28591, embedded labels, delimiter is ',', msq);
Join(Transactions)
LOAD
"Salesman ID",
Salesman,
"Distributor ID"
FROM [lib://DataFiles/Salesman.xlsx]
(ooxml, embedded labels, table is Salesman);
Все поля таблиц Transactions и Salesman теперь будут объединены в одну таблицу Transactions.
Keep
Одной из основных функций программы Qlik Sense является способность к связыванию таблиц вместо их объединения, что позволяет сократить использование памяти, повысить скорость обработки и гибкость. Функция Keep предназначена для сокращения числа случаев необходимого использования явных объединений.
Префикс Keep между двумя операторами LOAD или SELECT приводит к уменьшению одной или обеих таблиц до пересечения их данных перед сохранением таблиц в программе Qlik Sense. Перед префиксом Keep следует задать одно из ключевых слов: Inner, Left или Right. Выборка записей из таблицы осуществляется так же, как и при соответствующем объединении. Однако две таблицы не объединяются и сохраняются в программе Qlik Sense в виде двух отдельных именованных таблиц.
Для получения дополнительной информации см. Keep.
Inner
Перед префиксами Join и Keep в скрипте загрузки данных можно использовать префикс Inner.
При использовании этого префикса перед префиксом Join объединение двух таблиц будет внутренним. Полученная таблица содержит только сочетания из двух таблиц, включающие полный набор данных с обеих сторон.
Если этот префикс используется перед Keep, он указывает, что две таблицы следует уменьшить до области взаимного пересечения, прежде чем они смогут быть сохранены в программе Qlik Sense.
Пример:
В этих примерах используются исходные таблицы Table1 и Table2.
Обратите внимание, что это просто примеры. Здесь нет сопутствующих упражнений, которые следует выполнить в Qlik Sense.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
Inner Join
Сначала выполняется Inner Join в отношении таблиц, в результате чего образуется таблица VTable, содержащая только одну строку, только одну запись, существующую в обеих таблицах, с данными из обеих таблиц.
A | B | C |
---|---|---|
1 | aa | xx |
Inner Keep
Если вместо этого выполнить Inner Keep, таблиц все равно будет две. Две таблицы связаны посредством общего поля A.
A | B |
---|---|
1 | aa |
A | C |
---|---|
1 | xx |
Для получения дополнительной информации см. Inner.
Left
Перед префиксами Join и Keep в скрипте загрузки данных можно использовать префикс left.
При использовании этого префикса перед префиксом Join объединение двух таблиц будет левосторонним. Полученная таблица содержит только сочетания из двух таблиц, включающие полный набор данных из первой таблицы.
Если этот префикс используется перед префиксом Keep, он указывает, что вторую таблицу следует уменьшить до области взаимного пересечения с первой таблицей перед сохранением в программе Qlik Sense.
Пример:
В этих примерах используются исходные таблицы Table1 и Table2.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
Сначала выполняется Left Join в отношении таблиц, в результате чего образуется таблица VTable, содержащая все строки из таблицы Table1, совмещенные с полями из совпадающих строк в таблице Table2.
A | B | C |
---|---|---|
1 | aa | xx |
2 | cc | - |
3 | ee | - |
Если вместо этого выполнить Left Keep, таблиц все равно будет две. Две таблицы связаны посредством общего поля A.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
Для получения дополнительной информации см. Left.
Right
Перед префиксами Join и Keep в языке скриптов Qlik Sense можно использовать префикс right.
При использовании этого префикса перед префиксом Join объединение двух таблиц будет правосторонним. Полученная таблица содержит только сочетания из двух таблиц, включающие полный набор данных из второй таблицы.
Если этот префикс используется перед префиксом Keep, он указывает, что первую таблицу следует уменьшить до области взаимного пересечения со второй таблицей перед сохранением в программе Qlik Sense.
Пример:
В этих примерах используются исходные таблицы Table1 и Table2.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
Сначала выполняется Right Join в отношении таблиц, в результате чего образуется таблица VTable, содержащая все строки из таблицы Table2, совмещенные с полями из совпадающих строк в таблице Table1.
A | B | C |
---|---|---|
1 | aa | xx |
4 | - | yy |
Если вместо этого выполнить Right Keep, таблиц все равно будет две. Две таблицы связаны посредством общего поля A.
A | B |
---|---|
1 | aa |
A | C |
---|---|
1 | xx |
4 | yy |
Для получения дополнительной информации см. Right.