Содержание урока по Qlik Sense
Извлечение, загрузка и преобразование (ELT) — это процесс, с помощью которого данные извлекаются из исходной системы, загружаются в хранилище данных, а затем преобразовываются.
E, T, L:
ETL требует управления необработанными данными, включая извлечение необходимой информации и проведение правильных преобразований, чтобы в конечном итоге удовлетворить потребности бизнеса. Каждый этап – извлечение, преобразование и загрузка – требует взаимодействия инженеров и разработчиков данных, а также работы с ограничениями емкости традиционных хранилищ данных. Используя ETL, аналитики и другие пользователи BI привыкли ждать , поскольку простой доступ к информации недоступен до тех пор, пока не будет завершен весь процесс ETL.
Извлечение, загрузка и преобразование (ELT) — это процесс, с помощью которого данные извлекаются из исходной системы, загружаются в хранилище данных, а затем преобразовываются.
Qlik Sense имеет собственный формат хранения данных. Данные из разных систем выгружаются и сохраняются в QVD-формате. Этот формат файлов очень быстро загружается в Qlik Sense для дальнейшей обработки. Это как dump базы данных. Выгрузка и загрузка миллионов строк (без доп.условий) занимает секунды.
Иногда можно построить серьезные коммерческие проекты только на QVD файлах.
Эти файлы можно использовать в разных приложениях, за них могут отвечать разные сотрудники и сервисы. Скорость загрузки из таких файлов в десять раз быстрее чем из обычных источников данных. Это позволяет экономить на базе данных и обмениваться информацией между различными приложениями Qlik.
Пример организации ETL-процесса на примере QlikView (в Qlik Sense аналогичные процессы):
На завершающем этапе ETL-процесса данные загружаются в приложение (создается модель данных). Есть различные схемы моделей данных, целевая схема – звезда:
Пример модели данных:
TSEEQ – это структурированный движок ETL для Qlik, может быть полезен для вашего проекта. TSEEQ – это механизм ETL, а не процесс; TSEEQ можно использовать для оптимизации любого ETL-процесса, который вы используете в своей реализации Qlik Sense.
Хранилище данных Qlik Sense предпочтительно должно соответствовать корпоративной архитектуре данных со стандартными фактами и измерениями, которые могут совместно использоваться в разных моделях. Несмотря на то, что qvd-файлы используются в Qlik Sense, необходимо соблюдать существующие определения данных и управление ими. Любые новые факты, измерения и меры, разработанные с помощью Qlik Sense, должны дополнять архитектуру компании.
1. Создание Bus Matrix хранилища данных:
2. Создание Bus Matrix:
Для загрузки данных из разных источников совершенно необязательно знать синтаксис и команды Qlik Sense. На первоначальном этапе работы достаточно просто пользоваться мастером генерации скрипта.
Для этого в приложении заходим в редактор скрипта:
Справа нажимаем “Создать новое подключение”:
У Qlik Sense есть различные коннекторы к различным источникам данных. В рамках этого раздела мы создадим только коннектор к директории на диске (где лежат QVD-файлы):
Указываем директорию и название соединения:
Далее в соединении нажимаем на кнопку “Выбрать данные”:
Qlik Sense предложит список файлов для выбора из директории (можно провалиться в поддиректорию/подпапку):
В окне предпросмотра выбираете колонки, которые необходимо загрузить из файла (либо генерируете скрипт и в скрипте удаляете ненужные колонки):
Мы получили сгенерированный скрипт загрузки данных из QVD-файла. Такая цепочка действий выполняется практически для всех источников данных (включая базы данных). Единственное исключение, наверное, это получение данных из API. Но это уже продвинутая разработка, на первом этапе это не потребуется.
Для загрузки данных из QVD файлов используется структура:
Контрагенты:
LOAD
"Контрагент ID",
Сегмент,
Контрагент,
Страна,
Город,
Регион
FROM [lib://Источник данных/Контрагенты.qvd] (qvd); Для выгрузки данных из базы данных необходимо создать подключение к БД и сформировать скрипт загрузки. Скрипт загрузки может быть составлен несколькими вариантами. Пока что рассмотрим три варианта без подробного разбора.
Вариант 1:
LIB CONNECT TO 'MySQL_Enterprise_Edition';
[mysql_table_name]:
SELECT `option_id`,
`option_name`,
`option_value`,
autoload
FROM `database_name`.`mysql_table_name`; Вариант 2:
LIB CONNECT TO 'MySQL_Enterprise_Edition';
[mysql_table_name]:
LOAD option_id,
option_name,
option_value,
autoload;
SELECT `option_id`,
`option_name`,
`option_value`,
autoload
FROM `database_name`.`mysql_table_name`; Вариант 3:
LIB CONNECT TO 'MySQL_Enterprise_Edition';
[mysql_table_name]:
SQL
SELECT `option_id`,
`option_name`,
`option_value`,
autoload
FROM `database_name`.`mysql_table_name`; [Планирование ден.потоков]:
LOAD
"Доходы и расходы",
"Варианты расходов",
"1 месяц",
"2 месяц",
"3 месяц",
"4 месяц",
"5 месяц",
"6 месяц",
"7 месяц",
"8 месяц",
"9 месяц",
"10 месяц",
"11 месяц",
"12 месяц"
FROM [lib://XLSX_DataSource/1_Analiz_denezhnykh_potokov.xlsx]
(ooxml, embedded labels, header is 2 lines, table is [Планирование ден.потоков]); [Продажи]:
LOAD
SKU,
"Group",
"Week",
Store_id,
"Sales qty, pcs.",
"Sales, RUB",
"Sales in the cost, RUB",
"Promo index",
Availability
FROM [lib://CSV_Source/Test.csv]
(txt, codepage is 1251, embedded labels, delimiter is ';', msq); Иногда в ходе загрузки данных требуется создать таблицу со значениями в скрипте. Например, для фильтров. Не всегда хочется генерить дополнительный файл XLSX, проще и быстрее сделать все в скрипте. Для этого есть конструкция LOAD * Inline:
[Таблица хранимая в скрипте]:
LOAD * Inline [
Поле 1, Поле 2, Поле 3
Значение 1.1, Значение 2.1, Значение 3.1
Значение 1.2, Значение 2.2, Значение 3.2
Значение 1.3, Значение 2.3, Значение 3.3
]; STORE [Регистр Продаж] into 'lib://ExtractData/1С_Предприятие/РегистрПродаж.qvd' (qvd);
…
Продолжение следует
В этом разделе я опишу основные приемы обработки данных в скрипте Qlik Sense. Конечно же в одной статье нереально вместить и описать все случаи и все подходы по обработке данных. Основная цель этого раздела – заложить базис синтаксиса, основных конструкций по обработки данных в скрипте Qlik Sense.
todo
todo
todo
todo
todo
todo
todo
todo
todo
todo
todo
todo
todo
todo
…
Продолжение следует
…
Продолжение следует
В этом разделе будут описаны некие принципы для организации ETL-процесса с помощью Qlik Sense (без использования других инструментов обработки данных).
1. В операциях Concatenate, Join не используйте Distinct. Если таблица формируется с помощью последовательных операций объединения данных в одну таблицу с помощью оператора принудительного объединения таблиц Concatenate (сходных по набору столбцов, но имеющих несколько разных колонок), операторов присоединения данных Join (Left, Right, Inner) – не используйте Distinct – иначе Вы потеряете одинаковые строки (это не дубликаты, просто в 1 документе могут быть указан один и тот же товар двумя строками, если в системе учета это не запрещено). Причем не важно, на каком шаге был применен Distinct (в самом начале обработки данных или в конце).
2. Используйте меппинги ApplyMap вместо Join. При большом объеме данных это ускоряет загрузку данных.
3. Одинаковые части формул рекомендуется выносить в переменные, чтобы упростить дальнейшую поддержку кода приложения. Переменные можно вести как в Excel, так и в Variable Manager. Также можно использовать различные расширения или extension (например, Qlik Sense Variable Editor Mashup).
4. Ключи оборачивать в TEXT(), даже если это hash-ключ из 1С Предприятие 8.3. Qlik имеет неприятную штуку с изменением ключей (встречается редко, но проскакивает). В обычных ключах очень часто клик может преобразовать запись “130E0” в “13E1”. Т.е. знак “E” он воспринимает как разряд.
5. Для генерации составных ключей вместо hash128() рекомендуется использовать autonumberhash128() – он быстрее. Генерация ключей с помощью функций Hash128 и Hash256 утяжеляет модель, что ведет к увеличению использования RAM.
6. Preceding Load: Для того, чтобы сократить объем кода и оптимизировать скорость загрузки данных рекомендую использовать Preceding Load (Предшествующий оператор LOAD). Preceding Load можно использовать и при загрузке из файлов, из баз данных, из уже загруженных таблиц с помощью оператора Resident. Количество “этажей” Preceding Load не ограничивается (используйте в меру разумного).
SimplePreceding:
LOAD
*,
[To Date] - [From Data] as Duration
;
LOAD
Date(Date#(FromDate, 'YYYYMMDD'), 'DD MMM YYYY') as [From Date],
Date(Date#(ToDate, 'YYYYMMDD'), 'DD MMM YYYY') as [To Date],
FROM [lib://SourceData/Durations.xlsx] (ooxml, embedded labels, table is Data); 7. Нумерация строк в большой таблице фактов. Если нужно пронумеровать таблицу фактов, которая грузится из нескольких источников, то для начала загружаем все факты в 1 таблицу Qlik Sense, затем перекладываем таблицу саму себя (Load * Resident) с функцией RecNo().
RowNo() для больших таблиц не нужно использовать, т.к. она очень медленно работает.
8. Не создавайте меппинги напрямую из больших QVD файлов. Сначала грузим QVD в таблицу, затем перекладываем с помощью Resident данные в Mapping таблицу. Загрузка данных в Mapping таблицу отключает оптимизированную загрузку данных.
9. Избегайте сложных динамически генерируемых полей, таблиц, кусков кода. Любая динамика усложняет поддержку решения. Особенно это критично, когда один разработчик уходит из команды, код приходится изучать с нуля. Если другого выхода нет, кроме как использование динамики, то делайте генерацию кода, полей и т.п. Если есть простой способ написания кода – используйте его. Унификация и простота – залог облегчения поддержки инфраструктуры, etl-процесса. Не гонитесь за интересными решениями, прокачкой ИТ-навыков – это вредит ИТ-решениям компании (но разработчикам конечно это на пользу). Плюс повышаются косвенные затраты компании, в какой-то момент потребуется вместо 1 разработчика на поддержку использовать 2х разработчиков.
…
Продолжение следует
Введение Иногда при создании расширения Qlik Sense вам необходимо получить доступ к системным данным. Это…
// Команда, которая будет запускаться в Powershell на сервере LET vPowershellCommand = 'Get-ChildItem -Path ''lib://Data/QVDs''…
Как построить диаграмму Control Chart со скользящим средним в Qlik Sense? В этой статье будет…
Как сделать чередование цвета в строках прямой таблицы Qlik Sense? Если порядок строк неважен, то…
Обзор В этой серии руководств мы собираемся создать расширение Qlik Sense с использованием Nebula.js и…
Создание расширенного расширения визуализации с использованием Qlik Nebula.js и D3.js В моем последнем посте я рассказал…
This website uses cookies.
View Comments
Эх, оглавление есть, а содержание ещё не дописал автор: Transform Level: Описание функций, приемов эффективного преобразования данных