Загрузка данных с возможностью сопоставления таблиц – одна из важных вещей, которая есть в работе со скриптом в QlikView и Qlik Sense. Она чем-то похожа на работу c join, но отличается по нескольким параметрам, которые облегчают жизнь разработчика Qlik.

В основном такая загрузка позволяет сопоставить набор значений таблиц на основе ключевого поля.

О работе с такой загрузкой данных в скрипте и пойдет речь ниже.

Особенности работы 

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

НА ЗАМЕТКУ! Таблица сопоставления может быть использована для замены значений полей или имен полей во время выполнения скрипта. Функции сопоставления можно использовать только в скрипте загрузки.

! ApplyMap — функция скрипта: используется для сопоставления результата выражения с ранее загруженной таблицей сопоставления.

Синтаксис:  

ApplyMap(‘map_name’, expression [ , default_mapping ] )

Тип возвращаемого значения: dual

Аргументы:  

Аргумент Описание
map_name Имя таблицы сопоставления, созданной ранее с помощью операторов mapping load или mapping select. Имя таблицы должно быть заключено в одинарные прямые кавычки.
expression Выражение, результат которого должен быть сопоставлен.
default_mapping Если это значение задано, оно будет использовано как значение по умолчанию, если таблица сопоставления не содержит совпадающего значения для параметра expression. Если значение не задано, то значение параметра expression выводится как есть.

! Mapping: используется для создания таблицы сопоставления, которую можно использовать, например, для замены значений полей и имен полей в ходе выполнения скрипта. Mapping — эффективный способ замены значений полей во время выполнения скрипта, например замены значений «СШ», «С.Ш.» или «Америка» значением «США».

Синтаксис:  

Mapping( loadstatement | selectstatement )

Префикс mapping можно поставить перед оператором LOAD или SELECT. Таблицы сопоставления временно хранятся в памяти и автоматически удаляются после выполнения скрипта.

Работа функции ApplyMap состоит из двух частей: создания таблиц сопоставления, а затем применение сопоставления.

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

После того как создана карта сопоставления, она хранится в памяти до окончания работы скрипта. Ее можно использовать повторно в работе скрипта.

Синтаксис для функции ApplyMap

Для создания карты соответствия нужно использовать префикс “Mapping”, чтобы обозначить, что это таблица соответствия.

Mapping Load - Syntax Example

Помните, что это временная таблица. Убедитесь, что первое поле – ключевое, а второе поле со значениями соответствий.

После того как у нас появилась таблица сопоставления, прежде, чем мы применим ее, она может быть в любой части скрипта. Обычно я помещаю ее на той же вкладке скрипта, над таблицей, к которой она будет применяться. В случае, если я буду применять эту карту несколько раз, я помещаю ее в самом начале скрипта загрузки.

Для выполнения скрипта мы используем функцию ApplyMap, где первый параметр – название карты (в одинарных кавычках). Второй параметр – ключевое поле сопоставления. Третий параметр – опциональный, определяет значение, если совпадений не найдено.

ApplyMap Syntax Example

Карта может применяться несколько раз внутри скрипта.

Пример использования 1 – Избегаем дублей в факт-таблицах

В нашем примере, таблица в центре является основой для работы. Если нам нужно просуммировать продажи или посчитать строки или просчитать любые метрики, это что-то вроде вашей факт-таблицы. Нужно сохранять единство этой таблицы и не добавлять в нее дополнительных строк, чтобы избежать путаницы в вычислениях.

Но иногда бывают случае, что нам нужно объединить с ней другие данные. Что делать если в таблицах есть повторы? Вот пример ниже.

Use Case 01 Tables

Если использовать загрузку с таблицами сопоставления, то мы убедимся, что записи ID соответствуют получаемой таблице.

Mapping Load Syntax Example 1
Вот какая таблица у нас получилась в итоге:

Use Case 1 Desired Result

Пример использования 2 – Медленно изменяющиеся измерения – Только последние значения

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

Use Case 2 Desired Tables

Use Case 1 Syntax

Пример использования 3 – Более простое управление, чем с использованием IF

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

Nested If (Mapping Loads)

Лучше прокартировать эти значения, тем более, если количество цифр у вас возрастает. Чем больше значений, тем удобней использование мэппинга.

Use Case 3 Tables

Script Use Case 4

Пример использования 4 – Создайте карту и выполните сразу вычисления

Часто в скрипте мы выполняем вычисления вида – количество умножить на цену. А что, если нам нужно сделать вычисления по полям из разных таблиц?

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

В примере ниже нам нужно посчитать расширенные затраты на проданные товары. Они содержатся в отдельной таблице. Итак, выполним объединение данных и сразу выполним вычисления.

use-case-4-tables

mapping-load-script-05

Пример использования 5 – Использование карты несколько раз

Часто у нас есть таблица атрибутов, с текстовым описанием ID полей. Обычно в этой таблице три поля: для значения ID, одно для поля ID и тектсовое описание.

В этом случае мы можем загрузить эту таблицу как карту и использовать ее несколько раз как справочник, где это нужно по всему скрипту. Мы будем использовать два поля — ValueID и FieldID. Так, мы убеждаемся, что у нас нет повторов в данных.

Use Case 5 Tables

mapping-load-script-10

Пример использования 6 – Использование ссылочного поля по умолчанию, если не найдено совподений

Часто нам нужно показать, что у нулевых значений нет никаких описаний, тогда мы хотим именно прописать !Нет описания!, например.

Если нам нужно определить значение по умолчанию, когда у нас нет совпадений, то мы можем использовать третий опциональные параметр функции Apply.

Вот примерт такого использования функции ApplyMap:

Use Case 6 Tables

Mapping Load Scripting 6

Пример использования 7 – Карта отката, если нет совпадений

Рассмотрим пример, когда например, клиент говорит – сначала посмотрите совпадения в этой SQL-таблице, а там совпадений мы не нашли, поэтому используйте вот этот лист Excel, если и здесь нет совпадения, используйте «нет описания».

Решить такую задачу поможет функция сопоставления и использование третьего параметра.

В примере ниже, сначала мы обратимся к таблице SQL, а затем к листу Excel. Если и там не будет описания, то будет возвращено значение «нет описания».

Use Cas 7 Tables

Use Case 7 Script

Пример использования 8 – Использование карты с объединенными ключами

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

Тогда можно создать единое поле из нескольких ключей. Помните, что нужно создавать единый ключ.

Use Case 8 Tables

Mapping Load Script 8

Вот и все примеры работы с ApplyMap на сегодня! До новых встреч и удачных вам разработок Qlik!