Конечно, каждый проект QlikView, по своему, уникален. Но прежде чем работать с приложением QlikView, каждый проект проходит подготовительный этап – создания ассоциативной модели данных для последующего построения визуализации. И здесь большая работа уделяется разработке скрипта ETL (Extract, Transform и Load, извлечение/трансформация и загрузка). Сегодня мы поделимся советами по работе с ETL, а также файлом для скачивания (в конце статьи) от нашего испанского коллеги, Daniel Garcia Mejia.

Скрипт ETL – основа для хорошего приложения QlikView, поэтому вот несколько фишек:

  1. Название полей и таблиц
    Это даже не «фишка», а правило хорошего тона: унифицируйте название полей и таблиц, чтобы упростить процесс разработки приложений.
    В нашем примере группируем данные по: [Тип + [ОБЪЕМ] + Подгруппа]. Для таблицы «Продукты (Productos)»:
1

2

3

4

5

6

7

8

9

Productos:

LOAD

idprod as [ID Producto],

COLUMNA2 as [Nombre Producto],

descrp as [Descripción Producto],

fabricante as [Nombre Fabricante],

Orig as [Origen Producto]

FROM Datos.xlsx

(ooxml, embedded labels, table is Productos);

Как вы видите из рисунка ниже, соответствующие названия полей и таблиц помогают организовать модель данных:

word-image

  1. Left Join VS Mapping Load

Когда вы объединяете две таблицы, то вы можете выбрать режим работы: Left Join или Mapping Load / Apply Map. Если вы используете Left Join, у вас более одного поля в таблице, при этом не важен регистр. Mapping Load / Apply Map используется, когда вы хотите присоединить поле (хотя есть возможность и группировки из нескольких полей).
Если рассматривать работу функций с точки зрения производительности, то Mapping Load / Apply Map более предпочтительно.
В нашем случае таблица «Clientes» для мэппинга таблицы «Importes».

1

2

3

4

5

6

mNombreCliente:

MAPPING LOAD DISTINCT

idcli as [ID Cliente],

nombre as [Nombre Cliente]

FROM Datos.xlsx

(ooxml, embedded labels, table is Clientes);

  1. Группировка несколько полей в одно через Mapping Load

В нашем случае с помощью Mapping Load объединяем ячейки через разделитель «:

1

2

3

4

5

6

mNombreCliente:

MAPPING LOAD DISTINCT

idcli as [ID Cliente],

nombre&#&vip as [Nombre VIP Cliente]

FROM Datos.xlsx

(ooxml, embedded labels, table is Clientes);

Apply Map используется в таблицах, когда вы хотите разделить поля. В нашем случае, это таблица «Importes»:

1

2

3

4

5

6

7

8

9

10

11

Importes_TMP:

LOAD

id as [ID Importe],

idcli as [ID Cliente],

ApplyMap(mNombreCliente,idcli,Sin Valor) as [Nombre-VIP Cliente],

idmayor as [ID Mayorista],

imp_eur as [Importe EUR],

idprod as [ID Producto],

uni as [Unidades]

FROM Datos.xlsx

(ooxml, embedded labels, table is Importes);

Поля ‘Nombre’ и ‘VIP’ имеют общее поле:

1

2

3

4

5

6

Importes:

LOAD

*,

Subfield([Nombre-VIP Cliente],#,1) as [Nombre Cliente],

Subfield([Nombre-VIP Cliente],#,2) as [VIP Cliente]

RESIDENT Importes_TMP;

  1. Sum() VS Count()
    С точки зрения оптимизации не все функции работают одинаково, например функции Sum() и Count().
    Если вы хотите, например, получить индикатор с общим числом оптовиков, то вы можете использовать функцию Count() по полю «Nombre» или «ID», которая сравнит разные названия ID, чтобы получить KPI.
    Будет добавлено поле всего оптовиков «Total Mayorista» таблицы оптовиков «Mayorista»:
1

2

3

4

5

6

7

8

Mayorista:

LOAD

idmayor as [ID Mayorista],

nombre as [Nombre Mayorista],

u7bi2c as [Ubicación Mayorista],

1 as [Total Mayorista]

FROM Datos.xlsx

(ooxml, embedded labels, table is Mayoristas);

Функция Sum() выполняет ту же операцию, что Count(), но с меньшими затратами времени, что лучше для работы приложения:
word-image

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

2

3

4

5

6

Metricas:

LOAD

Nombre,

Formula

FROM Metricas.xlsx

(ooxml, embedded labels, table is Metricas);

Работа с переменными из Excel реализована через такой цикл:

1

2

3

4

5

Let vNumberOfRows = NoOfRows(Metricas);

For v_i = 0 to (vNumberOfRows – 1)

Let vVariable_Name = Peek(Nombre,v_i,Nombre);

Let [$(vVariable_Name)] = Peek(Formula,v_i,Formula);

Next

Централизация переменных в файле Excel облегчает разработку приложения QlikView.

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

Скачайте файл «5 TipsTrick ETL QlikView»

Хороших вам разработок!