Внедрение методов моделирования данных в Qlik Sense
Моделирование данных – это концептуальный процесс, который представляет связи между данными в соответствии с конкретными бизнес-требованиями. В этом процессе различные таблицы данных связываются в соответствии с бизнес-правилами чтобы удовлетворить бизнес-потребности пользователей.
В этой статье мы рассмотрим базовую концепцию моделирования данных, различные ее типы и узнаем, какой метод лучше всего подходит для информационных панелей Qlik Sense. Мы также узнаем о методах связывания данных друг с другом с помощью соединений и конкатенации.
Технические требования
В этой статье в качестве отправной точки мы используем ранее созданное приложение с загруженной моделью данных. Вы можете найти его в репозитории на GitHub. Вы также можете скачать начальную и финальную версию приложения из репозитория.
Скачав начальную версию программы, выполните следующие действия:
- Если вы используете Qlik Sense Desktop, поместите приложение в папку Qlik\Sense\Apps в личной папке Documents.
- Если вы используете Qlik Sense Cloud, загрузите приложение в свою личную рабочую область.
Преимущества моделирования данных
Моделирование данных помогает бизнесу во многих отношениях. Давайте посмотрим на преимущества моделирования данных:
- Высокая скорость извлечения: моделирование данных помогает получить необходимую информацию намного быстрее, чем ожидалось. Это связано с тем, что данные между различными таблицами связаны с помощью отношения.
- Обеспечивает простоту доступа к данным: моделирование данных упрощает процесс предоставления конечным пользователям требуемого доступа к данным. С помощью простого языка запросов данных вы можете легко получить необходимые данные.
- Помогает обрабатывать множественные отношения: различные наборы данных имеют различные виды отношений между другими данными. Например, могут быть отношения «один к одному», «один ко многим» или «многие ко многим». Моделирование данных помогает легко справляться с такими отношениями.
- Стабильность: моделирование данных обеспечивает стабильность системы.
Методы моделирования данных
Есть различные методы построения моделей данных, каждый из которых имеет свои преимущества и недостатки. Ниже представлены два широко используемых метода моделирования данных.
Моделирование отношений сущностей
В методе моделирования сущность-отношение (моделирование ER) для создания логической модели данных используются сущности и отношения. Этот метод лучше всего подходит для систем онлайн-обработки транзакций (OLTP). Сущность в этой модели относится к чему-либо или объекту в реальном мире, который имеет различимые характеристики. В то время как отношения в этой модели – это отношения между двумя или более объектами.
Есть три основные типы отношений:
- Один-к-одному: это отношение означает, что каждое значение из одной сущности имеет одно отношение со значением из другой сущности. Например, одного клиента обслуживает один торговый представитель:
- Один ко многим: это отношение означает, что каждое значение из одной сущности имеет несколько отношений со значениями из других сущностей. Например, один торговый представитель обслуживает нескольких клиентов:
- Многие-ко-многим: это отношение означает, что все значения обеих сущностей имеют несколько отношений друг с другом. Например, у одной книги может быть много авторов, а у каждого автора может быть несколько книг:
Размерное моделирование
Техника размерного моделирования использует факты и измерения для построения модели данных. Эта техника моделирования разработана Ральфом Кимбаллом. В отличие от ER-моделирования, которое использует нормализацию для построения модели, этот метод использует денормализацию данных для построения модели.
Факты в данном контексте – это таблицы, в которых хранятся самые подробные сведения о транзакциях. В основном они хранят метрики измерения производительности, которые являются результатом бизнес-процесса. Таблицы фактов огромны по размеру, потому что в них хранятся записи транзакций. Например, предположим, что данные о продажах собираются в розничном магазине. Таблица фактов для таких данных будет выглядеть следующим образом:
Таблица фактов имеет следующие характеристики:
- Содержит меры, которые в основном имеют числовой характер.
- Хранит внешний ключ, который относится к таблицам измерений.
- Хранит большое количество записей
- По большей части не содержит описательных данных
В таблице измерений хранятся описательные данные, описывающие, кто, что, что, когда, как, где и почему связано с транзакцией. В ней максимальное количество столбцов, но записей обычно меньше, чем в таблице фактов. Таблицы измерений также называются дополнениями к таблице фактов. Они хранят текстовые, а иногда и числовые значения. Например, ПИН-код имеет числовой характер, но это не измерение и поэтому хранится в таблице измерений.
В предыдущем примере с продажами, который мы обсуждали, клиент, продукт, время и продавец – в таблице измерений. На следующей диаграмме показан образец таблицы измерений:
Ниже приведены характеристики таблицы размеров:
- Хранятся описательные данные, описывающие атрибуты транзакции.
- Содержат много столбцов и меньше записей по сравнению с таблицей фактов.
- Содержат числовые данные, которые носят описательный характер.
Два типа методов размерного моделирования используются довольно широко:
- Схема "звезда": эта модель имеет одну таблицу фактов, которая связана с несколькими таблицами измерений. Название «звезда» дано ей потому, что, когда эта модель заполнена, она выглядит как звезда.
Преимущества данной модели следующие:
- Лучшая производительность запросов.
- Ее просто интерпретировать.
Здесь показан пример схемы «звезда»:
-
Схема «снежинка»: эта модель аналогична схеме «звезда», но в ней таблица измерений дополнительно нормализована. Преимущества схемы снежинка следующие:
- Обеспечивает лучшую целостность ссылок.
- Требуется меньше места, так как данные нормализованы.
На следующей диаграмме показан пример модели схемы снежинки:
Когда дело доходит до моделирования данных в Qlik Sense, лучшим вариантом является использование схемы «звезда» для повышения производительности. Qlik Sense работает очень хорошо, когда данные загружаются в денормализованной форме, поэтому схема «звезда» подходит для разработки Qlik Sense. На следующей диаграмме показано влияние различных моделей данных на производительность Qlik Sense:
Теперь, когда мы знаем, что такое моделирование данных и какой метод лучше всего подходит для моделирования данных в Qlik Sense, давайте рассмотрим некоторые другие основы обработки данных.
Соединение
Работая над построением модели данных, мы часто сталкиваемся с ситуацией, когда нам нужно добавить некоторые поля из одной таблицы в другую для выполнения каких-то вычислений. В таких ситуациях мы используем возможность объединения этих таблиц через общие поля у них.
Давайте разберемся, как мы можем использовать соединения между таблицами на простом примере. Предположим, вы хотите рассчитать отпускную цену продукта. Информация, которая у вас есть: SalesQty (Объем продаж) в таблице продаж и UnitPrice (Цена единицы) продукта находятся в таблице продуктов. Расчет для получения отпускной цены: UnitPrice * SalesQty. Теперь посмотрим, какой результат мы получим, применив к этим таблицам соединение:
Типы соединений
Пользователям доступны различные типы соединений, так что давайте рассмотрим те типы соединений, которые поддерживает Qlik Sense. Чтобы лучше понять каждый тип, рассмотрим следующие таблицы:
- Таблица заказов: в этой таблице хранятся данные, связанные с заказами:
Номер заказа |
Продукт |
Идентификатор заказа |
Значение заказа |
100 |
Фрукты |
1 |
100 |
101 |
Фрукты |
2 |
80 |
102 |
Фрукты |
3 |
120 |
103 |
Овощи |
6 |
200 |
- Таблица клиентов. В этой таблице хранятся сведения о клиенте, включая CustomerID (Идентификатор продукта) и Name (Имя):
Идентификатор продукта |
Имя |
1 |
Alex |
2 |
Linda |
3 |
Sam |
4 |
Michael |
5 |
Sara |
Соединение/внешнее соединение
Если вы хотите получить данные из обеих таблиц, вы используете ключевое слово Join . Когда вы используете только Join между двумя таблицами, это всегда будет полное внешнее соединение. Ключевое слово Outer не является обязательным. На следующей диаграмме показана диаграмма Венна для внешнего соединения:
Теперь давайте посмотрим, как можно создать скрипт этого условия соединения в Qlik Sense:
- Создайте новое приложение Qlik Sense. Дайте ему имя на свое усмотрение.
- Перейдите в редактор скриптов, создайте новую вкладку и переименуйте ее в «Outer Join» (Внешнее соединение), как показано на следующем скриншоте. Напишите скрипт, показанный на следующем скриншоте:
- После того, как вы напишете скрипт, нажмите «Load Data» (Загрузить данные), чтобы запустить скрипт и загрузить данные.
- После загрузки данных создайте новый лист и добавьте объект «Table» (Таблица), чтобы увидеть данные объединенной таблицы, как показано на следующем скриншоте:
На выходе из Outer Join (Внешнее соединение) мы получили пять полей, как показано на предыдущем скриншоте. Мы можем заметить, что последние две строки имеют нулевые значения для полей, которые взяты из таблицы заказов, где клиенты 4 и 5 отсутствуют.
Левое соединение
Если вы хотите извлечь все записи из левой таблицы и соответствующие записи из правой таблицы, вы используете ключевое слово Left Join (Левое соединение) для объединения этих двух таблиц. На следующей диаграмме показана диаграмма Венна для левого соединения:
Давайте посмотрим на скрипт для левого соединения:
- В предыдущем созданном приложении удалите вкладку Outer Join (Внешнее соединение).
- Создайте новую вкладку и переименуйте ее в Left Join (Левое соединение), как показано на следующем скриншоте. Напишите скрипт, показанный на следующем скриншоте:
- Когда скрипт будет написан, нажмите «Load Data» (Загрузить данные), чтобы запустить его и загрузить данные.
- По завершении скрипта создайте новый лист и добавьте объект «Table» (Таблица), чтобы увидеть данные объединенной таблицы, как показано на следующем скриншоте:
Правое соединение
Если вы хотите извлечь все записи из правой таблицы и соответствующие записи из левой таблицы, используйте ключевое слово Right join (правое соединение) для объединения этих двух таблиц. На следующей диаграмме показана диаграмма Венна для правого соединения:
Давайте посмотрим на скрипт правого соединения:
- В предыдущем созданном приложении закомментируйте существующий скрипт.
- Создайте новую вкладку и переименуйте ее в «Right Join» (Правое соединение), как показано на следующем скриншоте. Напишите скрипт, как показано на следующем скриншоте:
- Когда скрипт будет написан, нажмите «Load Data» (Загрузить данные), чтобы запустить его и загрузить данные.
- По завершении скрипта создайте новый лист и добавьте объект «Table» (Таблица), чтобы увидеть данные объединенной таблицы, как показано на следующем скриншоте:
Внутреннее соединение
Если вы хотите извлечь совпадающие записи из обеих таблиц, используйте ключевое слово Inner Join (Внутреннее соединение) для объединения этих двух таблиц. На следующей диаграмме показана диаграмма Венна для внутреннего соединения:
Давайте посмотрим на скрипт внутреннего соединения:
- В предыдущем созданном приложении закомментируйте существующий скрипт.
- Создайте новую вкладку и переименуйте ее в «Inner Join» (Внутреннее соединение), как показано на следующем скриншоте. Напишите скрипт, показанный на следующем скриншоте:
- Когда скрипт будет написан, нажмите «Load Data» (Загрузить данные), чтобы запустить скрипт и загрузить данные.
- По завершении скрипта создайте новый лист и добавьте объект «Table» (Таблица), чтобы увидеть данные объединенной таблицы, как показано на следующем скриншоте:
Конкатенация
Иногда при построении модели данных вы сталкиваетесь с ситуацией, когда вам, возможно, придется добавить одну таблицу под другой. В таких ситуациях вы можете использовать функцию конкатенации. Конкатенация, как следует из названия, помогает добавлять записи одной таблицы под другой. Конкатенация отличается от соединений. В отличие от соединений, конкатенация не объединяет совпадающие записи обеих таблиц в одну строку.
Автоматическая конкатенация
Если количество столбцов и их имена в двух таблицах одинаковы, Qlik Sense по умолчанию объединяет эти таблицы без какой-либо явной команды. Это называется автоматической конкатенацией. Например, вы можете получить информацию о клиенте из двух разных источников, но с одинаковыми названиями столбцов. В таком случае Qlik выполнит автоматическое соединение, как показано на следующем скриншоте:
На предыдущем скриншоте вы можете видеть, что в таблицах Source1 и Source2 есть два столбца с одинаковыми именами (обратите внимание, что имена в Qlik Sense учитывают регистр). Таким образом, они объединяются автоматически. Здесь следует отметить еще одно: в такой ситуации Qlik Sense игнорирует имя, присвоенное второй таблице, и сохраняет все данные под именем, присвоенным первой таблице.
Выходная таблица после объединения показана на следующем скриншоте:
Принудительная конкатенация
В некоторых случаях вы захотите объединить две таблицы независимо от количества столбцов и имен. В таком случае вы должны использовать ключевое слово Concatenate (Конкатенировать) между двумя операторами «Load» (Загрузка) для объединения этих двух таблиц. Это называется принудительной конкатенацией.
Например, если у вас есть данные о продажах и бюджете с одинаковой степенью детализации, вам следует использовать ключевое слово Concatenate (Конкатенировать) для принудительного объединения обеих таблиц, как показано на следующем скриншоте:
В выходной таблице после загрузки этого скрипта будут данные для общих столбцов, расположенные один под другим. Для столбцов, которые не совпадают, будут нулевые значения в тех столбцах таблицы, в которых их не было. Это показано в следующем выводе:
На предыдущем скриншоте видно, что «SalesAmount» имеет значение «NULL» для данных бюджета, а значение «Budget» равно «NULL» для данных о продажах.
NoConcatenate
В некоторых ситуациях, когда даже если столбцы и их имена в двух таблицах совпадают, вы можете обращаться с ними по-разному и можете не объединять их. Так, Qlik Sense предоставляет ключевое слово NoConcatenate, которое помогает предотвратить автоматическое соединение.
Давайте посмотрим, как написать скрипт для NoConcatenate:
Вы должны правильно обращаться с таблицами; в противном случае вывод NoConcatenate может создать синтетическую таблицу.
Фильтрация
В этом разделе мы узнаем, как фильтровать данные при загрузке в Qlik Sense. Как вы знаете, есть два способа загрузки данных в Qlik Sense: с помощью менеджера данных или редактора скриптов. Давайте посмотрим, как фильтровать данные с помощью каждого из этих параметров.
Фильтрация данных с помощью менеджера данных
Когда вы загружаете данные с помощью Data manager (Менеджера данных), вы получаете опцию под названием «Filters» (Фильтры) в правом верхнем углу окна, как показано на следующем скриншоте:
Эта опция фильтра позволяет нам установить условие фильтрации, при котором загружаются только те данные, которые удовлетворяют заданному условию. Опция фильтра допускает следующие условия:
- =
- >
- >=
- <
- <=
Используя предыдущие условия, вы можете фильтровать текстовые или числовые значения поля. Например, вы можете установить такое условие, как Date >= '01/01/2012' или ProductID = 80. На следующем скриншоте показаны такие условия, применяемые в редакторе загрузки данных:
Фильтрация данных в редакторе скриптов
Если вы знакомы с оператором «Load» (Загрузка) или оператором «SQL Select» (Выбор SQL), вам будет легко фильтровать данные при их загрузке. В редакторе скриптов лучший способ ограничить данные – это включить условие Where в конец оператора Load или Select ; например, Where Date >= '01/01/2012'.
Когда вы используете условие Where с оператором Load , вы можете использовать следующие условия:
- =
- >
- >=
- <
- <=
Когда вы пишете условие Where с оператором SQL Select , вы можете использовать следующие условия:
- =
- >
- >=
- <
- <=
- In
- Between
- Like
- Is Null
- Is Not Null
На следующем скриншоте показан пример обоих операторов:
Итак, в этой статье мы познакомились с различными методами моделирования данных. Мы увидели различные типы объединений и способы их реализации в Qlik Sense. Также мы узнали о конкатенации и скриптах, в которых пользователь должен использовать опцию конкатенации. Мы также рассмотрели автоматическую конкатенацию, принудительную конкатенацию и NoConcatenate. Кроме того, мы узнали о способах фильтрации данных при загрузке в Qlik Sense.