Возможность связать несколько таблиц данных друг с другом из разных источников делает Qlik Sense и Microsoft Power BI просто неотразимыми. В данной статье мы собираемся рассмотреть различия, сильные и слабые стороны в построении схемы данных каждого инструмента.
Qlik и Microsoft используют очень разные подходы к отношениям данных, а в случае Qlik их ассоциативная модель (QIX) — это один из элементов, который они активно рекламируют как отличительную особенность.
Microsoft, наоборот, использует более традиционную схему базы данных с отношениями «один-ко-многим». Разработчики вынуждены быть более креативными, чтобы разработать отношения «многие-ко-многим».
На самом ли деле ассоциативная схема Qlik многим лучше, чем то, что предлагает Power BI?
Qlik Sense – ассоциативный движок
Здесь представлено описание движка от Qlik.
Вот схема данных из приложения World Wide Importers, которое я создал в Qlik Sense:
Замечания по модели Qlik Sense QIX:
- Все отношения были созданы Qlik Sense автоматически. По мере внесения изменений путем удаления или добавления таблиц Qlik Sense автоматически настраивает схему данных.
- Под моей зеленой стрелкой вы увидите таблицу под названием $ Syn 3 Table. Эта таблица была создана автоматически Qlik и действует как центральная точка отношений.
- В этой схеме вы не видите таблицу дат. Она скрыта. Qlik Sense создал её автоматически. В этом случае я связывал ключевые даты с этой таблицей через скрипт. Кроме того, я мог бы импортировать пользовательскую таблицу дат (почти всегда является моим предпочтением), которая была бы видна.
Схема Qlik Sense QIX работает так, как рекламируется?
Да, и очень хорошо. Я продолжаю удивляться, как схема данных в Qlik работает с небольшим вовлечением пользователя.
Удалось ли мне обмануть Qlik Sense, чтобы отобразить плохие данные?
Да, но скорее плохим исполнением, чем сбоями инструмента.
Что насчёт отношений «многие-ко-многим»?
Чтобы испытать отношения «многие-ко-многим», я добавил простую таблицу StockItemStockGroup. Я также добавил таблицу, в которой есть названия групп товаров, которые обозначают товарные группы.
Таблица StockItemStockGroup выглядит так:
Каждый элемент, например, StockItem 1, «USB Missile Launcher (Green)» включен в несколько групп. USB missile launcher является частью нескольких групп — 6: Computing Novelties, 1: Novelty Items и 7: USB novelties.
Отношения – многие «sales activities» (торговые операции) к одному «Stock Item»(товар на складе) ко многим «Stock Group»(группа товаров) к одному «Stock Name»(название товара) для каждой группы.
Этого отношения достаточно, чтобы застигнуть врасплох некоторые системы или, по крайней мере, заставить разработчика работать немного усерднее. Qlik Sense автоматически загрузил таблицы и правильно создал отношения:
Я также проверил отношения «многие-ко-многим», исключив таблицу StockItem. У Qlik Sense не было проблем с этим.
В этом случае, я тестировал схему данных, чтобы убедиться в ее работоспособности. Это было сделано с использованием вычислений и фильтров в приложении визуализации Qlik Sense, а затем проверено на сервере SQL.
Схема данных от Microsoft Power BI
На раннем этапе эволюции продукта Power BI (я имею в виду PowerPivot) отношения требовали ручного создания. Отношения были только однонаправленные и «один-ко-многим». Вы можете прочитать бесчисленные блоги в Интернете о том, как построить отношения «многие ко многим» в схемах. Лучше сказать, как обойти ограничение «один-ко-многим». Почти всегда будут случаи, когда у вас имеются отношения «многие-ко-многим» или фильтры нуждаются в обоих направлениях.
Многое изменилось с тех пор. Сейчас Power BI довольно хорошо работает с распознаванием отношений. Ниже приведен пример в Power BI, используя те же данные что и для тестирования Qlik:
Замечания по схеме данных в Power BI:
- Вы заметите 1 и * в отношениях, а также стрелку. Эти стрелки относятся к направлению отношения, которое перетекает из уникального элемента в таблицу с несколькими значениями.
- Где находится моя зелёная стрелка, вы заметите пунктирную линию. Пунктирная линия обозначает неактивное отношение. В Power BI вы можете иметь только одно активное отношение между двумя таблицами в любой момент времени. Команды DAX используются для активации неактивных отношений, когда это требуется. Этот подход может показаться некоторым ограничением, но он работает достаточно эффективно.
- Эта схема имеет календарь. Power BI создаст «Автоматическую таблицу дат», если вы включили параметр. В этом случае я импортировал пользовательскую таблицу, которая является личным предпочтением.
Работает ли автоматическое распознавание связей в Power BI?
Автоматическое обнаружение связей в Power BI является значительным улучшением по сравнению с отсутствием обнаружения.
Ручная работа всё же необходима:
- Пользователь / разработчик должен создать вторичные отношения между таблицами.
- Вы должны переопределять отношения, если хотите, чтобы кросс-фильтрация была многонаправленной.
Может ли Microsoft Power BI управлять отношениями «многие-ко-многим»?
Да или нет. Microsoft Power BI может создать их. Тем не менее, иногда вам нужно «обходное решение» (я слышал, что некоторые называют это черной магией), чтобы заставить его работать. В приведенном выше случае, где мы ввели таблицу StockItemStockGroup и таблицу StockGroups, вы получите следующую схему:
Я хочу указать на зеленый круг, который указывает на многонаправленные отношения. Как упоминалось выше, пользователь должен установить это вручную. Схема не работает, если ее оставить в режиме автоматического режима.
Что произойдет, если пользователь попытается установить связь «многие-ко-многим» в Power BI?
Power BI лишит связей таблицы StockItemStockGroups и StockGroup. Если я попытаюсь восстановить отношение к таблице счетов (invoice table) и таблице отставаний (backlog table), я получу следующее.
Power BI не создаст отношения многие ко многим.
Катастрофа, не так ли? В Power BI это сложнее, чем в Qlik Sense. Решение заключается в том, что вы помещаете таблицу с уникальными значениями между двумя таблицами, к которым вы пытаетесь присоединиться, и схема будет работать.
Одна небольшая проблема со схемами данных в Power BI:
Эта небольшая загвоздка – моя любимая мозоль в Power BI, поэтому думаю, что она стоит упоминания.
Вот вам ситуация:
- Пользователь создал схему данных;
- Пользователь добавляет вычисляемые поля и визуализацию;
- Удаляет одну таблицу;
- Затем создает обратно абсолютно такую же таблицу.
В этом случае вычисления и визуализации становятся неработоспособными, потому как они связаны с удаленной таблицей. Даже если вычисляемое значение одинаковое, оно не распознает таблицу и поля до тех пор, пока вы не перейдете непосредственно к вычислению.
Данная проблема существует только в Power BI, Qlik Sense справляется с ней.
Qlik Sense vs. Power BI – ключевые различия в схемах данных
Qlik Sense работает с отношениями «многие-ко-многим» без необходимости вовлечения пользователя. Все отношения таблиц в Qlik Sense являются автоматическими. Если вы хотите добавить или изменить отношения, вам нужно сделать это в скрипте. Существуют предварительные отношения с синтетическими таблицами (synthetic tables), созданными в Qlik Sense, которые не встречаются в стандартной схеме отношений баз данных.
Power BI имеет максимум одно активное отношение для двух таблиц.
Power BI не поддерживает отношения «многие-ко-многим», но они могут быть созданы обходными путями. Power BI позволяет пользователю графически взаимодействовать со схемой данных/отношениями.
Заключение
Преимуществом Qlik Sense являются отношения между таблицами и создание схемы данных. Qlik обещает, что это позволит вам получить всю картину против частичного представления у конкурентов. Решение, которые они создали, является надёжным. Тем не менее, я еще не сталкивался с ситуацией с Microsoft Power BI, когда бы я не мог создать схему данных для выполнения необходимого анализа.
Найти решение у бизнес-партнера QlikTech (QlikView) в России.
Форум разработчиков QlikView и Qlik Sense. Получите ответы на все вопросы по QlikView и Qlik Sense!