Неофициальный форум пользователей Qlik Sense & Qlikview

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: Иван от 04 сентября 2015, 12:06:22

Название: Использование в LOAD ... Resident нескольких таблиц (Qlikview & Qlik Sense)
Отправлено: Иван от 04 сентября 2015, 12:06:22
Коллеги, привет!

Пытаюсь реализовать участок ETL-процесса с PL/SQL средствами QlikView. И что-то застрял вот на чем (привожу ограниченный абстрактный пример):

Tbl1:
LOAD * Inline[
field1, field2
Ivan, 29
Victor, 32
Marina, 23
Anna, 26
];

Tbl2:
LOAD * Inline[
field3, field4
Ivan, m
Marina, w
];

NoConcatenate
Tbl3:
LOAD Tbl1.field1, Tbl1.field2,
Tbl2.field3, Tbl2.field4
Resident Tbl1, Tbl2
Where Tbl1.field1=Tbl2.field3 AND Tbl2.field4='m';


Понятно, что можно организовать в текущем абстрактном примере действие с LEFT JOIN, но в случае, если условий WHERE много, переделать огромный код с PLSQL в QlikView не получится так просто (можно просидеть несколько часов или весь день только над одним запросом).

Подскажите, как организовывать такие запросы в QlikView. Не хочется трогать логику исходного ETL-процесса, т.к. трудозатраты по переносу кода возрастают в несколько раз.

С уважением,
Иван
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: kvv от 04 сентября 2015, 12:40:57
Привет.
Думаю, можно так:
Tbl1:
LOAD * Inline [
field1, field2
Ivan, 29
Victor, 32
Marina, 23
Anna, 26
];

left join (Tbl1)
//Tbl2:
LOAD * Inline [
[b]field1[/b], field4
Ivan, m
Marina, w
];



Логика QlikView такова, что поля с одинаковыми названиями соединяются.
Насчет PL/SQL - нужно писать такой SQL, чтобы "вытянутые" данные с БД удовлетворяли запросы разработчика.
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 12:46:09
kvv,

к сожалению, такой вариант очень трудоемок при наличии более чем 4х условий внутри WHERE.
Есть еще варианты без LEFT JOIN?

Расковыривать каждый запрос нереально долго. Либо нужно обозначить данную задачу как "недостаток QlikView" при разработке.

Конечно же всегда можно оставить:

Table:
SQL
//нужный код, в котором используется WHERE


Но меня интересуют именно приемы выборки из нескольких полей + условие WHERE в QlikView.

С уважением,
Иван
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: kvv от 04 сентября 2015, 01:00:39
Прошлый пример, был с условием только в QlikView.

Попробуй вот это:
Tbl1:
LOAD * Inline [
field1, field2
Ivan, 29
Victor, 32
Marina, 23
Anna, 26
];
store Tbl1 into .\Tbl1.qvd (qvd);
DROP Table Tbl1;

Tbl2:
LOAD * Inline [
field3, field4
Ivan, m
Marina, w
];
store Tbl2 into .\Tbl2.qvd (qvd);
DROP Table Tbl2;

Tbl1:
LOAD field1,
     field2
FROM .\Tbl1.qvd (qvd);

left join(Tbl1)
LOAD field3 as field1,
     field4
FROM .\Tbl2.qvd (qvd);

Tbl3:
LOAD field1 as field1_01,
     field2 as field2_01,
     field4 as field4_01
Resident Tbl1
where field4 = 'm';

DROP Table Tbl1;


В любом случае, нужно потратить некоторое время, чтобы достичь результата.
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: bibis от 04 сентября 2015, 01:18:07
Добрый день. Вы пытаетесь натянуть на qv  несвойственную ему логику.
Таблицы объединяются по названиям полей (считайте, что там  natural join) и никак иначе.
Т.е. вам не нужно писать : tbl1.field.1=tbl2.field2 , это будет подразумеваться, если вы переименуете оба поля   в  какой-нибудь key1_2.
Я действительно не вижу никакой сложности, ваш вариант мне кажется более вымученным.

В принципе доступ к ячейкам другой таблицы есть см. функцию peek . Но тут оно не нужно вообще совсем
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 01:35:36
У меня есть очень медленный ETL процесс на PL/SQL. Написан он не мной. При этом он достаточно громоздкий. Документации никакой нет. Я решил поразмыслить, а можно ли перенести ETL-процесс из PL/SQL на ETL-процесс в QlikView. Пока что получается, что QlikView предназначен больше на работу с уже подготовленными данными, нежели для обработки данных из реляционных баз данных.

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

Я прекрасно понимаю, что клик цепляет при join поля с одинаковыми названиями, прекрасно понимаю, как строить приложения. Но практическая задача по переносу ETL-процесса на QlikView получается крайне сложна для скрипта QlikView.

Можно сделать предварительный вывод: ETL-процесс на QlikView лучше не строить. Для QlikView лучше всего использовать готовые данные в виде отдельных интерфейсных таблиц.

Мой вывод корректен?  :)
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 01:44:59
Нашел на кликовском форуме следующий комментарий, с которым можно согласиться:
ЦитироватьI read this discussion with interest, but I have to mention that everybody here have their own idea what ETL tool is. I also started to learn QV some time ago, and from my previous experience with working with industrial ETL tools I can rank Qlikview by following domains:
1) Extraction - good
2) Transformation - poor
3) Loading - good

So why I think transformation is performing poor? First of all, ETL tool cannot do regular tasks much more better than SQL script or Excel, it allows to do such tasks that were almost impossible for others.

I don't know Qlikview very well, but features listed below must present in ETL tool:

1) Creating SCD type2 from regular table, which actually is a snapshot without any dates
2) Ability to write into several targets at one moment in parallel
3) visual interface for designing ETL proccesses (ability to view dataflows, not the plain script code)
So from my point today Qlikview cannot be named as ETL tool - it's just have some abilities for ETL.

Best regards, Andrei.
PS. I was impressioned by crosstable and hierarchy functionality in Qlikview, but this is not enough for ETL :)

Источник: https://community.qlik.com/thread/11850
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 03:08:06
Вообщем, поразмыслив, добавляю следующее замечание:
В QlikView можно сделать ETL-процесс, но основные преобразования данных должны быть реализованы посредством SQL-запроса, который отправляется на сервак и возвращает результат. Синтаксис такой:
TargetTable:
SQL
   SELECT <поля из разных таблиц>
   FROM <таблицы-источники, возможно даже подзапросы>
   WHERE <условия, необходимые для обращения к реляционным данным>;

STORE TargetTable INTO '$(PATH_QVD)TargetTable.qvd' (qvd);


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

ИТОГО: ETL-процесс на QlikView можно организовать только с применением SQL запросов.

Возможно у кого-то буду дополнения, буду рад услышать Вас. А пока что отказываюсь от переноса ETL-процесса с PL/SQL на QlikView.
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 03:17:59
Цитата: kvv от 04 сентября  2015, 12:40:57  
Насчет PL/SQL - нужно писать такой SQL, чтобы "вытянутые" данные с БД удовлетворяли запросы разработчика.

kvv, тут ты прав)
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: bibis от 04 сентября 2015, 03:20:05
Нет конечно.  QV  ничуть не хуже собирает данные
ваша проблема в том,что вы хотите сделать это так же,как в вашей СУБД.
Можно же построить etl  на QV, а потом сказать,что ваша система для etl не подходит, ибо скрипт qv нельзя на неё перенести без проблем ;D
Хотя каждому своё конечно и может я как-то не проникся вашими трудностями. С конкретикой было бы продуктивнее.
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 03:40:56
bibis, хорошо.
1) Приведите тогда пример для схемы, как можно организовать обработку данных в QlikView без использования JOIN. Схема:
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21K4G.png&hash=c5adcbf8996fcd1b0313d4392a77f148cbdeb0c8)

2) Как можно распарсить переменную строчного вида с разделителем "," и загрузить распарсенные значения в отдельную таблицу?

3) Как в скрипте QlikView сделать вложенный подзапрос?

4) Как в скрипте QlikView сделать пользовательскую функцию для использования в скрипте загрузки данных?

Я работал с промышленными ETL-системами, у них возможности намного больше чем у QlikView. Объективно говоря, это инструмент для простого ETL-процесса (имею ввиду QlikView). Я не говорю, что QlikView - плохая система, наоборот - это отличный инструмент. Только нужно правильно его использовать. И одним из критериев правильного использования является предварительно подготовленные данные.

ЗЫ: "сбор данных" != "трансформация данных"
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: admin от 04 сентября 2015, 03:49:28
Любой отлаженный процесс из одной системы в другую перенести непросто, тем более когда речь идет о преобразовании данных.
С конкретикой конечно было бы интереснее обсудить.

P.S. Опа, вот и конкретика  :)
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: kvv от 04 сентября 2015, 03:59:08
Иван.
Все 4 пункта так или иначе можно реализовать в QlikView.
1. Без join-ов нельзя работать и в SQL.
2. Ниже пример:
Data_101:
LOAD * Inline [
ID, NAME
01, Name_01
02, Name_02
03, Name_03
04, Name_04
05, Name_05
];

Cell:
LOAD Concat(ID, ', ') as ONE_CELL_01,
Concat(NAME, ', ') as ONE_CELL_02
Resident Data_101;

LET a1 = FieldValue('ONE_CELL_01', 1);
LET a2 = FieldValue('ONE_CELL_02', 1);

3. Можно "выкрутиться" через несколько таблиц или через циклы.
4. Скорее всего можно. Смотря что подразумевается под "Пользовательской функцией".


А, вообще, начали обсуждать разные вещи (крокодил зеленее или шире).
И SQL хорош и QlikView хорош. Просто в QlikView немного другая логика - ассоциативная.
Работаю в QlikView 6 месяцев и в целом он мне нравиться. Правда SQL есть SQL.
Некоторые вещи лучше реализовать через SQL, некоторые через QlikView.
Как-то так.
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 04:08:51
Ну ок, даю структуру запроса на PL/SQL, который сложно перебросить в QlikView (на мой взгляд):
  INSERT INTO TargetTable(
Field1, ..., FieldN
  )
  WITH
  A AS(
    <complex SQL>
  ),
  B AS(
    <complex SQL>
  ),
  C AS(
    <complex SQL>
  ),
  D as(
    <complex SQL>
  ),
  E AS(
    <complex SQL>
  )
 
  SELECT <many fields>
  FROM A, B, C, D, E
  WHERE 1=1
  AND A.FIELD(+)=D.FIELD
  AND B.FIELD=D.FIELD
  AND C.FIELD(+)=D.FIELD AND C.FIELD(+)=D.FIELD
  AND E.FIELD(+)=D.FIELD AND E.FIELD(+)=D.FIELD
  AND E.FIELD(+)=D.FIELD AND E.FIELD(+)=D.FIELD;


Совсем конкретный пример не могу приводить, т.к. все равно без источника данных ничего не понятно.

Предположим, что можно сначала в QlikView грузануть вспомогательные таблицы A, B, C, D, E. Тогда вопрос: что с ними дальше делать, чтобы получить TargetTable?
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 04:11:40
Цитата: kvv от 04 сентября  2015, 03:59:08  
Иван.
Все 4 пункта так или иначе можно реализовать в QlikView.
1. Без join-ов нельзя работать и в SQL.
2. Ниже пример:
Data_101:
LOAD * Inline [
ID, NAME
01, Name_01
02, Name_02
03, Name_03
04, Name_04
05, Name_05
];

Cell:
LOAD Concat(ID, ', ') as ONE_CELL_01,
Concat(NAME, ', ') as ONE_CELL_02
Resident Data_101;

LET a1 = FieldValue('ONE_CELL_01', 1);
LET a2 = FieldValue('ONE_CELL_02', 1);

3. Можно "выкрутиться" через несколько таблиц или через циклы.
4. Скорее всего можно. Смотря что подразумевается под "Пользовательской функцией".

А, вообще, начали обсуждать разные вещи (крокодил зеленее или шире).
И SQL хорош и QlikView хорош. Просто в QlikView немного другая логика - ассоциативная.
Работаю в QlikView 6 месяцев и в целом он мне нравиться. Правда SQL есть SQL.
Некоторые вещи лучше реализовать через SQL, некоторые через QlikView.
Как-то так.

Я про это и говорю, что QlikView - это "поглотитель" информации, но не "заготовитель". Я работал с SAS, там действительно очень охрененный инструментарий для ETL-разработчика. Но QlikView предназначен в первую очередь для визуализации информации, а не для обработки сырых данных.
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 04:17:13
Цитата: kvv от 04 сентября  2015, 03:59:08  
1. Без join-ов нельзя работать и в SQL.

kvv, то что Join нужны, я не спорю. А вот как без WHERE Работать? Извращаться с JOIN?
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: kvv от 04 сентября 2015, 04:17:47
Любой BI-инструмент "Поглотитель информации": SAP BO BI, IBM Cognos, QlikView и т.д.
Более того, в SAP BO BI, IBM Cognos нет таких возможностей по преобразованию данных как в QlikView.
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 04:21:49
Цитата: kvv от 04 сентября  2015, 04:17:47  
Любой BI-инструмент "Поглотитель информации": SAP BO BI, IBM Cognos, QlikView и т.д.
Более того, в SAP BO BI, IBM Cognos нет таких возможностей по преобразованию данных как в QlikView.

Других инструментов не видел, к сожалению. Но увидел недостаточную гибкость инструментария QlikView. Как минимум при сложных проектах необходимо задуматься о полноценном ETL-инструментарии. Или хотя бы в PL/SQL. Хотя на больших объемах данных, как показала практика, для PL/SQL нужны "прямые руки".

Стоит, правда, оговориться, что все зависит от источников данных. Если источники не требуют массового использования условий WHERE, а достаточно JOIN, то наверное, QlikView будет более чем предостаточно. Но в моем случае - ERP система явно требует большего  :(
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 05:12:06
Рылся, рылся и наткнулся на QlikView Expressor (Data confidence and rapid time to value with a metadata intelligence solution for QlikView):
http://global.qlik.com/ru/explore/products/qlikview/expressor (http://global.qlik.com/ru/explore/products/qlikview/expressor)

Кто-нибудь с этим продуктом работал? Может он решает проблему сложных преобразований SQL запросов для QlikView? Написано на одном из форумов, что этот Expressor может конкурировать с Informatica. Правда, что ли?

Пока что качаю - как попробую - расскажу)
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 04 сентября 2015, 05:36:05
В качестве вводной об инструменте QlikView Expressor Desktop 5 картинок:
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21KkN.png&hash=469efe1425893b747e245235e6d34584cae44411)

(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21KkP.png&hash=80752e977a9d49853f5c65ed4d39e15e72542635)

(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21KkQ.png&hash=ba195eb4616c5e450589cc2d1540c23bb0035038)

(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21KkR.png&hash=726883a7bbaa9990c996957e6332a34e67913f7e)

(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21KmX.png&hash=09216ddb13032950caea36c3d7ead86f92b3e7d4)

И в дополнение, видос: ! No longer available (http://www.youtube.com/watch?v=Nikj2aqLolI#)
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: admin от 05 сентября 2015, 07:54:56
 Справка по QlikView Expressor Version 3.12 (http://eu-b.demo.qlik.com/download/)
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 07 сентября 2015, 11:44:28
Вообщем, в QlikView вместо вложенных Where In () подзапросов, необходимо использовать функции Exists и Lookup.

Конечный вариант рабочего примера:
Tbl1:
LOAD * INLINE [
    field1, field2
    Ivan, 29
    Victor, 32
    Marina, 23
    Anna, 26
];

NoConcatenate
Tbl2:
LOAD * INLINE [
    field3, field4
    Ivan, m
    Marina, w
];

NoConcatenate
Tbl3:
LOAD field1, field2,
lookup('field3','field3',field1,'Tbl2') as field3, //эквивалентно Resident Tbl1, Tbl2
lookup('field4','field3',field1,'Tbl2') as field4  //эквивалентно Resident Tbl1, Tbl2
Resident Tbl1
Where Exists(field3,field1) and lookup('field4','field3',field1,'Tbl2')='m' //эквивалентно Tbl1.field1=Tbl2.field3
;

DROP Tables Tbl1, Tbl2;


Поля field1 и field3 одинаковы (понятно, что два поля в таблице не нужны, но для обучающего примера, думаю, пусть будет).

Резюме: чтобы эффективно строить ETL процесс в QlikView, необходимо знать помимо SQL все внутренние функции QlikView, т.к. многие подходы SQL не применимы в QlikView. Но при этом, несмотря на такие обходы, сложность ETL-процесса возрастает по сравнению с другими стандартными инструментами построения ETL-процесса (к примеру, такие как SAS или же PL/SQL). Но, возможно, из-за технологии in-memory скорость обработки данных будет выше (нужно тестировать, чтобы окончательно это подтвердить). Это уже дополнительная задачка =)

Изначальный запрос, который хотелось реализовать (нерабочий вариант):
Tbl1:
LOAD * Inline[
field1, field2
Ivan, 29
Victor, 32
Marina, 23
Anna, 26
];

Tbl2:
LOAD * Inline[
field3, field4
Ivan, m
Marina, w
];

NoConcatenate
Tbl3:
LOAD Tbl1.field1, Tbl1.field2,
Tbl2.field3, Tbl2.field4
Resident Tbl1, Tbl2
Where Tbl1.field1=Tbl2.field3 AND Tbl2.field4='m';
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 07 сентября 2015, 12:18:51
По поводу QlikView Expressor Desktop - инструмент хороший, но вряд ли облегчит разработку ETL-процесса, если только Вы не знаете этот инструмент. Возможности скрыты хорошие. Иллюстрация потока обработки данных:
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Qic.png&hash=1ea9732e30098d85ca974d8481e1946984eebbd1)
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 07 сентября 2015, 01:12:58
Дополнительная информация по загрузке данных и различных вспомогательных функциях тут:
https://community.qlik.com/docs/DOC-5698
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 09 сентября 2015, 08:17:54
Вообщем, на QlikView Expressor не нужно "смотреть" (скоро прекратит свое существование), лучше смотреть на http://www.alteryx.com/ (http://www.alteryx.com/)

Но судя по тому, что мой ETL-процесс изначально был построен на PL/SQL, это было сделано не случайно. Возникает желание посоветовать использовать тот же PL/SQL, но у него есть свои слабые стороны, а именно:
1) На большом объеме данных PL/SQL может медленно работать;
2) PL/SQL нагружает базу данных;

Также можно использовать бесплатные ETL-инструменты (сам не использовал, но думаю, что может пригодится кому-то):
http://www.predictiveanalyticstoday.com/top-free-extract-transform-load-etl-software/ (http://www.predictiveanalyticstoday.com/top-free-extract-transform-load-etl-software/)

Возможности PL/SQL для создания ETL-процесса:
1) Advanced PL/SQL and Oracle ETL - PowerPoint PPT Presentation (http://www.powershow.com/view1/d4e04-ZDc1Z/Advanced_PL_SQL_and_Oracle_ETL_powerpoint_ppt_presentation)
2) Advanced PL/SQL and Oracle ETL (https://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CBwQFjAAahUKEwiKrN3Pu-nHAhXKnnIKHTwQAt4&url=http%3A%2F%2Fdownload.oracle.com%2Fowsf_2003%2FOracleETLOpenWorld.doc&usg=AFQjCNF_DVolvdhYykfLce_LdY4aWiFQSQ&bvm=bv.102022582,d.bGQ)
3) Kimball R., Ross M. The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (http://www.twirpx.com/file/1416152/)

ВНИМАНИЕ: Остерегайтесь вот таких маркетинговых статей про QlikView, которые сразу же отбрасывают и традиционные ETL-процессы и хранилища данных QlikView: консолидация разрозненных источников данных. (https://lmra.wordpress.com/2010/08/24/qlikview-%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D0%B8%D0%B4%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%B0%D0%B7%D1%80%D0%BE%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D1%85-%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8/) Если у Вас не будет сложных преобразований данных, то можете использовать с легкостью QlikView. В других случаях, обязательно, проведите перед проектом этап "Оценки необходимости дополнительного ETL-инструментария".
Название: Re: Использование в LOAD ... Resident нескольких таблиц
Отправлено: Иван от 10 сентября 2015, 10:31:23
Базовые элементы Alterix:
1. Alterix Designer - In Out
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21VtY.png&hash=599ee78ee52238c8ccf48f5404b338a17deb6fd9)

2. Alterix Designer - Preparation
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vu1.png&hash=929047b4f93ee178c5cb8793c80f2099bb1fbb50)

3. Alterix Designer - Join
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21VtZ.png&hash=6cdb9f39d3f31f3722cdb78b251f2248e35b337b)

4. Alterix Designer - Transform
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vu2.png&hash=ad34e63180332c5e8a7bf6d79a1733d9c4430381)


Дополнительные вкладки с элементами:
5. Alterix Designer - Address
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vun.png&hash=e733e0ac7a192f95dee7c265c1a98aa4282b4391)

6. Alterix Designer - Behavior Analysis
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vuo.png&hash=6637496b2335e4eaec0ab66821b562b6f9d99931)

7. Alterix Designer - Calgary
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vup.png&hash=242a36e8a709d547f9a33c1a68c9da5b67e21198)

8. Alterix Designer - Connectors
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vuq.png&hash=16db590debe020abd7e2434a5ee2925a5dfbdc6c)

9. Alterix Designer - Data Investigation
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vur.png&hash=c4d84bede2cfbdaa2950af274f72e4a68b0fb492)

10. Alterix Designer - Demographic Analysis
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vus.png&hash=bc2bee905a946b09c11e8d18bc9d88de889b281f)

11. Alterix Designer - Developer
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vut.png&hash=f2e86ae996cc910a25a86706db09fde5109b81f4)

12. Alterix Designer - Documentation
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vuu.png&hash=7cfd1c037691019c53f4ca91312f267191adae77)

13. Alterix Designer - In-Database
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vuv.png&hash=8300472e48226488456c071b94424706673ff4da)

14. Alterix Designer - Interface
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vuw.png&hash=bd73e1248f20cc86ceb375a7aefb988ade2ef6c6)

15. Alterix Designer - Laboratory
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21Vuz.png&hash=c25ad64a0a255a407154b8e1ef2b9d0dbb009c1a)

16. Alterix Designer - Parse
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21VuA.png&hash=1920cee72d0c32b31a0b3833a09840f0c8f4b4f0)

17. Alterix Designer - Reporting
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21VuB.png&hash=9c8ffbd49b5dddaba887250dc21955b9a3c35ae6)

18. Alterix Designer - Spatial
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Ffunkyimg.com%2Fi%2F21VuC.png&hash=f50cb4d3cb9a715149c0f04d704b8060af2fc4de)