Советы и стратегии по переходу на корпоративное использование Qlik

Успешные компании используют данные в своих стратегических целях в отдельных подразделениях. Однако для того, чтобы компания стала действительно ориентирована на данные, она не должна полагаться на развертывание аналитической платформы, такой как Qlik в отдельных подразделениях, ей нужно решение, охватывающее всю структуру.

 

Создайте свою BI стратегию

Представьте себе восхождение на гору. Прежде чем вы начнете подниматься на большую высоту, туда, где меньше кислорода и низкая температура, вы должны некоторое время акклиматизироваться. Для этого альпинисты используют «базовый лагерь». Мы также предлагаем нашим клиентам пройти такой базовый лагерь, чтобы создать базовый уровень комфорта использования Qlik в компании. При переходе от внедрения в подразделении к внедрению в компании у вас появятся конкурирующие интересы, поскольку некоторые аспекты реализации всплывают быстрее, чем другие. Один отдел может получить быстрый выигрыш, который создает основу для будущего развития, в то время как другой отдел должен ждать чего-то более сложного, такого как панель инструментов для руководителей, которая потребует интеграции многих источников данных. «Базовый лагерь» предоставляет возможность оценить бизнес причины использования Qlik, а также расставить приоритеты и организовать потребности и проекты каждого департамента.

Вот некоторые элементы, которые мы хотели бы рассмотреть с нашими клиентами при разработке стратегии:

  • Задачи: мы начинаем с того, что задаем вопросы типа «Почему?», или «Чего пытается достичь бизнес?», «Как мы собираемся использовать эти данные для улучшения бизнеса?». Это помогает нам перед поиском решения понять приоритеты. Мы всегда начинаем с расспросов клиентов.
  • Обзор решения. Мы гарантированно добиваемся того, что клиенты понимают возможности Qlik и пути того, как он может помочь бизнесу.
  • Лучшие практики: мы также обучаем клиентов лучшим практикам, таким как денормализация исходных таблиц и перемещение сложных вычислений из пользовательского интерфейса в сценарий загрузки, чтобы пользователи начинали с правильных методов и не создавали для себя лишней работы.
  • Управление: мы обсуждаем, как разработать структуру управления, которая позволит вам включить аналитику самообслуживания, а также обеспечить контроль, надежность и безопасность данных.
  • Архитектура данных: мы обсуждаем такие вещи, как: место хранения данных, способ их организации и интеграции, у кого будет доступ к ним, как обеспечить безопасность и многое другое.
  • Расширения: перед созданием решения вы можете реализовать «стандартный» Qlik, но расширения позволяют использовать его такими способами, которых нет в стандартной реализации. Общие расширения включают QlikMaps, расширенные объекты KPI и те, которые записывают пользовательские данные обратно в базу данных из пользовательского интерфейса Qlik.
  • Обучение. Мы обсудим план обучения для всех пользователей Qlik. Обучение повышает производительность, снижает затраты на обслуживание, увеличивает скорость внедрения и учит пользователей, как максимально эффективно использовать возможности Qlik. Кроме того, чем больше вы знаете, тем меньше вы должны полагаться на консультанта.

Цель такого начала с построения стратегии – содействовать освоению того инструмента, в который вы инвестируете. Рассматривая эти аспекты реализации заранее, вы получите общее видение того, что Qlik даст вам и для чего будет использоваться.

 

Создать матрицу BI приоритизации

При реализации решения для обработки данных и аналитики вы захотите согласовать свои BI цели с корпоративными целями. Например, общей целью BI является создание решения для данных, которое является «единственным источником правды», чтобы все лица, принимающие решения в компании, смотрели на непротиворечивые и точные данные. Корпоративной целью может быть увеличение продаж на 10%. Одним из способов достижения обеих целей может стать повышение возможностей продаж, так чтобы лица, принимающие решения во всей компании, могли анализировать эффективность продаж.

После того, как вы сопоставили BI цели с корпоративными целями и создали список действий для получения вашего решения, вы оцениваете эти проекты с двух точек зрения:

  1. Как такое поведение повлияет на бизнес?
  2. Какова целесообразность этого? Сколько времени и ресурсов уйдет на получение этой функциональность?

Вместе с нашими клиентами мы часто используем инструмент под названием «Матрица BI Приоритетов», который помогает им составлять и расставить приоритеты ключевых инициатив BI для определения технической осуществимости и реальной стоимости бизнеса каждого элемента и того, как они соотносятся с общими корпоративными целями.

Матрица BI Приоритетов помогает вам составить дорожную карту для своих приоритетов и увидеть вещи, которые вы можете легко реализовать.

 

Определить централизованную метрику

После того, как ваш план будет готов, вы захотите внедрить BI платформу таким образом, чтобы она была масштабируема и пригодна для корпоративного использования. Одной из проблем при работе с Qlik является определение централизованной библиотеки для основных элементов, которая может использоваться несколькими приложениями. Одним из методов, который поможет в этом, является служба управляемых метрик, расширение серверной среды Qlik Sense. Она позволяет вам определять ваши метрики извне, загружать их в Qlik Sense и применять их к любым/всем выбранным вами приложениям. Это обеспечивает согласованность (помните «единый источник правды?») и сокращает администрирование, поскольку вам не нужно дублировать сложные основные элементы в приложениях.

Внешние показатели хранятся в архитектуре этого продукта (таблица Excel, таблица базы данных и т. д.); QVD базируется на этом принципе; на сервере установлен инструмент управления управляемыми метриками, и это интерфейс, который вы используете для использования библиотеки метрик в приложениях.

 

Служба управляемых метрик

 

Заранее проверьте масштабируемость вашей системы

Если вы её построите, то, когда появятся новые пользователи… сможет ли ваше железо справиться с таким наплывом? Тестирование масштабируемости необходимо выполнить на ранней стадии процесса реализации, чтобы ответить на неопределенности относительно большего объема памяти или более быстрых процессоров. Набор инструментов для масштабируемости (Scalability Toolkit) поможет вам выполнить регрессионное аварийное тестирование с помощью автоматического тестирования. Этот инструментарий позволяет настроить гипотетический сценарий типичного и нетипичного использования приложения, а затем прогнать этот сценарий, чтобы получить метрики и выходные данные для анализа. Например, вы можете оценить, как увеличившееся количество пользователей влияет на использование ОЗУ и время отклика. Важно протестировать производительность, выявить слабые места и внести соответствующие изменения, прежде чем пользователи начтут взаимодействовать с системой.

 

Управление Qlik с помощью утилит QMC

Qlik Sense поставляется с консолью управления Qlik, которая работает довольно хорошо, но у вас есть возможность расширить функциональность с помощью утилит QMC, проекта с открытым исходным кодом, который помогает в управлении Qlik. Вот несколько примеров функций QMC, которые упрощают администрирование Qlik:

  • App Mover (Перемещение приложений): без этого инструмента вы можете выполнить несколько шагов: экспортировать приложение, присвоить ему имя, сохранить и импортировать его, предоставить соответствующие разрешения и многое другое. App Mover упрощает все эти процедуры, перемещая приложение и всю связанную с ним информацию из одной среды в другую.
  • Object Approver (Подтверждение объектов): при ручном перемещении в другую среду некоторые объекты можно пропустить, поэтому данный инструмент упрощает перемещение всех объектов.
  • Security Rules Manager (Менеджер правил безопасности): воссоздание правил в разных средах утомительно и может привести к ошибкам. Это позволяет легко экспортировать и импортировать правила между средами.
  • Custom Property Bulk Loader (Массовый загрузчик настраиваемых свойств): позволяет вносить массовые изменения в различные компоненты вашей реализации Qlik вместо одного объекта за раз.

 

Автоматический контроль версии С IN4BI

In4BI, доступный для Qlik Sense и QlikView – это инструмент, который позволяет разработчикам работать с одним и тем же документом параллельно с формализованным процессом проверки и некоторыми дополнительными функциями управления. Администраторы действуют как привратники и контролируют продвижение приложений между средами, гарантируя, что QA выполнен и контрольные списки заполнены. Кроме того, номера версий присваиваются автоматически, чтобы избежать путаницы среди разработчиков.

 

Хорошенько подумайте о возможности использования Qlik в облаке

Вполне возможно, что часть вашей системы уже находится в облаке, например, один из ваших компонентов Qlik или другие данные исходной системы (например, данные CRM на Salesforce.com), которые вы загружаете в свою систему. Запуск Qlik в облаке должен стать серьезным фактором при переходе от решения для отдела к решению для всей компании. Размещение компонентов на сервере Qlik в облаке дает вам несколько преимуществ:

  • Упрощение масштабирования, увеличение или уменьшение: добавьте больше вычислительных ресурсов, таких как RAM, CPU и IO, без принятия решений, затрат, времени и установки, связанных с физическими серверами. Вместо этого добавьте пространство, быстро отметив флажок в Интернете, и получите немедленные преимущества. Также есть возможность автоматически запускать и останавливать экземпляры в зависимости от ваших потребностей с помощью недорогих инструментов для самостоятельной работы.
  • Устойчивость и защита от сбоев: в облаке у вас есть кластеры серверов в различных центрах обработки данных. Таким образом, если один центр обработки данных выходит из строя, другие все еще активны. Крайне маловероятно, что два или более центра обработки данных, поддерживающих облачную среду, выйдут из строя одновременно.

Развертывание Qlik в компании может быть сложной задачей, но это проверенные стратегии и инструменты, которые помогли нашим клиентам добиться успеха.

 

 

Детальный разбор и сравнение лицензирования Power BI и Tableau

Давайте сосредоточимся на затратах на железо в долларах и сравним сопоставимые понятия, величины и показатели у Power BI и Tableau. Так, мы будем рассматривать только модель ценообразования Tableau, которая базируется на подписке, поскольку она лучше других сопоставима с Power BI.

При разборе моделей лицензирования я разработал следующую таблицу, которую сейчас объясню.

Эта таблица на первый взгляд может показаться запутанной, но у Power BI и Tableau существенно разные модели лицензирования, даже учитывая только лицензирование Tableau на основе подписки.

Во-первых, у Power BI действительно есть два разных режима лицензирования: классическое лицензирование с Power BI Pro и новое лицензирование с Power BI Premium. Последние три строки касаются цены Power BI Premium, которая начинается с 5000 USD в месяц для экземпляра Power BI P1. В Power BI Premium просмотр отчетов предоставляется только пользователям, а издателям контента по-прежнему нужна лицензия Power BI Pro по цене 10 USD на пользователя в месяц.

В классическом лицензировании Power BI клиент для настольных ПК всегда бесплатный. Единственное, что стоит денег – это использование функций Pro в Power BI Service, цена здесь – 10 USD за 1 пользователя в месяц. Однако в этой модели, если в отчете используются функции Pro, то все пользователи, включая пользователей, которые просто хотят просмотреть отчет, должны иметь лицензию Pro.

Теперь и Tableau стал чем-то похож на это, но есть некоторые нюансы. У Tableau также есть десктопная версия, но вы будете платить 35 USD за 1 пользователя в месяц за персональную версию и 70 USD за 1 пользователя в месяц за Pro версию. Если вы хотите публиковать и делиться отчетами через Tableau Online, то для этого потребуется еще 42 USD за 1 пользователя в месяц. Если пользователи хотят получить возможность просматривать или редактировать эти отчеты в Интернете, им также требуется лицензия по цене 42 USD за 1 пользователя в месяц.

Итак, давайте посмотрим на простой сценарий в рамках классической модели лицензирования Power BI и сравним его с Tableau. И именно в этом сценарии мы ищем «переломный момент» в ценах между Power BI и Tableau. Итак, если мы начнем с начальных условий – организация хочет создать модель, опубликовать и поделиться ею с определенным количеством пользователей, модель будет доступна только для чтения. Как это будет выглядеть?

Что ж, предположим, что нам нужна лицензия для настольного ПК и лицензия, чтобы иметь возможность обмениваться созданными отчетами. В мире Tableau это означает, что нам нужна лицензия Desktop Pro по цене 70 USD в месяц и лицензия Tableau Online по цене 42 USD в месяц. Благодаря нехитрым расчетам мы получаем 112 USD в месяц. В Power BI лицензия для настольных ПК бесплатна, и все, что нам нужно – это лицензия Pro на 10 USD в месяц. Теперь мы добавляем 10 «читательских» лицензий по цене 42 USD на 1 пользователя в месяц с Tableau и 10 USD на 1 пользователя в месяц для Power BI. Tableau всегда будет дороже, чем Power BI:

Представленный выше сценарий сохраняется в Power BI classic до тех пор, пока общее число пользователей не достигнет 550. И мы предполагаем, что соотношение читателей и разработчиков составляет 10 к 1. Имейте в виду, что цены Power BI всегда будут лучше цен Tableau.

Это – точка безубыточности при использовании Premium.

Итак, если в вашей организации работает более 550 человек, вы почти наверняка захотите использовать Power BI Premium. Кроме того, после того, как вы приблизитесь к этому условному размеру организации, цены Tableau станут еще менее привлекательными, так как лицензии «только для чтения» бесплатны для Power BI Premium и, не так уж бесплатны в Tableau Online.

В наборе инструментов бизнес-аналитики Microsoft есть множество бесплатных альтернатив. Это и использование бесплатного Power BI Desktop и простое размещение файлов в общей папке или в службах отчетов SQL Server. Или, например, использование Power BI Desktop и лицензии Free Power BI и бесплатной функции публикации в Интернете. Кроме того, всегда есть Excel, у которого есть множество функциональных возможностей Power BI с PowerPivot.

Теперь, несмотря на все вышесказанное, у меня есть предположения относительно будущего лицензирования Power BI. Я могу быть совершенно не прав, но есть одна вещь, которую я заметил в Power BI Premium. Меня не удивит, если Microsoft введет дополнительные уровни между этими двумя классами обслуживания. Представьте, что общая емкость имеет меньше ограничений, чем общий сервис Power BI, но больше ограничений, чем выделенная емкость 100%. Может показаться, что Microsoft может создать один или несколько уровней обслуживания, используя менее ограниченную общую емкость, которая будет оптимизирована для создания ценовых категорий, которые будут привлекательны для среднего бизнеса, эффективно предоставляя им всю или большую часть функциональности Premium. Несмотря на все сказанное, каков реальный стимул сделать такое, если ваша цена 20% или даже меньше от вашего наиболее вероятного конкурента?

В конце концов, новая модель лицензирования является благом для крупных компаний и, на мой взгляд, в целом повышает ценность предложения Power BI. Рассмотрим организацию с 5000 активных пользователей BI. Расходы этой организации в соответствии со старой моделью лицензирования составят 50 000 USD (5 000*10 USD) в месяц или 600 000 USD в год. В соответствии с новой моделью лицензирования с двумя экземплярами P1 будет больше на 15 000 USD (500*10 + 2*5 000) в месяц или 180 000 USD в год. При использовании Power BI Premium экономия по сравнению с классическим лицензированием Power BI составляет 60%. И та же организация будет платить 245 000 USD (500 * 70 USD + 350 * 42 USD + 4500 * 42 USD) в месяц или 2 940 000 USD в год за Tableau.

 

Сравниваем лицензирование Qlik и Power BI

Первое, что нам нужно сделать, это найти эквивалентные продукты в линейке Qlik. Qlik имеет довольно запутанный массив продуктов с перекрывающимися функциональными возможностями и продуктами, которые, являются дополнениями для других продуктов. Вот как табличка из Интернета суммирует различия:

 

Здесь довольно много совпадений, и мне кажется, что вам нужны оба продукта, чтобы получить полную функциональность Power BI Pro. Но ещё есть Qlik NPrinting для «генерации, распределения и планирования отчетов», который включен в Power BI. И Qlik GeoAnalytics для визуализации карты, которая, опять же, включена в Power BI. И Qlik Connectors, по-видимому, дополнительное требование для QlikView. Все коннекторы, доступные для Power BI, входят в комплект поставки, без дополнительной платы за «дополнительные» коннекторы. Но не будем забывать, что Qlik Analytics аналогичен Power BI Embedded, теперь включенному в Power BI Premium и, наконец, Qlik DataMarket, который кажется аналогичным ныне несуществующему Microsoft DataMarket.

Qlik Sense, похоже, сегодня является флагманским продуктом. Если вы перейдете на домашнюю страницу Qlik, всё, что они рекламируют, это Qlik Sense, Qlik Sense Cloud и платформу Qlik Analytics. Давайте разберемся. Мысль здесь состоит в том, что если Qlik Sense сам по себе дороже, чем Power BI, то анализировать дальше, действительно, не нужно. В этот момент вы платите больше за меньшее. Если бы Qlik Sense был дешевле, чем Power BI, то мы бы копали немного глубже.

К сожалению, сложность здесь не прекращается. Понимаете, сам Qlik Sense поставляется в трех вариантах: Qlik Sense Desktop, Qlik Sense Cloud и Qlik Sense Enterprise. И даже в Qlik Sense Cloud есть Qlik Sense Cloud Basic, Qlik Sense Cloud Plus и Qlik Sense Cloud Business. Хорошо, поэтому мы можем, по крайней мере, начать делать некоторые аналогии между продуктами. Казалось бы, Qlik Sense Desktop бесплатен. И Qlik Sense Cloud Basic является бесплатным.  Таким образом, комбинация из них, по-видимому, будет примерно эквивалентна Power BI Free. Тогда есть Qlik Sense Cloud Plus и Qlik Sense Cloud Business. Qlik заявляет, что Plus для индивидуума, а Business- для групп и команд. Хорошо, мы можем примерно сопоставить это с Power BI Pro. И Qlik Sense Enterprise, ну, должно быть, это эквивалент Power BI Premium.

В любом случае, начнем с бесплатных версий

ОК, не удивительно, бесплатно это бесплатно. Получаете ли вы все те же функции в Qlik Free, что и в Power BI Free, это, вероятно, тема для совсем другой статьи.

Давайте перейдем к индивидуальному использованию Qlik или Power BI. В Qlik Sense Cloud это Qlik Sense Cloud Plus 20 долларов США за пользователя в месяц. В Power BI это 10 долларов США за пользователя в месяц.

Индивидуальная подписка в месяц

Итак, Qlik для человека вдвое дороже, чем Power BI. Это предполагает, что вам, как человеку, понадобится Power BI Pro и вы не сможете обойтись без Power BI Free. Но, поскольку вы не можете делить на ноль, мы просто зайдем с Power BI Pro.

ОК, рассмотрим группы и команды. В Qlik это, по-видимому, означает Qlik Sense Cloud Business на уровне $ 25 за пользователя в месяц, а с Power BI это означает, что Power BI Pro стоит 10 долларов США за пользователя в месяц. Мы предположим, что в команде 50 человек.

Таким образом, Qlik для групп и команд в 2,5 раза дороже Power BI. На самом деле не имеет значения, сколько людей в команде, Qlik в этом сценарии всегда будет в 2,5 раза дороже.

Интересно, однако, что мы можем найти точку, где можно было бы подумать о переходе на Power BI Premium от Qlik Sense Cloud Business. Этот момент составляет около 201 пользователя (5000 долл. США / 25 долл. США). 201 вместо 200, потому что мы предполагаем, что у вас будет как минимум 1 автор и, следовательно, придется заплатить 10 долларов США за пользователя за месяц.

Итак, в Power BI Premium вы заплатили бы $ 5000 за месяц плюс 10 долларов США за пользователя за месяц для пользователей Pro. При этом для 201 пользователя вам будет лучше использовать Power BI Pro, так как это обойдется вам всего в 2000 долларов в месяц.

Пока все хорошо. Хорошо и довольно просто. К сожалению, все это заканчивается здесь. Почему? Потому что теперь мы прибыли в Qlik Sense Enterprise и его «лицензирование на основе токенов». Qlik утверждает, что их лицензирование на основе токенов является «гибкой и простой маркерной моделью». У Power BI Premium есть своя лицензия, и это то, что мы собираемся сравнить с Qlik Sense Enterprise.

Первое, что нужно знать о лицензировании на основе токенов Qlik, — это то, что каждый токен стоит 1500 долларов. Во-вторых, токены приходят в двух вариантах. Первый способ, которым вы можете использовать токен, — присвоить его именованному пользователю как «логин». Таким образом, это было бы аналогично в Power BI Premium-land для пользователя Power BI Pro, который является частым пользователем «power». Второй способ, которым вы можете использовать токен, — это присвоить ему 10 «логинов в систему».

Каждый логин подходит для одного пользователя для доступа к системе в течение одного часа. Если пользователь перешел через час, сжигается еще один проход доступа к логину, и пользователь должен закрыть окно своего браузера; а не только вкладку браузера, чтобы выйти из системы. Если пользователь обращается к системе несколько раз в течение часа, используется только один проход доступа к логину. Пропуски доступа к ресурсам доступа возобновляются (возвращаются в пул) через каждые 28 дней после того, как первый проход доступа к учетной записи используется.

Для целей сценария ценообразования мы будем использовать сценарий лицензирования, приведенный в техническом документе Qlik. Как указано в техническом документе, вам нужно создать дополнительный запас, потому что вы не можете точно знать, сколько раз пользователи будут фактически получать доступ к системе в любой конкретный месяц. Они используют буфер 20%, и они принимают в среднем 4 обращения на пользователя и что есть 103 пользователя. По их расчетам 103 x 4 x 120% / 10 (пропуск доступа на вход для каждого токена) вы получаете 49,4 нужных токена, которые округляются до 50.

Итак, 50 идентификаторов доступа для входа в систему доступа, и мы также предположим, что будет один именованный пользователь, который является основным автором отчетов и т. д., поэтому добавьте еще один токен для этого именованного пользователя, и мы уложимся в 51 токен. Но Qlik Enterprise работает на сервере, поэтому мы добавим те же расходы на сервер и хранилище от Power BI и Tableau Licensing Deconstructed and Compared VOL. 2. Эти расходы составляют $ 438 / месяц для сервера и $ 800 / месяц для хранения 10 ТБ.

Хорошо, но другая интересная вещь о Qlik Enterprise заключается в том, что лицензирование маркеров, хотя они стоят 1500 долларов каждый, кажется, бессрочно. Таким образом, нам нужно будет определить способ разбить это на ежемесячные расходы. Поэтому мы будем предполагать 3-летнюю стоимость системы. Это означает, что у нас есть 50 токенов доступа для входа в систему по цене 1500 долл. США за токен, разделенный на 36 месяцев или 2083 долл. США в месяц. Плюс 1 токен доступа пользователя по цене 1500 долларов за токен, разделенный на 36 месяцев или 42 доллара США в месяц. Это дает нам следующую таблицу:

В этом случае Power BI Premium дороже, чем Qlik Enterprise, но Power BI Pro дешевле.

Используя ту же модель, что и выше, точка разрыва маркера для Qlik vs Power BI Premium составляет около 91 токенов или около 188 пользователей плюс 1 именованный пользователь. 90 токенов доступа для входа по цене 1 500 долларов США за токен, разделенный на 36 месяцев, составляет 3750 долларов США в месяц плюс 42 доллара США за месяц для указанного токена пользователя, получаем таблицу:

В этой точке безубыточности Qlik Enterprise и Power BI Premium имеют одинаковую цену, но Qlik Enterprise — это более чем 2,5-кратная стоимость Power BI Pro.

Точка разрыва между Power BI Pro и Power BI Premium — это 550 пользователей, у которых 50 пользователей, а 500 — читатели.

В этом случае нам понадобится 240 токенов доступа для входа (240 * $ 1,500 / 36 = 10 000 долларов США) и 50 токенов доступа пользователей (50 * $ 1,500 / 36 = $ 2,083) для Qlik. Эта таблица выглядит так:

Таким образом, в истинном корпоративном сценарии Qlik Enterprise почти в 2,5 раза превосходит стоимость Power BI, независимо от того, лицензирована ли она как Power BI Pro или Power BI Premium.

С этого момента Power BI Premium будетдешевле, чем Qlik Enterprise, потому что пользователи Power BI бесплатны или всего лишь 10 долларов США в месяц, а не около 42 долларов США в месяц. Давайте посмотрим, как этот окончательный сценарий складывается против Power BI On-Prem:

Почти в 3 раза дороже!

Поэтому нет сценария ценообразования, где Qlik дешевле Power BI. Также очевидно, но скорее, что система на основе токенов эффективно заставляет вас переплачивать, чтобы обрабатывать более чем среднее (оценочное) использование системы.

 

 

Руководство: как создать расширение Qlik Sense с помощью D3

Новые API Qlik Sense упрощают создание расширений, которые создают новые визуализации. Распространенным источником этих визуализаций является d3.js, мощная библиотека javascript для визуализации данных.

Следующее руководство покажет вам, как создать расширение, используя существующий код d3. Процесс будет описан в деталях, поэтому выполнение каждого шага займет некоторое время. Однако сами шаги довольно просты и могут быть выполнены менее чем за 10 минут без дополнительных объяснений. Данное руководство поделено на части, но есть 4 основных шага:

  1. Получить код d3 для использования
  2. Получить тестовые данные для использования и загрузить их в Qlik Sense
  3. Инициализировать новое расширение и настроить его свойства.
  4. Вставьте код d3 в расширение и изменить его для получения исходных данных из расширения.

Предварительные условия: В этом руководстве предполагается, что вы обладаете базовыми знаниями о сценариях Qlik Sense и JavaScript, поэтому этот вопрос не будет затрагиваться. Однако, все примеры кодов и шаги будут сопровождаться краткими пояснениями, так что вы сможете скопировать и вставить те части, которые вы не полностью понимаете.

Ресурсы:

Руководство покажет вам, как создать следующую диаграмму:

Теперь перейдем собственно к самому процессу.

Получение кода D3 для использования

Я собираюсь построить диаграмму рассеяния d3, показанную здесь: http://bl.ocks.org/mbostock/3887118. Диаграмма отображает точки по 2 метрикам, а также окрашивает их в зависимости от измерения атрибута. Qlik Sense имеет встроенную диаграмму рассеяния, которая строит точки на основе одного измерения. Там нет возможности добавить второе измерение, которое может группировать точки по цвету. Диаграмма рассеяния d3 представляет эту новую функциональность.

Если вы посмотрите на исходный код под диаграммой, то увидите два файла: html-файл, который отображает диаграмму, и файл *.tsv, который содержит данные. Мы будем использовать подмножества html-файла и данные Qlik Sense вместо tsv-файла.

Мы вернемся к этому примеру, когда будем готовы реализовать код d3.

Получите тестовые данные и загрузите их в Qlik Sense

Для диаграммы рассеяния нам нужен набор данных с 2 метриками и 2 измерениями. 2 метрики будут нанесены на оси X и Y. 1 измерение будет использоваться для отрисовки каждой точки; второе измерение будет использоваться для назначения цвета точкам. Я взял примерный набор данных из Отчета о развитии человека за 2014 год. Этот набор данных включен выше в разделе Ресурсы.

Заголовки таблицы:

Исследуемая группа Страна Ожирение в% Ожидаемая продолжительность жизни в возрасте 60 лет

В качестве двух показателей я выбрал «Ожирение в%» и «Ожидаемая продолжительность жизни в возрасте 60 лет». Отображаемые измерения будут представлять отдельные страны. Для цвета я буду использовать исследуемую группу, в которую входит каждая страна. Я также удалил все страны, в которых отсутствовали данные.

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

Создаем новое приложение в Qlik Sense

Первое, что нам нужно сделать, это создать новое приложение в Qlik Sense. Откройте Qlik Sense. Вы должны увидеть кнопку «Create new app» (Создать новое приложение) в правом верхнем углу.

Дайте вашему приложению имя, а затем щелкните по нему, чтобы открыть.

Изменение скрипта загрузки и загрузка ваших данных

Итак, мы создали и открыли новое приложение, оно пустое. Теперь нам нужно загрузить наши данные. Данные можно загрузить с помощью редактора загрузки данных. Нажмите на значок компаса в верхнем левом углу и выберите «Data load editor» (Редактор загрузки данных), чтобы открыть это окно.

Редактор загрузки данных содержит язык сценариев для загрузки данных в Qlik Sense. Слева вы увидите панель, которая организует ваш скрипт загрузки в разные вкладки. Главная вкладка автоматически заполняется некоторыми переменными конфигурации. Здесь не нужно ничего изменять. Нажмите на знак «+», чтобы создать новую вкладку под Главной. Дайте вкладке имя.

Теперь справа должна отображаться пустая вкладка сценариев. Чтобы сгенерировать наш скрипт загрузки, нам нужно установить соединение с папкой, из которой мы будем загружать данные. Справа от области сценариев находится кнопка с надписью «Create connection» (Создать соединение). Нажмите эту кнопку и перейдите к папке, в которой сохранен ваш CSV. Дайте этой папке имя и нажмите «Сохранить».

После того, как мы создали соединение с папкой, мы можем использовать это соединение для загрузки файлов из этой папки. Справа только что созданное нами соединение отображается вместе со значком таблицы. Нажатие на значок таблицы вызывает меню для загрузки определенного файла из созданного нами соединения. Нажмите на образец файла данных и затем кнопку «Select» (Выбрать).

Откроется мастер загрузки таблицы, который поможет нам настроить нашу загрузку. Он обеспечивает предварительный просмотр поступающих данных, а также параметры для изменения. У нас есть источник данных с разделенными запятыми значениями с метками в первой строке, которые будут действовать как имена наших столбцов. Измените настройки оператора загрузки, чтобы отразить это:

Нажмите «Insert script» (Вставить скрипт), чтобы импортировать сгенерированный скрипт загрузки в ваш редактор скриптов. Должно выглядеть примерно так:

Теперь мы можем загрузить данные в наше приложение, нажав кнопку «Load Data» (Загрузить данные) в правом верхнем углу.

Инициализация нового расширения и настройка

Теперь, когда у нас есть данные, готовые к тестированию, мы можем настроить основу для нашего нового расширения. Вместо того, чтобы создавать наш код расширения с нуля, мы будем использовать существующее расширение, которое поставляется с Qlik Sense, и модифицируем код для наших целей.

Перейдите в папку «Extensions» (Расширения). Эта папка находится в папке Мои документы\Qlik\Sense\Extensions. Вы найдете папку для каждого установленного вами расширения. Для этого урока мы продублируем расширение «SimpleTable».

Инициализация расширения

Создайте дубликат папки расширения «SimpleTable» и переименуйте его в «TwoDimScatter». Затем откройте папку. Вы должны увидеть следующие файлы:

  • com-qliktech-simpletable.js – файл Javascript, который извлекает данные из Qlik Sense и создает пользовательскую визуализацию
  • com-qliktech-simpletable.qext – файл свойств, который содержит такие атрибуты, как имя расширения
  • simpletable.css – файл стилей, в котором мы можем определить визуальные атрибуты, такие как шрифты и цвета
  • wbfolder.wbl – нам не нужно будет его менять

Обновите все имена файлов, кроме файла wbfolder.wbl, с помощью «twodimscatter», названия нашего расширения. Например, «com-qliktech-simpletable.js» должен стать «twodimscatter.js». Также нам нужно включить в эту папку файл d3.min.js, что позволит использовать библиотеку D3. Последняя версия привязана к разделу Resources выше. Полученная папка должна выглядеть примерно так:

Настройка файла свойств расширения

Откройте файл «twodimscatter.qext» в текстовом редакторе. Вы должны увидеть JSON со свойствами, такими как имя, автор и т. д. Эти значения будут видны во внешнем интерфейсе Qlik Sense, где вы выбираете объекты для добавления на лист. Обновите значения, чтобы отразить ваше новое расширение. Например, мой код такой:

[code lang="js"]{
"name" : "Two Dimensional Scatter",
"description" : "A scatter plot that uses two dimensions",
"icon" : "table",
"type" : "visualization",
"version": "1.0",
"preview" : "table",
"author": "Speros"
}[/code]

Сохраните и закройте этот файл.

Подготовка CSS

Откройте файл «twodimscatter.css» в текстовом редакторе. Здесь мы собираемся вставить CSS, специфичный для расширения d3. Файл CSS будет содержать правила стиля, такие как размеры шрифта и цвета для элементов нашей визуализации. А пока давайте очистим содержимое этого файла и оставим только то, что нам нужно. В первой строке есть запись для «.qv-object-com-qliktech-simpletable div.qv-object-content-container». Div.qv-object-content-container — это div, который будет содержать наше расширение. Первый класс, указанный там, «.qv-object-com-qliktech-simpletable», — это класс, к которому будет применяться наш объект расширения. Мы хотим включить это различие в класс, чтобы наш CSS применялся только к элементам, которые мы создаем в своем расширении. Мы сохраним эту запись, но с 2 изменениями:

  1. Переименуйте первый класс из «.qv-object-com-qliktech-simpletable» в «.qv-object-twodimscatter»
  2. Уберите строку «overflow: auto;»

Остальную часть текста в файле CSS можно удалить. Ваш CSS файл должен выглядеть так:

[code lang="css"].qv-object-twodimscatter div.qv-object-content-container {
}[/code]

Настройка файла JS

Откройте файл Javascript с помощью текстового редактора. Этот файл определяет, что делает объект расширения. Мы собираемся сначала установить начальные свойства и функции нашего расширения.

Зависимости файлов

В самой первой строке файла вы увидите оператор define(), который принимает список файлов для загрузки, а затем запускает функцию после их загрузки. Этот оператор позволяет нам загружать файлы, от которых будет зависеть наш код расширения, прежде чем мы попытаемся запустить этот код расширения. Define() является частью AMD API и доступен для нас в расширениях благодаря использованию Qlik Sense RequireJS.

Мы должны изменить этот оператор define(), чтобы получить файлы, которые нам нужны для нашего расширения: jQuery, наш файл css и наш файл d3.min.js. Измените массив определения:

["jquery", "text!./simpletable.css"]

на

["jquery", "text!./twodimscatter.css","./d3.min"]

Наш код расширения теперь загрузит эти файлы, прежде чем пытаться что-то нарисовать. Примечание: Qlik Sense поставляется с jQuery, поэтому нам не нужно хранить локальную копию в своем расширении. В своем расширении мы будем использовать jQuery, чтобы добавить нашу визуализацию в контейнер объекта расширения

Свойства и определения

После того, как мы определили необходимые файлы, нам нужно изменить свойства и определение нашего расширения. Эти свойства включают в себя ширину и длину набора данных для извлечения, а также ограничения на количество измерений и выражений, необходимых для запуска расширения.

В верхней части файла вы должны увидеть следующий код, который устанавливает эти свойства:

[code lang="js"] return {
initialProperties : {
version: 1.0,
qHyperCubeDef : {
qDimensions : [],
qMeasures : [],
qInitialDataFetch : [{
qWidth : 10,
qHeight : 50
}]
}
},
definition : {
type : "items",
component : "accordion",
items : {
dimensions : {
uses : "dimensions",
min : 1
},
measures : {
uses : "measures",
min : 0
},
sorting : {
uses : "sorting"
},
settings : {
uses : "settings",
items : {
initFetchRows : {
ref : "qHyperCubeDef.qInitialDataFetch.0.qHeight",
label : "Initial fetch rows",
type : "number",
defaultValue : 50
},
}
}
}
},[/code]

В строке 2 создается объект initialProperties. В строке 10 qWidth указано, сколько столбцов должно иметь расширение. Измените qWidth с «10» на «4», так как у нас есть два измерения и две меры. Атрибут qHeight ниже указывает, сколько строк можно загрузить. Измените значение с «50» на «1000».

В строке 13 определяется объект определения. Этот объект включает измерение и пределы измерения. В строках 19 и 23 вы увидите, что минимальные измерения установлены на «1», а минимальные меры были установлены в «0». Для нашего расширения мы хотим ровно 2 измерения и 2 меры.

В строке 19 измените минимальные размеры с «1» на «2». Затем добавьте запятую и в новой строке добавьте максимальное значение «2». Сделайте то же самое для мер. Это ограничивает наше расширение необходимостью выполнения ровно 2 измерений и 2 мер. Результат должен выглядеть так:

[code lang="js"]dimensions : {
uses : "dimensions",
min : 2,
max: 2
},
measures : {
uses : "measures",
min : 2,
max: 2
},[/code]

В строке 32 создается объект «items». Для нашего расширения этот объект можно удалить. Нужно удалить строки с 32 по 39. Вы также можете удалить предыдущую запятую. Результат должен выглядеть так:

[code lang="js"]settings : {
uses : "settings"
}[/code]

Функция рисования

Наш последний шаг в настройке функции – очистить функцию рисования. Функция рисования запускается каждый раз, когда должна отображаться визуализация. Например, фильтрация данных в Qlik Sense приведет к перерисовке визуализации. Для наших целей мы можем создать следующие модификации:

  1. Измените функцию так, чтобы она принимала два параметра: $element и layout
function($element,layout) {
  1. Очистите текущее содержимое функции
function($element,layout) {}
  1. Выведите эти два элемента, чтобы можно было исследовать их содержание
function($element,layout) {
console.log($element);
console.log(layout);
}

Console.log() принимает любые введенные данные и отображает их в консоль JavaScript, которую мы можем просмотреть в Qlik Sense и в веб-браузерах. Регистрируя эти элементы, мы можем использовать консоль, чтобы выяснить, что в них содержится и как мы можем использовать их для рисования нашей визуализации.

Наша функция рисования должна выглядеть так:

[code lang="js"]paint : function($element,layout) {
console.log($element);
console.log(layout);
}[/code]

Инициализация расширения в Qlik Sense и его просмотр

Давайте сделаем перерыв в написании кода для расширения и настроим его, чтобы убедиться, что все работает. Мы также можем посмотреть объекты, которые мы ввели в консоль.

Откройте созданное приложение Qlik Sense и создайте новый лист на экране «App Overview».

Присвойте листу имя и откройте его. Сначала он будет пустым. В верхнем правом углу нажмите кнопку «Edit», чтобы войти в режим редактирования. В левой части страницы есть панель, где вы можете выбрать диаграммы для добавления на страницу. Прокрутите вниз до диаграммы двумерного рассеяния и перетащите ее на панель инструментов.

После добавления диаграммы Qlik Sense предоставит вам возможность добавить ваши измерения и меры. Добавьте «Development Group» в качестве первого измерения и «Country» в качестве второго измерения. Для измерений нам нужно будет выбрать поле, которое будет использоваться, и вычисления, которые должны быть выполнены на нем. Выберите «Ожирение в%» и «Ожидаемая продолжительность жизни в возрасте 60 лет» в качестве показателей. Для функций можно использовать «sum» или «avg». Поскольку эти значения записываются на уровне страны, мы будем суммировать или усреднять только одно число, поэтому результат будет таким же. Я предлагаю функцию avg, чтобы в случае, если данные будут реструктурированы на более детальном уровне позже, показатель все равно будет рассчитывать действительный результат.

После добавления измерений и мер мы можем настроить метки мер. На правой панели щелкните заголовок «Measure», чтобы развернуть панель. Каждая мера должна быть перечислена. Нажатие на меры расширит опции для мер, включая добавление метки. Добавьте метки, такие как «Ожирение в %» и «Ожидаемая продолжительность жизни в возрасте 60 лет». Мы будем использовать эти метки для наших осей позже.

Теперь у нас есть пустое расширение с загруженными в него примерами данных. Прежде чем мы перейдем к последнему этапу реализации кода d3, давайте посмотрим на элементы, которые мы выводим на консоль в нашем JavaScript.

Откройте представление инструментов разработчика, нажав Ctrl + Shift + правую кнопку мыши на странице и выбрав «Show Dev Tools». Выберите «Console» сверху, чтобы просмотреть консоль JavaScript. Вы должны увидеть два элемента, которые мы выводили раньше. Вы можете использовать консоль для изучения этих элементов. Например, если я открою объект макета, я смогу найти данные, которые мы хотим получить для нашего расширения:

На изображении выше показано, где хранится одна строка данных по Албании. Мы видим, что макет содержит объект с именем qHyperCube, который содержит массив с именем qDataPages, который содержит объект с массивом с именем qMatrix, который содержит массив объектов для каждой строки данных. Каждый объект в строке представляет отдельный столбец. Мы можем использовать эту информацию для написания нашего кода JavaScript, который будет собирать данные для визуализации d3.

Мы также можем найти заголовки меток в объекте макета в qHyperCube.qMeasureInfo.qFallbackTitle:

В общем, консоль является хорошим инструментом для отслеживания и отладки кода.

Вставляем и изменяем код D3

Откройте файл «twodimscatter.js» с помощью текстового редактора.

Настройка данных и контейнера div

Первое, что нам нужно сделать, это извлечь необходимую информацию из нашего расширения. Нам нужны данные для визуализации, ширина и высота объекта, с которым мы можем работать, и уникальный идентификатор нашего объекта диаграммы. Уникальный идентификатор пригодится, когда нам нужно будет создать новый элемент DOM для хранения нашей визуализации.

Теперь, когда мы использовали консоль, чтобы узнать, где находятся наши исходные данные и где находятся метки мер, мы можем построить нашу область данных в JavaScript с помощью следующих строк кода:

[code lang="js"] // получить массив данных qMatrix
var qMatrix = layout.qHyperCube.qDataPages[0].qMatrix;
// создаем новый массив, который содержит метки меры
var measureLabels = layout.qHyperCube.qMeasureInfo.map(function(d) {
return d.qFallbackTitle;
});
// Создать новый массив для нашего расширения со строкой для каждой строки в qMatrix
var data = qMatrix.map(function(d) {
// для каждого элемента в матрице создаем новый объект со свойство
// для измерения группировки, первой метрики и второй метрики

{
"Dim1":d[0].qText,
"Metric1":d[2].qNum,
"Metric2":d[3].qNum
}
});
[/code]

Теперь у нас есть массив measureLabels, который содержит текстовые значения наших меток мер, и у нас есть массив данных с нашими данными в нем. Обратите внимание, что мы не храним оба измерения в этом массиве; мы оставляем только исследуемую группу, которая используется для окрашивания точек. Это должно имитировать данные, которые принимает код d3 диаграммы рассеяния; это не требует от нас перечислять идентификаторы каждой записи, которые в нашем примере являются названиями страны.

Теперь давайте захватим ширину, высоту и идентификатор объекта диаграммы. Как только мы получим эту информацию, мы будем использовать jQuery для добавления нового контейнера div на график, который будет содержать нашу визуализацию d3. Если div уже существует, мы очистим его содержимое, чтобы перерисовать диаграмму с нуля.

[code lang="js"]
// Ширина объекта диаграммы
var width = $element.width();
// Высота объекта диаграммы
var height = $element.height();
// Идентификатор объекта диаграммы
var id = "container_" + layout.qInfo.qId;
// Проверяем, был ли элемент диаграммы уже создан
if (document.getElementById(id)) {
// если он был создан, очистите его содержимое, чтобы мы могли перерисовать его
$("#" + id).empty();
}
else {
// если он не был создан, создайте его с соответствующим идентификатором и размером
$element.append($('<div />').attr("id", id).width(width).height(height));
}[/code]

Наконец, давайте назовем нашу функцию viz, которая фактически будет содержать наш код d3. Мы будем держать функцию viz отдельно от функции рисования для организационных целей.

[code lang="js"]viz(data,measureLabels,width,height,id);[/code]

Полная функция рисования должна выглядеть так:

[code lang="js"] paint : function($element,layout) {
// получить массив данных qMatrix
var qMatrix = layout.qHyperCube.qDataPages[0].qMatrix;
// создаем новый массив, который содержит метки меры
var measureLabels = layout.qHyperCube.qMeasureInfo.map(function(d) {
return d.qFallbackTitle;
});
// создаем новый массив для нашего расширения со строкой для каждой строки в qMatrix
var data = qMatrix.map(function(d) {
// для каждого элемента в матрице создаем новый объект со свойством
// для измерения группировки, первой метрики и второй метрики
return {
"Dim1":d[0].qText,
"Metric1":d[2].qNum,
"Metric2":d[3].qNum
}
});

// Ширина объекта диаграммы
var width = $element.width();
// Высота объекта диаграммы
var height = $element.height();
// Идентификатор объекта диаграммы
var id = "container_" + layout.qInfo.qId;

// Проверяем, был ли элемент диаграммы уже создан
if (document.getElementById(id)) {
// если он был создан, очистите его содержимое, чтобы мы могли перерисовать его
$("#" + id).empty();
}
else {
// если он не был создан, создайте его с соответствующим идентификатором и размером
$element.append($('<div />;').attr("id", id).width(width).height(height));
}
viz(data,measureLabels,width,height,id);
}[/code]

Мы можем создать нашу новую функцию viz в нижней части нашего JS-файла вне оператора define(). Нам нужно определить его с соответствующим количеством входов

[code lang="js"]var viz = function(data,labels,width,height,id) {
};[/code]

Копирование кода D3

Давайте вернемся к примеру с d3, который мы хотим использовать, и скопируем JavaScript. Часть JavaScript-файла находится внутри html-файла, внутри тега <script> в теле. Мы хотим скопировать фрагмент от начала оператора «var margin» до начала оператора «</script>». Не копируйте строку «</script>»; только до линии перед ней. Затем мы можем вставить этот код в нашу пустую функцию viz. Код должен выглядеть так:

[code lang="js"]var margin = {top: 20, right: 20, bottom: 30, left: 40},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;

var x = d3.scale.linear()
.range([0, width]);

var y = d3.scale.linear()
.range([height, 0]);

var color = d3.scale.category10();

var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");

var yAxis = d3.svg.axis()
.scale(y)
.orient("left");

var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");

d3.tsv("data.tsv", function(error, data) {
data.forEach(function(d) {
d.sepalLength = +d.sepalLength;
d.sepalWidth = +d.sepalWidth;
});

x.domain(d3.extent(data, function(d) { return d.sepalWidth; })).nice();
y.domain(d3.extent(data, function(d) { return d.sepalLength; })).nice();

svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.append("text")
.attr("class", "label")
.attr("x", width)
.attr("y", -6)
.style("text-anchor", "end")
.text("Sepal Width (cm)");

svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("class", "label")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text("Sepal Length (cm)")

svg.selectAll(".dot")
.data(data)
.enter().append("circle")
.attr("class", "dot")
.attr("r", 3.5)
.attr("cx", function(d) { return x(d.sepalWidth); })
.attr("cy", function(d) { return y(d.sepalLength); })
.style("fill", function(d) { return color(d.species); });

var legend = svg.selectAll(".legend")
.data(color.domain())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });

legend.append("rect")
.attr("x", width - 18)
.attr("width", 18)
.attr("height", 18)
.style("fill", color);

legend.append("text")
.attr("x", width - 24)
.attr("y", 9)
.attr("dy", ".35em")
.style("text-anchor", "end")
.text(function(d) { return d; });

});[/code]

Изменение кода D3

Теперь нам нужно внести некоторые изменения в код D3, чтобы он соответствовал нашему коду расширения. Должны быть выполнены следующие изменения:

  1. Мы можем удалить часть по загрузке данных кода D3. Наши данные уже загружены через расширение.
  2. Измените жестко заданную ширину и высоту, чтобы использовать наши входные значения
  3. Добавьте наш элемент svg, который будет содержать нашу диаграмму, к элементу div, который мы создали вместо тела html.
  4. Измените все ссылки на данные из исходного набора данных для ссылки на столбцы в нашем наборе данных расширения

  1. Удаление загрузки данных D3

В примере кода d3 примерно на полпути вниз есть строка,

[code lang="js"]d3.tsv("data.tsv", function(error, data) {
data.forEach(function(d) {
d.sepalLength = +d.sepalLength;
d.sepalWidth = +d.sepalWidth;
});[/code]

Функция d3.tsv принимает два параметра: путь к файлу и функцию обратного вызова для выполнения. Функция обратного вызова запускает код построения визуализации после загрузки файла «data.tsv». Мы хотим удалить этот вызов, а также оператор data.forEach под ним. Наша переменная данных уже заполняется, когда мы вызываем функцию viz в нашем методе рисования, поэтому нам не нужно ее изменять. Обратите внимание, что функция обратного вызова инкапсулирует не только этот оператор data.forEach, но и остальную часть кода визуализации. Поэтому, когда мы удаляем этот раздел, мы также должны удалить закрывающий «});» в конце нашего кода визуализации, который заканчивается после оператора legend.append («text»). Результат должен выглядеть примерно так:

[code lang="js"]var margin = {top: 20, right: 20, bottom: 30, left: 40},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;

var x = d3.scale.linear()
.range([0, width]);

var y = d3.scale.linear()
.range([height, 0]);

var color = d3.scale.category10();

var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");

var yAxis = d3.svg.axis()
.scale(y)
.orient("left");

var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");

x.domain(d3.extent(data, function(d) { return d.sepalWidth; })).nice();
y.domain(d3.extent(data, function(d) { return d.sepalLength; })).nice();

svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.append("text")
.attr("class", "label")
.attr("x", width)
.attr("y", -6)
.style("text-anchor", "end")
.text("Sepal Width (cm)");

svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("class", "label")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text("Sepal Length (cm)")

svg.selectAll(".dot")
.data(data)
.enter().append("circle")
.attr("class", "dot")
.attr("r", 3.5)
.attr("cx", function(d) { return x(d.sepalWidth); })
.attr("cy", function(d) { return y(d.sepalLength); })
.style("fill", function(d) { return color(d.species); });

var legend = svg.selectAll(".legend")
.data(color.domain())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });

legend.append("rect")
.attr("x", width - 18)
.attr("width", 18)
.attr("height", 18)
.style("fill", color);

legend.append("text")
.attr("x", width - 24)
.attr("y", 9)
.attr("dy", ".35em")
.style("text-anchor", "end")
.text(function(d) { return d; });[/code]
  1. Обновление значений ширины и высоты

Вторая и третья строки кода D3 указывают, что ширина и высота должны быть жестко закодированы значениями минус размер полей. В этом случае ширина и высота кодируются до 960 и 500. Мы можем заменить это нашими входными значениями ширины и высоты:

[code lang="js"] width = width - margin.left - margin.right,
height = height - margin.top - margin.bottom;[/code]
  1. Добавление элемента svg в наш контейнер

В строке var svg код d3 добавляет новый элемент svg в тело страницы. Мы можем изменить этот оператор так, чтобы код d3 выбирал созданный нами контейнерный div и вместо него добавлял новый svg.

[code lang="js"]var svg = d3.select("#"+id).append("svg")[/code]
  1. Обновление ссылки на данные, чтобы использовать правильные имена свойств

Если мы рассмотрим код D3, то увидим, что разделы, которые рисуют визуальные элементы на основе данных, ссылаются на заголовки столбцов исходной таблицы данных. Например:

[code lang="js" highlight="6,7,8"]svg.selectAll(".dot")
.data(data)
.enter().append("circle")
.attr("class", "dot")
.attr("r", 3.5)
.attr("cx", function(d) { return x(d.sepalWidth); })
.attr("cy", function(d) { return y(d.sepalLength); })
.style("fill", function(d) { return color(d.species); });[/code]

Нам нужно заменить все ссылки в коде на d.sepalWidth на d.Metric1; d.sepalLength до d.Metric2 и d.side до d.Dim1.

Метки для осей также жестко закодированы, как в определении оси X, где для .text() задана строка «Sepal Width (cm)»:

[code lang="js" highlight="10"]svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.append("text")
.attr("class", "label")
.attr("x", width)
.attr("y", -6)
.style("text-anchor", "end")
.text("Sepal Width (cm)");[/code]

Вместо жесткого кодирования меток для наших осей мы можем использовать введенную нами переменную для динамического применения соответствующих меток. Переменная метки – это массив, первый элемент которого является меткой для метрики 1, а второй элемент – меткой для метрики 2. Мы можем переписать ось X с помощью этой переменной:

[code lang="js" highlight="10"] svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.append("text")
.attr("class", "label")
.attr("x", width)
.attr("y", -6)
.style("text-anchor", "end")
.text(labels[0]);[/code]

Результирующая функция viz со всеми этими обновлениями должна выглядеть следующим образом:

[code lang="js" highlight="4,5,29,30,41,52,59,60,61"]var viz = function (data,labels,width,height,id) {

var margin = {top: 20, right: 20, bottom: 30, left: 40},
width = width - margin.left - margin.right,
height = height - margin.top - margin.bottom;

var x = d3.scale.linear()
.range([0, width]);

var y = d3.scale.linear()
.range([height, 0]);

var color = d3.scale.category10();

var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");

var yAxis = d3.svg.axis()
.scale(y)
.orient("left");

var svg = d3.select("#"+id).append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");

x.domain(d3.extent(data, function(d) { return d.Metric1; })).nice();
y.domain(d3.extent(data, function(d) { return d.Metric2; })).nice();

svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.append("text")
.attr("class", "label")
.attr("x", width)
.attr("y", -6)
.style("text-anchor", "end")
.text(labels[0]);

svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("class", "label")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text(labels[1])

svg.selectAll(".dot")
.data(data)
.enter().append("circle")
.attr("class", "dot")
.attr("r", 3.5)
.attr("cx", function(d) { return x(d.Metric1); })
.attr("cy", function(d) { return y(d.Metric2); })
.style("fill", function(d) { return color(d.Dim1); });

var legend = svg.selectAll(".legend")
.data(color.domain())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });

legend.append("rect")
.attr("x", width - 18)
.attr("width", 18)
.attr("height", 18)
.style("fill", color);

legend.append("text")
.attr("x", width - 24)
.attr("y", 9)
.attr("dy", ".35em")
.style("text-anchor", "end")
.text(function(d) { return d; });

}[/code]

Изменение CSS

Последний шаг в настройке нашего расширения – изменение CSS. Если вы посмотрите на HTML-код исходной диаграммы d3, верхняя часть кода содержит тег стиля со следующими значениями:

[code lang="css"]body {
font: 10px sans-serif;
}

.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}

.dot {
stroke: #000;
}[/code]

Мы можем изменить этот код и поместить его в наш файл twodimscatter.css. Мы должны внести следующие изменения:

  1. Измените стиль «body», чтобы применить к нашему объекту контейнера вместо него
  2. Добавьте класс «.qv-object-twodimscatter» чтобы наш CSS не влиял ни на какие элементы вне нашего объекта диаграммы, которые имеют классы, такие как «dot», или элементы, такие как пути и линии.

Добавление этих изменений приводит к файлу twodimscatter.css, например, так:

[code lang="css"].qv-object-twodimscatter div.qv-object-content-container {
font: 10px sans-serif;
}

.qv-object-twodimscatter .axis path,
.qv-object-twodimscatter .axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}

.qv-object-twodimscatter .dot {
stroke: #000;
}[/code]

Просмотр расширения

После внесения этих изменений мы можем сохранить все наши файлы и просмотреть изменения в нашем приложении. Откройте приложение Qlik Sense и перейдите к листу с объектом расширения. Если лист уже открыт, нажмите «F5», чтобы обновить страницу. Расширение теперь будет отображать диаграмму рассеяния с цветной легендой. Вы можете изменить лист, чтобы добавить списки и другие диаграммы, чтобы использовать ассоциативную модель Qlik Sense с этим расширением d3.

Следующие шаги

Мы можем расширить это расширение, изменив файл JavaScript, добавив интерактивные компоненты, такие как выбор Qlik Sense и создание всплывающих ярлыков для точек с названиями их стран. В следующих статьях будут рассмотрены эти улучшения.

Весь исходный код этого расширения можно найти здесь.

Дополнительные ресурсы

Если вы хотите узнать больше о любом из компонентов этого решения, вот несколько полезных ресурсов:

 

21 совет и рекомендация для Qlik

Вот 21 совет и рекомендация, которые помогут вам в разработке и проектировании приложений с использованием QlikView и Qlik Sense. Большинство из них относятся к обоим продуктам, но некоторые относятся только к QlikView. Это ясно показано в каждом разделе. Некоторые чисто технические, другие помогут при построении любых объектов.

  1. Делаем комментарий
  2. Комментируем оператор
  3. Делаем выход из скрипта
  4. Быстрое удаление
  5. Придерживаемся скрипта
  6. Ограничиваем загрузку
  7. Apply Map по умолчанию
  8. Подсказка для include
  9. Обозреватель таблиц/Модель данных – ваш друг!
  10. Избегайте if
  11. Краш-тест
  12. Лучше «Сохранить», чем сожалеть
  13. Храните данные снаружи
  14. Больше постоянных временных таблиц
  15. «Стоительные леса»
  16. Один календарь
  17. Храните все свои данные в одном месте
  18. Цветной Копир
  19. Интересное выражение
  20. Куда ушел этот Объект?
  21. Если есть сомнения, загуглите

 

  1. Делаем комментарий

Добавление комментариев к вашему скрипту может помочь другим понять, что происходит. Не тратьте время на комментирование каждого процесса, просто добавьте комментарии там, где есть сложность или где вы отклонились от того, что другие могут ожидать от вас.

Комментарии помогут вам вернуться к тому, что вы делали несколько месяцев или лет назад. Чтобы прокомментировать строку, просто добавьте // в начале.

 

  1. Комментируем оператор

Вы можете закомментировать части вашего скрипта, если не хотите запускать их, или они вызывает определенные проблемы.

Отметьте текст в QlikView, а затем щелкните правой кнопкой мыши, чтобы оставить комментарий или раскомментировать.

В Qlik Sense отметьте текст, затем используйте значок комментария.

Вы также можете закомментировать целый раздел скрипта, поместив маркеры в начале и в конце.

/* чтобы отметить начало закомментированного раздела.

*/ чтобы отметить конец закомментированного раздела.

Пример:

 

  1. Делаем выход из скрипта

Если вам нужно отладить сложный скрипт, создайте в ней вкладку с командой «EXIT SCRIPT» (Выход из скрипта).

Вы можете перемещать эту вкладку, чтобы завершить скрипт после любой из других вкладок.

 

  1. Быстрое удаление

Если у вас есть временные таблицы, удалите их, как только закончите работу с ними.

Это сэкономит память, а также облегчит отладку, поскольку каждая вкладка удаляет временные таблицы, поэтому у вас меньше шансов на дублирование данных и синтетические объединения.

 

  1. Придерживаемся скрипта

Если у вас есть расчеты и манипулирование данными, попробуйте выполнить их в скрипте.

В скрипте больше силы и гибкости.

Выполнение сложных действий в скрипт упрощает измерения и выражения для вас и других при создании визуализаций.

Это также может повысить производительность, так как процессорное время и оперативная память не занимаются логикой и перебором чисел, когда пользователи делают выбор в приложениях.

 

  1. Ограничиваем загрузку

Если у вас большие таблицы с продолжительным временем загрузки или сложными объединениями, вы всегда можете ограничить количество записей, загружаемых в режиме отладки.

Это доступно в QlikView и Sense, как показано ниже.

 

 

  1. Apply Map по умолчанию

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

Например. ApplyMap(‘MyMappingTable’, LookUpField, ‘No match’)

Найдите значение «No match» (Нет совпадений) в этом поле, чтобы найти дыры в данных сопоставления.

 

  1. Подсказка для include

При использовании включаемых файлов команда $(include) не будет работать автоматически (сообщение об ошибке не появится), если включаемый файл не найден.

Вместо этого используйте $(Must_Include), так как это приведет к сообщению об ошибке, если файл включения отсутствует.

 

  1. Обозреватель таблиц/Модель данных – ваш друг!

Используйте средство просмотра таблиц (QV) или средство просмотра моделей данных (QS) каждый раз, когда добавляете таблицы или вносите изменения в связи между таблицами.

Это поможет вам обнаружить неправильные объединения, искусственные объединения или случайные отделенные таблицы, прежде чем эти вещи вызовут несоответствия данных.

 

  1. Избегайте if

Избегайте использования операторов if в диаграммах и табличных выражениях, особенно если у вас большой объем данных.

Эта логика довольно тяжелая и может замедлить работу ваших приложений.

Анализ множества – лучший вариант…

… но это тема для отдельного поста.

 

  1. Краш-тест

Если происходит странная перезагрузка QlikView, и ваш скрипт, по-видимому, не является виновником этого, причиной может быть заблокированный файл QVD или файл журнала.

При некоторых обстоятельствах один из этих файлов может быть заблокирован и будет отказываться загружаться, вызывая ошибку в этом операторе LOAD или при запуске перезагрузки.

Попробуйте закрыть все экземпляры рабочего стола QlikView, а затем повторите попытку.

 

  1. Лучше «Сохранить», чем сожалеть

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

Это действительно полезно для предотвращения потери вашего красиво созданного скрипта из-за крошечной ошибки, которую вы случайно представили, что привело к фатальной ошибке сценария.

 

  1. Храните данные снаружи

В QlikView и Qlik Sense вы можете открыть недавно открытое приложение без данных.

Это полезно, если у вас есть огромное количество данных в приложении или если вы случайно создали монстра с плохим соединением.

В QlikView выберите «Start Page» (Начальная страница), затем «Recently Opened Documents» (Недавно открытые документы), выберите нужный документ, затем щелкните правой кнопкой мыши и выберите ‘Open <app name> Without Data’ (Открыть <имя приложения> Без данных).

В Qlik Sense щелкните правой кнопкой мыши приложение в концентраторе и выберите «Open without data» (Открыть без данных).

 

  1. Больше постоянных временных таблиц

Иногда мы используем временные таблицы, когда данные должны быть обработаны снова, или у нас есть таблицы в одном состоянии до их объединения. Эти таблицы очищаются до конца скрипта.

Отладка проблем в этих таблицах может быть затруднена, так как они временные. Но есть хитрость, которую можно здесь применить – использовать команду STORE для записи их в QVD. Файл QVD можно просмотреть после перезагрузки, чтобы увидеть, какие данные были в таблице на тот момент.

 

  1. «Строительные леса»

При работе с новыми данными происходит загрузка таблиц из исходного источника данных с помощью команды QUALIFY * в начале вашего скрипта, это обеспечит разделение всех таблиц, пока вы не сможете определить, какие ключевые поля вам нужны.

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

Я называю это «строительные леса», поскольку все это исчезает, когда появляется постоянная структура.

 

  1. Один календарь

В большинстве приложений используется выбор даты (финансовые периоды, диапазоны дат и т. д.). Лучший способ работать с этим – использовать основной календарь.

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

 

  1. Храните все свои данные в одном месте

Мы часто работаем с данными из более чем одной системы. Каждая система обычно имеет свою таблицу данных с датами и набором измерений.

Один из способов обойти потенциальную неразбериху, которая может возникнуть в ассоциативной модели (используемой QlikView и Qlik Sense) является объединение всех данных в одну таблицу. Это упрощает соединения и работает очень хорошо.

Единственное предостережение – убедитесь, что ваши агрегированные поля имеют разные имена, чтобы два или более типа данных неожиданно не смешались.

 

  1. Цветной Копир

QlikView позволяет копировать и вставлять цвета везде, где они используются. Даже те цвета, которые определены с помощью логики в выражении.

Просто щелкните правой кнопкой мыши в поле цвета и выберите «Copy» (Копировать), найдите место назначения для того же цвета, а затем выберите «Paste All» (Вставить все).

 

  1. Интересное выражение

QlikView также позволяет копировать выражения из одного объекта в другой. Это лучше, чем просто копировать текст выражения, так как он также копирует любое форматирование, например, цвета, форматирование текста и т. д.

Просто используйте правую кнопку мыши, чтобы копировать или вставить при необходимости.

 

  1. Куда ушел этот Объект?

В QlikView вы можете использовать функцию «условного показа», чтобы скрывать листы и объекты до тех пор, пока они не понадобятся для отображения.

Это работает очень хорошо, если вы не ошибетесь в логическом условии – тогда они могут исчезнуть без следа.

Их можно восстановить, выполняя для листов следующие действия:

Document Properties (Свойства документа) > Sheets (Листы)

Или следующее для объектов:

Sheet Properties (Свойства листа) > Objects (Объекты).

 

  1. Если есть сомнения, загуглите.

Множество информации о QlikView и Qlik Sense содержится на форуме Qlik.

Язык скриптов и функций QlikView и Qlik Sense практически идентичны, так что информация поможет для обеих систем в большинстве случаев.

 

Контрольный список по производительности Tableau

Спросите пользователей Tableau, что им больше всего нравится в Tableau, и они, скорее всего, скажут, что это возможность быстро и легко создавать потрясающие визуализации данных. Tableau был спроектирован с учетом удобства использования, очевидного в его доступном интерфейсе, но за этим интерфейсом скрывается мощный набор компонентов, способных создавать сложные визуализации данных с молниеносной скоростью.

Конечно, могут возникнуть проблемы. Контрольный список производительности Tableau даст вам рекомендации как повысить производительность.

Список

Контрольный список производительности Tableau разделен на семь основных категорий.

Данные

  • Пусть анализ будет простым. Работайте с подмножеством данных.
  • Вводите только данные, необходимые для анализа. Попробуйте добавить фильтр источника данных или использовать экстракт. При использовании объединения минимизируйте количество объединяемых таблиц.
  • Используйте «Describe» (Описать), чтобы исследовать измерения в новых наборах данных, не загружая их в viz (сочетание клавиш CTRL + E).
  • Удаляйте неиспользуемые столбцы (меры/измерения), чтобы минимизировать время обновления экстракта или время пользовательского запроса SQL.
  • Создайте опубликованный файл TDS для вашей бизнес-группы, а не для каждого аналитика, создающего собственный источник данных. Сюда входят все метаданные, связанные с измерениями, мерами, вычисляемыми полями, иерархиями, наборами, параметрами и соглашениями об именах.
  • Используйте экстракты везде, где это возможно, чтобы ускорить производительность. Скрывайте неиспользуемые и конфиденциальные поля. Сверните детализацию данных путем предварительной агрегации или фильтрации. Разбейте иерархии только на видимые измерения.

Фильтрация

  • Минимизируйте количество быстрых фильтров. Используйте действия фильтра панели инструментов там, где это возможно.
  • Избегайте выбора «Only relevant values» (Только соответствующие значения) для ваших быстрых фильтров. Это требует последовательных запросов. Не используйте это, когда не нужно.
  • Избегайте быстрых фильтров высокой мощности (множественный выбор или выпадающие списки). Быстрые фильтры высокой мощности медленно загружаются и отображаются.
  • Избегайте быстрых фильтров или действий, которые управляют фильтрами контекста. Они требуют перезагрузки таблицы контекста, и их следует избегать везде, где это возможно.
  • Пусть диапазон быстрого фильтра будет простым. Чем сложнее диапазон, тем медленнее запрос.
  • Замените быстрые фильтры, показывающие «Only Relevant Values» (Только релевантные значения) и большое количество быстрых фильтров, на фильтрацию с панели мониторинга. Они будут каскадно взаимодействовать с вашим пользователем и работать быстрее.
  • Не ленитесь с пользовательскими фильтрами. Безопасность от пользовательских фильтров может повлиять на производительность на сервере Tableau, поскольку сервер не может совместно использовать соединения и кэши запросов, если пользовательские фильтры активны. Подумайте о создании сводного представления, которое представляет собой независимый от пользователя обзор с использованием предварительно агрегированного извлечения со скрытыми основными данными. Для подробного просмотра ограничьте его конкретными пользователями или группами активных каталогов вместо пользовательских фильтров.

Пользовательский SQL

  • Ограничьте пользовательский SQL в живых соединениях так как они могут быть неэффективными. Там, где это возможно, создайте представление на сервере базы данных для реализации вашего собственного SQL и подключите Tableau к вашему представлению.
  • Избегайте параметров в пользовательском SQL в Tableau. Tableau оборачивает пользовательский SQL в подзапрос, который многие базы данных плохо обрабатывают. Рассмотрите возможность создания представления в базе данных или используйте объединение с несколькими таблицами с фильтрами.
  • Следите за бесполезными стоками, например, ORDER BY. Tableau пересортирует данные после загрузки в любом случае.

Вычисления

  • Используйте рассчитанные поля осторожно. Подумайте о типе данных при написании кода расчета. Числовые и логические> дата> строковые вычисления, когда дело доходит до производительности.
  • Ограничивайте смешанные вычисления. Они требуют последовательного запроса нескольких источников данных и могут занимать много времени. Где это возможно, создайте представление на сервере базы данных.
  • Избегайте расчетов на уровне строк с использованием параметров.

Построение

  • Избегайте множества отметок. Больше отметок = больше времени рендеринга. Ограничивайте использование подробных текстовых таблиц с большим количеством отметок.
  • Минимизируйте размер файла изображений или пользовательских форм, где это возможно. Храните изображения размером менее 50 КБ.
  • Если используются пользовательские рисунки, используйте PNG с прозрачным фоном вместо JPG. Отображения станет чище, а файлы форм займут меньше места.

Локальные вычисления

  • Даже если рабочая книга опубликована на сервере Tableau, локальные вычисления по-прежнему влияют на производительность. По возможности используйте Tableau Server, ограничивая локальные вычисления, такие как группы, иерархии, контрольные линии, вычисления таблиц и смешивание.
  • Табличные вычисления довольно мощные, но они могут выполняться медленно. Они зависят от локального механизма вычислений и могут требовать много памяти.

Макет информационной панели

  • Ограничивайте количество рабочих листов на информационной панели. Если у вас есть более четырех визуализаций на одной панели, лучше пересмотрите ее.
  • Исправьте размер информационной панели относительно потребления конечным пользователем. Автоматическое определение размера менее эффективно, чем указание размера панели.

 

11 лучших советов и приемов QlikView

 1.  Выбор нескольких объектов – для этого просто выберите объекты с помощью мыши (так же, как вы выбираете несколько элементов на рабочем столе компьютера). Если ваша панель управления огромна, и вы не видите все объекты, которые хотите выбрать, или они просто не расположены рядом, используйте Shift. Держите его нажатым и добавляйте объекты в выделение, щелкая по их названиям.

При выборе с помощью мыши убедитесь, что выбран весь объект. Если вы пропустите 1 пиксель, QV не добавит этот объект в выделение.

2.  Массовое изменение свойств для нескольких выбранных объектов. Щелкните правой кнопкой мыши по заголовку любого из выбранных объектов и выберите «Properties» (Свойства) (или просто нажмите Ctrl + Enter). После этого вы сможете изменить параметры Font/Layout/Caption (Шрифт/Макет/Заголовок) для всех объектов одновременно.

 

3.  Продублируйте любой существующий объект QlikView, перемещая его с нажатой клавишей Ctrl. Просто отпустите кнопку мыши, чтобы создать копию, когда появится маленький зеленый крестик:

 

4. Перемещайте заблокированные объекты с помощью клавиши Alt. Перемещение заблокированных объектов с помощью клавиши весьма простое: если у объекта в конструкторе нет опции «Allow move/size» (Разрешить перемещение / размер), вы не сможете его переместить. Если, конечно, вы нажмете Alt, прежде чем пытаться это сделать. Курсор изменится, чтобы уведомить вас о том, что объект является подвижным:

 

5. Изменение размера / перемещение частей графика. Удерживайте Ctrl + Shift, когда выбран объект Chart (График). Используя этот метод, вы можете, например, переместить (и закрепить) легенду внизу диаграммы:

 

6.  Перемещение объекта между листами. Чтобы переместить объект на другой лист, выберите его и перетащите поверх нужного имени листа. Когда появится белая стрелка (как на картинке) – отпустите кнопку. Это очень полезно, так как стандартная операция «Вырезать -> Вставить» изменяет идентификатор объекта, что не очень хорошо, когда вы строите макрос вокруг существующей структуры. Этот метод будет перемещать именно тот объект, который перетаскивается, вместо создания нового экземпляра этого объекта.

 

7.  Перемещение выбранного объекта на 1 пиксель в каждом направлении с помощью Ctrl + клавиш со стрелками – перемещение выбранного объекта на 1 пиксель (это также работает с заблокированными объектами!)

8.  Перемещение выделенного объекта на 10 пикселей в каждом направлении с помощью клавиш Ctrl + Shift  + клавиши со стрелками – переместите выбранный объект на 10 пикселей (это также работает с заблокированными объектами!):

9.  Переключение между открытыми файлами QVW, нажимая Ctrl + TAB

10.  Открыть окно с подробной технической информацией документа – нажмите Ctrl+ Shift + Q

11.  Самые полезные (на мой взгляд) комбинации Qlikview:

  • Обзор выражений: Ctrl+ Alt + E
  • Открыть редактор скрипта: Ctrl+ E
  • Перезагрузить документ: Ctrl+ R
  • Активировать предыдущий/следующий лист: F6/ F7
  • Открыть свойства объекта: Alt+ Enter
  • Комментировать/раскомментировать код: Ctrl+ K C / Ctrl + K U
  • Ввести пример кода: Ctrl+ Q Q

 

Блок-схема оптимизации производительности Tableau

Каждый, кто смотрит на информационную панель, ожидает, что она быстро загрузится и отреагирует на действия. Определение слова «быстрый», варьируется у разных людей. Загрузка, которая занимает минуты, может ощущаться быстрее учитывая усилия, которые требовались до автоматизации в Tableau. Независимо от эталона, мы хотим, чтобы все было быстрее. Теперь у нас есть руководство по устранению неполадок с производительностью, которое поможет вам выполнить шаги по улучшению времени загрузки панели инструментов Tableau.

 

Устранение проблем с производительностью таблицы

Мы начнем с простого, общего вопроса: «Почему моя информационная панель Tableau работает медленно?». Если мы знаем, что вызывает замедление, мы спрашиваем: «Что я могу сделать, чтобы это исправить?» Ответы делятся на несколько основных категорий:

  • Нагрузка на серверах Tableau
  • Чувствительность базы данных (включая экстракты из Tableau)
  • Количество данных для отображения
  • Обновление элементов пользовательского интерфейса, таких как выпадающие фильтры
  • Эффективность расчёта

Контрольный список производительности Tableau охватывает эти области, объясняет возможные проблемы и предлагает решения для каждой из них. Но не каждая часть этого контрольного списка будет применяться к вашей ситуации. Что нужно вам, так это пошаговое руководство, которое поможет сузить возможности, игнорировать вещи, которые не применяются, и сосредотачиваясь на тех, которые действительно работают.

Первые несколько шагов в потоковой диаграмме помогут вам определить, есть ли проблема с сервером или базовой архитектурой данных. Отсюда вы сможете найти проблемы с дизайном информационной панели, расчетами и другими распространенными проблемами.

Вы можете скачать полную PDF-версию диаграммы. Вот краткий обзор первой страницы

Не забывайте: время загрузки – это еще не все

Я всегда подчеркиваю, что понятие «медленный» не ограничивается временем загрузки. Оценивая эффективность, не забудьте задать себе и своей аудитории следующие вопросы:

  • Как долго люди должны ждать изменений в дизайне панели инструментов?
  • Сколько времени требуется пользователю, чтобы понять представленные данные?
  • Требуется ли несколько кликов (и ждать между каждым кликом), чтобы получить желаемое представление?

Даже если ваша панель инструментов загружается менее чем за пять секунд, вы, возможно, не решили важные проблемы с производительностью. Если для того, чтобы что-то изменить, требуются дни или недели, что затрудняет использование или понимание данных, лучше сосредоточьте внимание на решении этих проблем. Люди дадут вам несколько секунд на загрузку, если это сэкономит им время и предотвратит разочарование.

Дальнейшее чтение

Любой, кто разрабатывает информационные панели Tableau, должен прочитать официальный документ Tableau «Designing Efficient Workbooks». Это долго, но оно стоит потраченного времени.

 

 

Советы и подсказки по QlikView

Отладка set analysis

Set analysis – это способ сделать поднабор данных из существующего набора данных, уже загруженного в Qlikview. Это одна из самых мощных функций QlikView. Тем не менее, ее отладка может быть сложной задачей для разработчиков. Лучший способ отладить уже написанный синтаксис – использовать одинарные кавычки и текстовый объект. Вот как:

  • Создать новый текстовый объект;
  • Откройте окно « Edit expression» (Редактировать выражение);
  • Напечатайте или вставьте установленное выражение, которое вы хотите отладить;
  • Заключите ваше выражение в одинарные кавычки.

Это отобразит полное выражение в текстовом объекте, как показано ниже:

А самое замечательное в том, что по мере того, как мы делаем выбор в панели управления, значение в кавычках также будет меняться (в этом случае PeriodID), помогая выяснить фактические значения, которыми заполняется выражение при выборе.

 

Чистка

Всякий раз, когда мы делаем какие-либо выделения в гистограмме в QlikView, выделяется только выбранное значение, а остальное игнорируется. Например, на скриншоте внизу, как только значение будет выбрано в поле списка месяцев, все остальные значения больше не будут доступны на экране, и на столбчатой диаграмме будет отображаться только выбранное значение.

Что если мы хотим отобразить все столбцы в гистограмме и просто выделить тот, который выбран в данный момент? Этого можно достичь с помощью анализа множеств:

  • Щелкните правой кнопкой мыши на свойствах диаграммы;
  • Перейти на вкладку «Expressions» (Выражения);
  • На данной гистограмме «месяц» — это измерение. В разделе «Определение» введите “=sum({<Month = >}Sales)”. Этот шаг гарантирует, что независимо от выбора отображаются все столбцы в гистограмме;
  • Наконец, нам нужно выделить столбец с выбранным значением. Для этого на вкладке «Expressions» (Выражения) разверните выражение;

  • Выберите «Background Colour» (Цвет фона) и в раздел «Definition» (Определение) введите “=if(Month = GetFieldSelections(Month), Green())” – это выделит текущий выбранный столбец зеленым цветом, как показано ниже.

 

 

Работа с датами

Работа с датами – это всегда проблема независимо от используемых инструментов. И она становится еще более проблематичной, когда базовый источник данных хранит даты в виде строк, а не фактических дат. К счастью, Qlikview предлагает функции интерпретации, которые могут помочь в таких ситуациях. Функция интерпретации date#() интерпретирует строку как фактическую дату, используя заданный формат:

Это преобразует строку в фактический формат даты, и вы можете использовать другие функции даты как обычно.

 

 

10 советов и рекомендаций по визуализации данных в QlikView

Введение

QlikView – это популярный и простой в освоении инструмент для визуализации данных. Его простой интерфейс делает его фаворитом среди новичков в аналитике. Я тоже полюбил его. На самом деле, мое путешествие в бизнес-аналитику началось именно с QlikView.

За эти годы я обнаружил ряд способов повысить производительность в QlikView. Я нашел их после того, как провел бессчетные часы, работая над этим инструментом. Наконец, я сформулировал эти 10 рекомендаций, которые помогут вам работать быстрее.

Список советов и рекомендаций

  1. Копирование объектов
  2. Копирование выражений
  3. Перемещение компонентов диаграммы
  4. Выбор нескольких объектов
  5. Добавление визуальных элементов в таблицу
  6. Ограничение измерений диаграммы
  7. Условное отображение или скрывание объектов
  8. Использование комментариев в скриптах
  9. Использование вкладок в скриптах
  10. Сочетания клавиш

 

Копирование объектов

Часто мы создаем объекты, которые очень похожи на один из существующих объектов с незначительными изменениями в измерении, выражении или любых других параметрах. Этот процесс требует времени.

Но вы можете сделать все намного быстрее. Просто скопируйте существующий объект и внесите необходимые изменения. Вы можете скопировать и объект лист и объект диаграмму. Метод заключается в следующем:

  • Объект диаграмма: щелкните правой кнопкой мыши по заголовку диаграммы и выберите команду «Clone» (Клонировать). Это создаст копию объектов диаграммы. Альтернативный метод – щелкнуть по заголовку диаграммы, удерживая клавишу CTRL, перетащить объект в другое место и отпустить кнопку мыши.
  • Объект лист: щелкните правой кнопкой мыши на вкладке листа и выберите команду «Copy Sheet» (Копировать лист). Это создаст такой же лист с именем «Копия <имя текущего листа>». Этот новый лист будет создан в конце всех листов.

Копирование выражений

Во время разработки панели мы пишем выражения (простые и сложные). Бывают ситуации, когда мы в конечном итоге пишем похожие выражения для разных объектов диаграммы. Чтобы работать эффективнее, мы можем повторно использовать существующие выражения. Давайте посмотрим, как это сделать:

  • Откройте выражение. Скопируйте и вставьте его в новое выражение
  • Щелкните правой кнопкой мыши по выражению. Выберите команду «Copy» (Копировать). Затем вставьте его в окно выражения. Здесь вы не только копируете код выражения. Новый созданный столбец имеет те же свойства, что и исходное выражение: ширина столбца, выравнивание, числовой формат и т. д.

  • При разработке дэшборда существуют некоторые выражения, которые являются общими для различных объектов. В этом случае мы можем сохранить выражение в переменной и получить доступ к нему, используя имя переменной, и используя символ доллара. Для этого сначала сохраните выражение в переменной (зайдите в Settings –> Variable Overview (Настройки -> Обзор переменной) и сохраните выражение).

Чтобы получить к нему доступ в любых объектах диаграммы, напишите выражение как $(Variable_Name)

Это повышает точность и схожесть всего дэшборда, поскольку мы используем одно и то же выражение.

Перемещение компонентов диаграммы

По умолчанию, положение компонентов диаграммы фиксируется с правой стороны. Но в некоторых случаях для лучшей визуализации может потребоваться сменить положение.

  • Допустим, мы хотим переместить влево легенду для следующей круговой диаграммы.

  • Теперь выберите график и нажмите Ctrl + Shift. Вы увидите красную рамку вокруг каждого объекта графика

  • Теперь перетащите отдельный компонент влево (или в другое место).

Выше показано, как переместились легенды диаграммы влево. Вы также можете изменить размер отдельного компонента, используя двустороннюю стрелку.

Выбор нескольких объектов

Иногда мы хотим выполнить аналогичные операции, такие как изменение размера шрифта, макета, удаление нескольких объектов. В таких случаях мы выбираем все объекты и выполняем необходимые операции. Для выбора сначала выберите один объект, затем нажмите клавишу SHIFT, затем нажмите на название других объектов. Теперь вы можете выполнить групповую операцию (применимо) над этими объектами, например, удалить, используя опцию свойств (щелкнув правой кнопкой мыши по любому выбранному объекту), изменить макет, шрифт и заголовок.

Добавление визуальных элементов в таблицу

Обычно, в табличном представлении мы показываем только цифры. Однако можно сделать таблицу более информативной, добавив в нее визуальные элементы. В Qlikview мы можем применить к таблице три метода визуализации:

  • Условное форматирование
  • Представление изображения
  • Мини-график (известный в Excel как «Спарклайн»)

Ограничение измерений диаграммы

Посмотрите на представленный ниже график, у него слишком много измерений, что затрудняет возможность сделать выводы о данных.

Мы можем решить эту проблему:

  • Ограничение размера: в окне свойств объекта диаграммы вы можете найти параметр «Dimension Limits» (Пределы измерения), где вы можете ограничить измерение на основе значения, например, показать только 10 самых больших, первые 10, 10 самых маленьких, показать значения, которые превышают или равны 5% от общего числа, показать значения, которые содержат до 80% от общего числа.

  • Включение полосы прокрутки для измерения: эта опция доступна на вкладке «Presentation» (Презентация) окна свойств диаграммы. Вы можете включить полосу прокрутки по оси X и установить ограничение на количество отображаемых элементов (см. скриншот внизу). Это одна из менее известных полезных функций Qlikview. Здесь вы также можете отобразить верхние 10, нижние 10, отсортировав диаграмму по выражению в порядке убывания или возрастания.

Условно показать или скрыть объекты

Мы можем показать или скрыть объекты Qlikview в зависимости от требований. Это помогает эффективно оптимизировать площадь объекта листа. На вкладке «Макет» окна свойств есть возможность показать или скрыть объект листа (всегда или условно). Здесь вы можете написать выражение или использовать переменную для управления им. Обычно разработчики используют «Buttons» (Кнопки) для изменения значения переменной, например, одна кнопка назначает значение «0» переменной, а другая – «1».

Мы также можем отобразить или скрыть измерение и выражение объекта диаграммы.

Использование комментариев в скриптах Qlikview

Хорошие программисты всегда добавляют комментарии к сегментам кода. Это облегчает чтение и отладку. В сценариях Qlikview эта практика также настоятельно рекомендуется. Есть несколько способов создания комментариев в скрипте.

  • // для однострочных комментариев
  • /* …*/ для редактирования блока

Использование вкладок скриптов в Qlikview

Чтобы обеспечить удобство сопровождения сценариев, мы следуем модульной структуре в кодировании. Аналогично, мы должны использовать вкладку скриптов для стандартизации наших скриптов. Это помогает быстрее редактировать и отлаживать их. Скрипты Qlikview запускаются сверху вниз на каждой вкладке, от крайней левой вкладки до крайней правой.

Кроме того, вы можете заметить, что для XY Example, FilmsDatabase, Rating и Dictionary используются разные вкладки.

Горячие клавиши

Перед проверкой этих ярлыков сначала включите опцию «Show Shortcut keys in ScreenTips» (Показать сочетания клавиш в подсказках). При этом будут отображаться сочетания клавиш всякий раз, когда мы наводим указатель мыши на значки меню. Так же, как и в Microsoft Excel. Это очень помогает в запоминании сочетаний клавиш.

Чтобы включить это, щелкните правой кнопкой мыши на область панели инструментов -> выберите команду «Customize» (Настройка) -> перейдите на вкладку «Options» (Параметры) -> установите флажок «Show Shortcut keys in ScreenTips» (Показать сочетания клавиш в подсказках).

 

Ниже показаны некоторые полезные сочетания клавиш:


CTRL + B:         Добавить закладку
CTRL + G:         Включение или выключение сетки дизайна макета
CTRL + E:         Редактор скрипта
CTRL + N:         Новый файл
CTRL + O:         Открыть файл
CTRL + S:         Сохранить
CTRL + P:         Распечатать
CTRL + Q:         Текущие выборки
CTRL + R:         Загрузка скрипта
CTRL + T:         Обозреватель таблиц
CTRL + SHIFT + L: Блокировать все выбранное
CTRL + SHIFT + U: Разблокировать все выбранное
CTRL + SHIFT + D: Очистить все выбранное
CTRL + SHIFT + S: Все скрытые листы и объекты листа видны
CTRL + ALT + D:   Свойства документа
CTRL + ALT + S:   Свойства листа
CTRL + ALT + V:   Обозреватель переменных
CTRL + ALT + E:   Обозреватель выражений
CTRL + M:         Модуль редактирования (Макро кодирование)
ALT + ENTER:      Свойства… (открывает окно свойств в активном объекте)
F6:               Активирует лист справа от активного листа
F7:               Активирует лист слева от активного листа

 

Финальные заметки

Есть и другие подсказки, как сделать вашу работу быстрее, у вас будет больше времени для изучения новых вещей самостоятельно. Визуализация данных так же важна, как и их анализ. Следовательно, вы должны стремиться становиться лучше день ото дня в визуализации данных.

В этой статье мы рассмотрели советы и рекомендации QlikView, которые улучшат ваш опыт разработки дэшборда. Здесь я в основном рассмотрел советы и рекомендации, связанные с интерфейсом или дизайном, такие как копирование объектов и выражений, работа с компонентами диаграммы, выбор нескольких объектов, ограничение размеров, визуализация с таблицей, условное отображение или скрытие объектов, рекомендации по созданию сценариев и, сочетания клавиш.

 

63 queries in 0,396 seconds