42
Предыдущая Следующая Практические вопросы по QlikView – Часть 2 <<< Вернуться в основной раздел “QlikView — краткий учебник” Contents [hide] 1 Рекомендации по проектированию модели данных? 2 Способы тестирования приложений QlikView? 3 Аутентификация и авторизация в QlikView? 4 Сколько измерений используется в Guage Chart? 5 Что такое анализ множеств (Set Analysis)? 6 Сбор требований (Requirement Gathering)? 6.1 Вариант 1 – Сбор требований 6.2 Вариант 2 – Чек-лист сбора требований: 6.3 Вариант 3 – стандартная структура требований в BI проекте 6.4 Краткий шаблон для сбора требований по QlikView (BI-проект) 7 Лучшие техники (методы) моделирования данных? 8 Что такое QlikView-сервер, Publisher и Access Point? 9 Диаграмма трех состояний сред QlikView (Среды “Development” -> “Testing” -> “Production”) 10 Что такое инкрементальная загрузка данных (Incremental Load) и как ее организовать? 10.1 Вариант 1 “INSERT ONLY” 10.2 Вариант 2 “INSERT & UPDATE” 10.3 Вариант 3 “INSERT, UPDATE & DELETE” 10.4 Вариант 4 “INSERT, UPDATE & DELETE” при наличии в базе данных флага DeletionFlag 10.5 Вариант 5 “Дополнительные правки итогового скрипта для Incremental Load” 10.6 Кейс “Инкрементальная загрузка данных – организация QVD-файлов” 10.6.1 Код решения 11 Что такое CSV Batch Load и как ее организовать в QlikView? 11.1 Немного о PHP 11.2 Возможности по автоматизации интеграции с внешними системами через Web-сервисы 12 Что такое дашборд (приборная панель или панель индикаторов)? 13 Что такое Ad-hoc отчеты в QlikView и как это делается? 14 Что такое Data Island в QlikView и как его использовать? Опубликовано 11/07/2015 Авторский сайт IT-консультанта Тематика блога: Бизнес-анализ, финансовый менеджмент, управленческий учет, бизнес-планирование, IT технологии, BI технологии, Управление проектами. Поиск Главная QlikView статьи Hyperion Planning О себе Карта сайта Библиотека Отзывы о компаниях Услуги

Практические вопросы по QlikView - часть 2

Embed Size (px)

Citation preview

Page 1: Практические вопросы по QlikView - часть 2

← Предыдущая Следующая →

Практические вопросы по QlikView – Часть 2

<<< Вернуться в основной раздел “QlikView — краткий учебник”

Contents [hide]

1 Рекомендации по проектированию модели данных?2 Способы тестирования приложений QlikView?3 Аутентификация и авторизация в QlikView?4 Сколько измерений используется в Guage Chart?5 Что такое анализ множеств (Set Analysis)?6 Сбор требований (Requirement Gathering)?

6.1 Вариант 1 – Сбор требований6.2 Вариант 2 – Чек-лист сбора требований:6.3 Вариант 3 – стандартная структура требований в BI проекте6.4 Краткий шаблон для сбора требований по QlikView (BI-проект)

7 Лучшие техники (методы) моделирования данных?8 Что такое QlikView-сервер, Publisher и Access Point?9 Диаграмма трех состояний сред QlikView (Среды “Development” -> “Testing” -> “Production”)10 Что такое инкрементальная загрузка данных (Incremental Load) и как ее организовать?

10.1 Вариант 1 “INSERT ONLY”10.2 Вариант 2 “INSERT & UPDATE”10.3 Вариант 3 “INSERT, UPDATE & DELETE”10.4 Вариант 4 “INSERT, UPDATE & DELETE” при наличии в базе данных флага DeletionFlag10.5 Вариант 5 “Дополнительные правки итогового скрипта для Incremental Load”10.6 Кейс “Инкрементальная загрузка данных – организация QVD-файлов”

10.6.1 Код решения11 Что такое CSV Batch Load и как ее организовать в QlikView?

11.1 Немного о PHP11.2 Возможности по автоматизации интеграции с внешними системами через Web-сервисы

12 Что такое дашборд (приборная панель или панель индикаторов)?13 Что такое Ad-hoc отчеты в QlikView и как это делается?14 Что такое Data Island в QlikView и как его использовать?

Опубликовано 11/07/2015

Авторский сайт IT-консультантаТематика блога: Бизнес-анализ, финансовый менеджмент, управленческий учет, бизнес-планирование, IT технологии, BIтехнологии, Управление проектами.

Поиск

Главная QlikView статьи Hyperion Planning О

себе

Карта сайта Библиотека Отзывы о компаниях

Услуги

Page 2: Практические вопросы по QlikView - часть 2

15 Что такое DMS авторизация?16 Что такое секция доступа (Section Access)?17 Как задаются переменные и разница между операторами SET и LET?18 Как написать динамический SQL запрос в QlikView?19 Как найти интервал времени в скрипте QlikView?20 Описание функции Keep в QlikView21 Чеклисты по разработке

21.1 Производительность модели данных21.2 Лучшие практики проектирования (дизайна)21.3 Производительность интерфейса21.4 Лучшие практики по написанию скриптов

22 Что такое drill?23 Что такое MAD фреймворк и DAR методология?24 Как получить переменную с одинарной кавычкой в QlikView?25 Удаление таблиц или полей в QlikView26 Как запустить процедуру PL/SQL из скрипта QlikView?27 Как включить подробное логирование в QlikView?28 Как сделать URL-ссылки в таблице?29 Как создать выпадающий список для присвоения значения переменной в QlikView?30 Обработка нестандартных дат – форматирование дат в QlikView31 Дата минус количество дней – как получить?32 Как вывести в Straight Table топовые продукты при использовании в рассчитываемом измерении ValueList()33 Как исключить влияние выборок во всех измерениях, кроме перечисленных, на конкретную диаграмму вQlikView?34 Массовая загрузка файлов в QlikView из директории (числов файлов не известно заранее)35 Как вытащить из модели/приложения QlikView данные в qvd или csv?36 “Импровизированный” генератор случайных чисел в QlikView37 Создание календаря в QlikView38 Создание исполняемого файла (Executable application.exe in qlikview)39 Как через url открыть другой файл QlikView40 Получить текущую директорию и родительскую директорию в скрипте QlikView

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

Рекомендации по проектированию модели данных?

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

2. В модель данных необходимо включать только те поля и строки данных, которые действительно Вам необходимы.Лишние поля могут вызвать путаницу, проблемы с производительностью, т.е. все это приводит в конечном счете кдополнительным усилиям.3. Особое внимание следует уделить также ассоциативной модели QlikVIew. Любые поля с одинаковыми именами ведут ксозданию связей между таблицами. Если в двух таблицах присутствует более одного одинакового поля, то создастсясинтетический ключ – чего всегда следует избегать. Если Вы видите дополнительные таблицы в модели данных сознаком доллара в имени, то нужно пересмотреть и улучшить вашу модель.4. Потоки данных из нескольких источников желательно объединять при помощи метода CONCATENATE в одну таблицуфактов, а не пытаться выполнить JOIN таблиц. JOIN всегда приводит к созданию множества колонок с одинаковымиименами и значениями, поэтому желательно направлять данные в одно поле (с одинаковым смыслом для несколькихпотоков данных).5. Сделайте все возможное для того, чтобы упростить и рационализировать модель данных в сценарии загрузки.6. Используйте при извлечении данных QVD слои. Это необходимо для инкрементальной загрузки данных (incrementalloads), а также очень полезно для разделения извлеченных данных на части, которыми легко управлять. Подходдробления загрузки по QVD файлам может быть полезен при тестировании. Процесс загрузки будет рассматриваться какнабор модулей и, поэтому, процесс тестирования можно будет проводить по мере готовности каждого модуля.Дополнительным плюсом использования QVD слоя является возможность параллельно извлекать данные из разныхисточников или разных таблиц. Скорость считывания QVD файлов документом QlikView намного производительней, чем

Page 3: Практические вопросы по QlikView - часть 2

если извлекать данные из базы данных.7. Избегайте возникновения в моделях данных синтетических ключей, т.к. они могут ухудшать производительностьработы, а также могут вызывать сбои. Создавайте свои собственные составные ключи. Следите за тем, чтобы непроисходило объединение таблиц (Join) по не числовым полям, потому что любое несоответствие строковых полейприведет к ошибочным моделям данных.8. Исправляйте циклические ссылки (Circular references), которые возникают, когда соединяются три и более таблиц поодинаковым полям (образуется кольцо из таблиц).

Схема разработки приложений при использовании QVD слоев:

Способы тестирования приложений QlikView?

1. Выполняйте основную агрегацию на главной таблице фактов. Если Вы используете инкрементальную загрузку сдинамическим условием “Where”, то очень важно не допустить логическую ошибку при построении запроса в условииwhere. Для того, чтобы уменьшить потенциальную ошибку, необходимо проверять число строк и итоговые суммы пополям с мерами (measure fields) по сравнению с исходными таблицами (источниками данных). Таким образом, Вы будетевсегда знать, что извлекли полный набор данных. Это будет первая проверка в QlikView приложении. Для получениядополнительной помощи, Вы можете использовать системные поля, такие как $Field, $FieldNo, $Fields, $Info, $Rows,$Table.2. Не делайте агрегацию на ключевых полях: Ключевые поля в QlikView всегда должны использоваться только для JOINтаблиц (соединения таблиц). Убедитесь, что Вы используете ключевое слово “HidePrefix” вместе с установкойпеременной в SET и используйте одинаковые специальные символы в качестве префикса для ключевых полей(Например, %CustomerKey вместо [Customer Key]. При таком подходе, Вы или другие разработчики не будутиспользовать это поле (даже случайно) при реализации интерфейсов. Очень важно помнить, что ключевые поля неследует использовать в диаграммах.3. Проверьте плотность информации (Information Density) и коэффициент (доля) подмножества (Subset Ratio): Всегдавыполняйте проверку целостности верхнего уровня модели данных. Вы можете посмотреть Information Density и SubsetRatio в Table View (Ctrl + T), наводя на поля. Нужно исследовать, где Information Density меньше чем 100% иинформировать Архитектора о потенциальных проблемах с NULL значениями. Необходимо проверять Subset Ratio передвыполнением JOIN на таблицах.

Page 4: Практические вопросы по QlikView - часть 2

Определение Information Density и Subset Ratio:

Information Density (Плотность информации) – является числом записей со значениями (т.е. не NULL) в этом полепо сравнению с общим числом записей в таблице.Subset Ratio (Доля Подмножества) – является числом уникальных значений этого поля, находящегося в этойтаблице, по сравнению с общим числом уникальных значений этого поля (т.е. и в других таблицах).

4. Проверьте строку подключения в скрипте QlikView: Логические баги очень сложно отловить. Обычно, разработчикутребуется извлечь данные из более чем одного источника. А иногда требуется извлечь данные в нескольких средах, гдеимеются одинаковые схемы. Убедитесь, что строки подключения к Excel файлам и базам данных находятся в одномцентрализованном месте.5. Отсутствие синтаксических ошибок не означает отсутствие логических ошибок. Set Analysis (анализ множеств) – этоинтересная особенность QlikView. Анализ множеств будет очень полезен для контроля, идентификации и модификацииподмножества данных. Обычно, отсутствие синтаксической ошибки не гарантирует отсутствие логической ошибки.Логические ошибки гораздо страшнее синтаксических. Поэтому всегда проверяйте выражения в Set Analysis по аналогиис SQL запросами. Set modifier эквивалентен Where в SQL запросах, а Set operators эквивалентны реляционнымоператорам в SQL.6. Проверяйте отсутствие NULL в таблицах с измерениями (dimensional tables): Как правило, в таблицах с измерениями недолжны присутствовать NULLs. Поля измерений должны иметь 100% information density, но на практике всегда оченьсложно этого достигнуть. Поэтому важно заострять внимание на dimensional таблицах. Сравнивайте пропущенные данныес доступными в источниках данных.

Цели фаз тестирования на проектах QlikView:

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

Аутентификация и авторизация в QlikView?

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

Page 5: Практические вопросы по QlikView - часть 2

Первые два шага аутентификации – это обработка данных web-слоем (QlikView Server или IIS). На третьем шаге веб-слойпередает идентифицирующую информацию на QlikView сервер, используя QVP протокол. Четвертый шаг – этоавторизация, которая выполняется на сервере QlikView и которая использует группы, которые разрешены DirectoryService Connector.

Существуют несколько больших преимуществ у данного подхода:

QlikView не нужно хранить пароли, они хранятся у провайдера идентификации, таких как LDAP или AD.Могут быть применены стандартные процедуры для управления пользователями, что позволяет соблюдатьполитики безопасности, которые приняты в компании.Существует возможность настройки аутентификации с помощью внешних провайдеров идентификации, такихGoogle.Вся авторизация производится в backend, что упрощает защиту.

Роль Directory Service Connector в данной цепочке несколько размыта тем фактом, что почти все компоненты QlikViewего используют. Web-слой, QlikView сервер, QlikView Management Service и QlikView Publisher используют Directory ServiceConnector для различных целей.Большинство компонентов QlikVIew используют Directory Service Connector для авторизации или для полученияинформации о пользователях, за исключением тех случаев, когда используются Custom Users. Если Вы используетеCustom Users, то они сначала проходят аутентификацию к Directory Service Connector, которая в отдельных случаяххранит логины и пароли пользователей.

Сколько измерений используется в Guage Chart?

“Guage” диаграмма – это диаграмма, которая отображает относительные данные без разбивки данных по измерениям. Вдиаграмме типа “Guage chart” указываются выражения с применением Set Analysis. Set Analysis может быть завязан насписок элементов того или иного измерения. Но напрямую данная диаграмма измерений не содержит.

Page 6: Практические вопросы по QlikView - часть 2

Существует один прием, при помощи которого можно осуществить отображение нескольких стрелочек на диаграммеGuage Chart.Делаем отдельно, например, 4 диаграммы (причем у трех фон делаем прозрачный):

Далее совмещаем все 4 диаграммы и таблицу со значениями по регионам:

Наиболее часто используется отображение Guage chart в таблице:

Page 7: Практические вопросы по QlikView - часть 2

Что такое анализ множеств (Set Analysis)?

Set Analysis (Анализ множеств) – это основной инструмент, который позволяет в сложных приложениях ограничиватьподмножество данных для построения различных диаграмм, а также позволяет завязываться на конкретные выборки вконкретных измерениях. Фактически, множества задают контекст в expression, в разрезе которого мы анализируемданные.

У анализа множеств (set analysis) существуют 3 важных компонента:

Page 8: Практические вопросы по QlikView - часть 2

Идентификатор – определяет состояние набора данных нашего подмножества.Оператор – определяет операции над множествами данных (Operator эквивалентен операциям реляционной алгебры вSQL).Модификатор – задает дополнительные условия для выбранного подмножества (Modifier эквивалентен условию “Where”в SQL запросах).***Более подробная информация отображена в статье: http://ivan-shamaev.ru/set-analysis-in-qlikview/

Сбор требований (Requirement Gathering)?

Вариант 1 – Сбор требований

1. Определение и описание источников данных;2. Определение таблиц фактов;3. Определение таблиц с измерениями и их взаимосвязей с таблицей фактов (т.е. определение ключевых полей).Описание или изучение существующего словоря данных (Data Dictionary);4. Определение списка KPI, которые будут показаны на дашборде (dashboard), таких как Продажи, Прибыль, Прибыль %,Скидка, Маржа и т.д.;5. Какие фильтры будут использоваться для создания выборок;6. Список диаграмм (Charts), которые необходимо отображать на тех или иных листах.7. Получение Циклических (Cyclic) и Drilldown групп;8. Описание любых правил, которые определяют отображение данных (используется в Section Access);9. Описание дополнительных функций, подобных экспорту в Excel, рассылке нарезанных отчетов по кубу по Email и т.д;10. Получение различных мэппингов (mapping data) и других метаданных, которые находятся в плоских файлах, данныеиз которых не доступны в базах данных.

Вариант 2 – Чек-лист сбора требований:

Список показателей/ключевых показателей эффективности (KPI), включая:

Подробности расчетов (Поля, расположение таблицы, правила);Иерархия/Приоритет (Например, эти показатели оказывают влияние на этот KPI; Этот KPI должен отображатьсуммарную информацию);Какой тренд применим к тем или иным измерениям (Например, тренд по времени, по магазинам, по продуктам).

Фильтры:

Фильтры, необходимые для фильтрации информации;Группировка информации (например, по продуктам, по департаментам и т.д.);Поле приоритетности фильтров (восемь приоритетных фильтров, которые необходимо использовать на листахдокумента QlikView).

Требуемые таблицы (это итоговое резюмирование всех метрик и измерений, указанных выше):

Место нахождения полей;Частота обновления;Тип загрузки данных (инкрементальная загрузка, загрузка с полной заменой данных);

Page 9: Практические вопросы по QlikView - часть 2

Любые дополнительные соображения по требованиям (например, наличие медленно меняющихся измерений SlowlyChanging Dimensions);Какие поля требуются для уточнения контекста информации или детализации информации;Требования к историчным данным, в том числе – где и что нужно агрегировать.

Список ключевых диаграмм/проекций данных (таблицы с данными):

Тип диаграммы (Например, Line, Bar, Combo, Straight Table, Pivot Table и т.д.);Отображение тренда информации по дням, неделям, месяцам в разрезе тех или иных KPI;Drilldown группы (Например, иерархии);Циклические (cycle) группы (Например для: цикл Bar Charts через метрики A, B, C).

Функциональность дашборда (dashboard):

Сколько исторических данных должен хранить дашборд;Нужна ли полная и облегченная версия;Частота обновлений дашборда;Любая другая функциональность, которая должна быть;Должны ли старые данные быть агрегированны.

Требования по пользователям:

Кому требуется доступ и к каким данным;Когда требуются данные (для предварительной загрузки дашборда);Есть ли требования безопасности данных (ограничение доступа и передачи данных);Как к дашборду будет обеспечиваться доступ (AJAX, IE Plug-in, Tablet и др.);Цветовая палитра для настройки дашборда и других элементов приложений;Требования к языку приложения.

Общие/другие требования (например, порядок организации поддержки в SLA).

Вариант 3 – стандартная структура требований в BI проекте

1. Определение метрик1.1. Именование и идентификаторы:Перечислить/объяснить имена и сокращения, используемые при упоминании в метриках. Указать уникальныйидентификатор, позволяющий надежно ссылаться на метрику в документах;1.2. Описание:Объяснить физический смысл метрики, что она на самом деле измеряет, почему важна, как используется. Прочаясущественная информация, помогающая в понимании метрики;1.3. Бизнес-потребности:Объяснить бизнес-потребности, для удовлетворения которых необходима метрика (отслеживание эффективности бизнес-деятельности компании по метрике);1.4. Объекты измерения;1.5. Методы измерения;1.6. Заинтересованные лица.2. Информационные требования2.1. Атрибуты метрик;2.2. Измерения приложения;2.3. Бизнес-правила;2.4. Отношения между метриками.3. Информационная модель3.1. Целевая информационная модель;3.2. Источники данных;3.3. Мэппинг на целевую модель и алгоритм вывода;3.4. Пробелы данных.4. Требования к визуализации и интерактивности4.1. Требуемая функциональность приложения, которая будет обеспечивать необходимые возможности анализа данных;4.2. Карта и макеты интеракций (взаимодействие пользователей с данными);4.3. Соотнесение с целевой информационной моделью.

Краткий шаблон для сбора требований по QlikView (BI-проект)

Page 10: Практические вопросы по QlikView - часть 2

Лучшие техники (методы) моделирования данных?

4 шага для Dimensional Modeling:1. Выберите бизнес-процесс для модели;2. Определите отдельные составляющие бизнес-процесса (одно путешествие, один сегмент, один рейс, одна записьбронирования и т.д.);3. Выберите измерения, которые будут применяться к каждой строке в таблице фактов;4. Идентифицируйте числовые факты, которые будут содержаться в каждой строке таблицы фактов.

Что такое QlikView-сервер, Publisher и Access Point?

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

Все клиенты QlikView обращаются к серверу QlikView Server, на котором хранится контент. QlikView Server отвечаетза организацию клиент-серверного доступа к приложениям и данным QlikView. Сервер хранит документы QlikView иделает их доступными конечным пользователям, количество которых может исчисляться тысячами. Принеобходимости он помогает планировать операции перезагрузки данных, однако обычно за планирование отвечаетмодуль QlikView Publisher.QlikView Publisher реализует дополнительные функции планирования и доставки. Дополнительный (опциональный)

Page 11: Практические вопросы по QlikView - часть 2

компонент QlikView Publisher предназначен для создания сложных сценариев распространения контента, типичныхдля крупных предприятий. Он расширяет и улучшает функциональные возможности QlikView Server в областиадминистрирования и обеспечивает дополнительную защиту контента QlikView на уровне пользователей и групп.Например, из единого контента QlikView этот инструмент может сгенерировать самостоятельные документы,предназначенные для конкретных пользователей или групп и содержащие лишь интересующие их данные.AccessPoint представляет собой настраиваемую точку доступа ко всем приложениям QlikView. С помощьюAccessPoint, модуля QlikView Server, пользователи обращаются ко всем приложениям QlikView в соответствии справами доступа. Кроме того, QlikView AccessPoint поддерживает различные фоновые сервисы, напримерраспределение и балансировку нагрузки между несколькими серверами QlikView, объединенными в кластер.

На данной картинке отображены основные компоненты технической архитектуры QlikView Server, а также взаимосвязь спользовательскими интерфейсами и Back-end системами.

Диаграмма трех состояний сред QlikView (Среды“Development” -> “Testing” -> “Production”)

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

Page 12: Практические вопросы по QlikView - часть 2

Что такое инкрементальная загрузка данных (IncrementalLoad) и как ее организовать?

Полная перезагрузка данных несет в себе ряд существенных недостатков:1. Со временем, время, которое затрачивается на извлечение данных увеличивается до такой степени, что получатьсвоевременно документы QlikView не представляется возможным (даже к середине рабочего дня, при условии запусказагрузки поздно вечером).2. Полная перезагрузка данных значительно увеличивает нагрузку на сервер базы данных и сеть, что в свою очередьотрицательно сказывается на производительности “соседних” информационных систем.3. Нет возможности сделать оперативную загрузку новых данных днем, т.к. процесс занимает значительное время.Инкрементальная загрузка – это процесс загрузки только новых или обновленных записей из базы данных в отдельныйQVD файл. Инкрементальная загрузка данных очень полезна, т.к. она работает намного эффективней по сравнению сполной загрузой, в частности при наличии большого объема данных.

Вариант 1 “INSERT ONLY”

Может использоваться для любой базы данных;Загружает только новые записи (Inserted records);Требуется поле ModificationDate.

Схема загрузки данных:

Page 13: Практические вопросы по QlikView - часть 2

Вариант 2 “INSERT & UPDATE”

Может использоваться для любой базы данных;Загружаются вставленные и обновленные записи;Требуются поля ModificationDate и PrimaryKey.

Схема загрузки данных:

123456789

QV_Table:SQL SELECT PrimaryKey, X, Y From DB_TableWHERE ModificationTime >= #$(LastExecTime)# AND ModificationTime <#$(ThisExecTime)#; ConcatenateLOAD PrimaryKey, X, Y FROM File.QVD; STORE QV_Table INTO File.QVD;

Page 14: Практические вопросы по QlikView - часть 2

Вариант 3 “INSERT, UPDATE & DELETE”

Может использоваться для любой базы данных;Загружаются вставленные и обновленные записи;Удаляются DELETED записи (те, которые были удалены в базе данных);Требуются поля ModificationDate и PrimaryKey;Медленно работает, т.к. выполняется Inner Join;Сложная схема реализации (нетривиальная задача).

Схема загрузки данных:

123456789

QV_Table:SQL SELECT PrimaryKey, X, Y From DB_TableWHERE ModificationTime >= #$(LastExecTime)# AND ModificationTime <#$(ThisExecTime)#; Concatenate LOAD PrimaryKey, X, Y FROM File.QVDWHERE NOT EXISTS(PrimaryKey); STORE QV_Table INTO File.QVD;

Page 15: Практические вопросы по QlikView - часть 2

Вариант 4 “INSERT, UPDATE & DELETE” при наличии в базе данныхфлага DeletionFlag

Может использоваться для любой базы данных;Загружаются вставленные и обновленные записи;Удаляются DELETED записи (те, которые были удалены в базе данных);Требуются поля ModificationDate, PrimaryKey, DeletionFlag;Сложная схема реализации (нетривиальная задача).

Вариант 5 “Дополнительные правки итогового скрипта дляIncremental Load”

1234567891011

QV_Table:SQL SELECT PrimaryKey, X, Y From DB_TableWHERE ModificationTime >= #$(LastExecTime)# AND ModificationTime <#$(ThisExecTime)#; Concatenate LOAD PrimaryKey, X, Y FROM File.QVDWHERE NOT EXISTS(PrimaryKey); Inner Join SQL SELECT PrimaryKey FROM DB_TABLE; STORE QV_Table INTO File.QVD;

123456789101112131415161718

ListOfDeletedEntries:SQL SELECT PrimaryKey AS Deleted FROM DB_TABLEWHERE DeletionFlag = 1 AND ModificationTime >= #$(LastExecTime)#; QV_Table:SQL SELECT PrimaryKey, X, Y From DB_TableWHERE ModificationTime >= #$(LastExecTime)# AND ModificationTime <#$(ThisExecTime)#; ConcatenateLOAD PrimaryKey, X, Y FROM File.QVDWHERE NOT EXISTS(PrimaryKey) AND NOT EXISTS(Deleted,PrimaryKey); Drop Table ListOfDeletedEntries; STORE QV_Table INTO File.QVD;

12

LET ThisExecTime = Now();

Page 16: Практические вопросы по QlikView - часть 2

Кейс “Инкрементальная загрузка данных – организация QVD-файлов”

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

Код решения

ПЕРЕМЕНННЫЕ:

ПОЛНАЯ ПЕРЕГРУЗКА ДАННЫХ:

345678910111213141516

QV_Table:SQL SELECT PrimaryKey, X, Y From DB_TableWHERE ModificationTime >= #$(LastExecTime)# AND ModificationTime <#$(ThisExecTime)#; Concatenate LOAD PrimaryKey, X, Y FROM File.QVDWHERE NOT EXISTS(PrimaryKey); Inner Join SQL SELECT PrimaryKey FROM DB_TABLE; If ScriptErrorCount = 0 Then STORE QV_Table INTO File.QVD; LET LastExecTime = ThisExecTime;End If

1234567891011121314151617

//Директория хранения QVD-файловSET directoryName = 'C:\Users\IVShamaev\Desktop\IncrementalLoad\QVD\'; //Получаем текущий месяц и текущий годLET currMonth = Num(Month(Today()));LET currYear = Year(Today()); //Рассчитываем переменные начальный месяц и начальный годLET startMonth = $(currMonth);LET startYear = $(currYear)-2; //Включаем и выключаем полную перезагрузку данных (0 - выключена, 1 - включена)SET allDataReload = 0; //Рассчитываем переменные начальный месяц и год для обновления данныхLET updateMonth = if($(currMonth)<3,12+$(currMonth)-2,$(currMonth)-2);LET updateYear = if($(currMonth)<3,$(currYear)-1,$(currYear));

123456789101112131415161718192021

IF ($(allDataReload)=1) then //Удаляем все QVD-файлы EXECUTE cmd.exe /C del /f /q "$(directoryName)*.qvd"; LET tempMonth = 12; for iYear=$(startYear) to $(currYear) IF ($(iYear)=$(currYear)) then tempMonth = $(currMonth); ENDIF for iMonth=$(startMonth) to $(tempMonth) //Начало загрузки данных в QVD myTable: LOAD * INLINE [ myField, Year, Month aaa, '$(iYear)', '$(iMonth)' kkk, '$(iYear)', '$(iMonth)' ];

Page 17: Практические вопросы по QlikView - часть 2

ИНКРЕМЕНТАЛЬНАЯ ЗАГРУЗКА:

222324252627282930

STORE myTable INTO '$(directoryName)Table-$(iYear)-$(iMonth).qvd' (qvd); //формат имени QVD-файла "Table-2015-10.qvd" DROP Table myTable; //Окончание загрузки данных в QVD NEXT iMonth startMonth=1; NEXT iYear ENDIF

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

IF ($(allDataReload)=0) then //*** Этап 1 - удаление лишних QVD файлов *** //Получаем название всех QVD файлов for each fileName in FileList('$(directoryName)*.qvd') FileList: Load '$(directoryName)' as [DirectoryName], mid('$(fileName)',len('$(directoryName)')+1) as [FileName] Autogenerate(1); NEXT fileName //Вычленяем год и месяц из названия QVD-файла NoConcatenate tmpListForDelete: Load [DirectoryName], [FileName], mid([FileName],7,4) as delYear, SubField(mid([FileName],12),'.',1) as delMonth Resident FileList; //Формируем список старых файлов (проверку последнего месяца и стартового) NoConcatenate ListForDelete: Load [DirectoryName], [FileName], delYear, delMonth Resident tmpListForDelete Where MakeDate(delYear,delMonth)<MakeDate($(startYear),$(startMonth)); DROP Tables FileList,tmpListForDelete; //Удаляем старые файлы FOR i=1 to NoOfRows('ListForDelete') LET vFileName = 'Table' & '-' & Peek('delYear',$(i)-1,'ListForDelete') & '-' & Peek('delMonth',$(i) EXECUTE cmd.exe /C del /f /q "$(directoryName)$(vFileName).qvd"; NEXT //*** Этап 2 - Обновление последних трех месяцев *** LET tempMonth = 12; for iYear=$(updateYear) to $(currYear) IF ($(iYear)=$(currYear)) then tempMonth = $(currMonth); ENDIF for iMonth=$(updateMonth) to $(tempMonth) //Начало обновления данных в QVD myTable: LOAD * INLINE [ myField, Year, Month aaa, '$(iYear)', '$(iMonth)' kkk, '$(iYear)', '$(iMonth)' ]; STORE myTable INTO '$(directoryName)Table-$(iYear)-$(iMonth).qvd' (qvd); DROP Table myTable; //Окончание обновления данных в QVD NEXT iMonth startMonth=1; NEXT iYear ENDIF

Page 18: Практические вопросы по QlikView - часть 2

Что такое CSV Batch Load и как ее организовать в QlikView?

Шаги процесса выгрузки данных по схеме “CSV Batch Load”:1. PHP скрипты на стороне сервера подключаются к базе данных, извлекают данные и сохраняют их в формате CSV.2. При необходимости можно масштабировать процесс извлечения, используя несколько серверов. Это позволяетзначительно увеличить скорость извлечения данных.3. Далее с помощью SCP или других программ, копируются файлы на QlikView сервер.4. QlikView приложение загружает данные из всех CSV файлов, обрабатывает данные и сохраняет на QlikView серверобработанные данные в формате QVD.5. После этого приложения пользователей подгружают обработанные данные из QVD.

Схема процесса CSV Batch Load:

Немного о PHP

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

Возможности по автоматизации интеграции с внешними системамичерез Web-сервисы

Page 19: Практические вопросы по QlikView - часть 2

Что такое дашборд (приборная панель или панельиндикаторов)?

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

В организации могут существовать различные типы панелей индикаторов (дашбордов):

Page 20: Практические вопросы по QlikView - часть 2

Операционная панель индикаторов (Operational dashboard). Система управления эффективностью, котораяпредставляет информацию об операционных процессах, причем мониторингу в рамках панели индикаторов уделяетсябольшее внимание, нежели возможностям анализа или менеджмента.Стратегическая панель индикаторов (Strategic dashboard). Система управления эффективностью, фокусирующаявнимание сотрудников на заданиях и направлениях деятельности, которые максимально способствуют достижениюстратегических целей и обеспечивают ценность бизнеса в долгосрочном плане. При этом больше внимания в рамкахпанели индикаторов уделяется менеджменту, нежели возможностям анализа и мониторинга.Тактическая панель индикаторов (Tactical dashboard). Система управления эффективностью, которая позволяетменеджерам и аналитикам отслеживать продвижение различных программ и проектов по отдельным подразделениямкомпании и анализировать тенденции и возникающие проблемы. При этом больше внимания в рамках панелииндикаторов уделяется анализу, нежели мониторингу и возможностям менеджмента.

Что такое Ad-hoc отчеты в QlikView и как это делается?

Ad-hoc отчет в QlikView – это Straight table, которая отображает выбранные измерения и выбранные метрики. Причем,пользователь сам в интерактивном режиме задает перечень измерений и метрик для отчета, кликая в списке измерений исписке метрик по интересующим его пунктам.

Что такое Data Island в QlikView и как его использовать?

Иногда в документе QlikView требуется создать связь между двумя таблицами, у которых нет общих полей (т.е.фактически связи между таблицами). Таблица, которая не имеет каких-либо ассоциативных связей с другими таблицами,называется “Data Island (Остров данных)”. В QlikView можно создать связь между двумя таблицами с помощью функцииConcat().Синтаксис функции Concat():

Возвращает объединенную строку всех значений expression. Каждое значение может быть разделено символом,указанным в delimiter (разделитель). Порядок объединения может определяться sort-weight. Sort-weight долженвозвратить целочисленное значение (чем меньше весовой коэффициент, тем больше приоритет). Если слово distinctуказано перед выражением, все дубликаты будут проигнорированы.

1 concat ([ distinct ] expression [, delimiter [, sort-weight]])

123456789101112

Data_Island:LOAD * Inline [Product_refAB100AB200AB300CD100CD200CD300]; Sales_Info:

Page 21: Практические вопросы по QlikView - часть 2

В результате выполнения скрипта образуются две несвязанные таблицы:

1. Добавляем на лист документа элемент List Boxes для Product_Ref;2. Добавляем Straight Table и используем DATE и PRODUCT в качестве измерений

3. Добавляем выражение с применением Set Analysis:

13141516171819202122232425

LOAD * Inline [DATE, PRODUCT, SALES’04-01-2012′, ‘AB100′, 120.00’04-02-2012′, ‘AB200′, 99.00’04-03-2012′, ‘AB300′, 200.00’04-04-2012′, ‘CD100′, 150.00’04-05-2012′, ‘CD100′, 150.00’04-06-2012′, ‘CD200′, 120.00’04-07-2012′, ‘AB100′, 110.00’04-10-2012′, ‘AB100′, 210.00’04-13-2012′, ‘CD300′, 50.00’04-17-2012′, ‘AB100′, 80.00];

1 =sum({$} SALES)

Page 22: Практические вопросы по QlikView - часть 2

В результате в Straight Table продажи изменяются в зависимости от выбора Products из списка Product_Ref.Исходный вариант таблицы:

Реагирование на выборку значений:

Что такое DMS авторизация?

DMS (Document Metadata Service) авторизация позволяет давать разрешение на документы используя Active DirectoryGroups, а также можно давать доступ отдельным пользователям.

Page 23: Практические вопросы по QlikView - часть 2

Что такое секция доступа (Section Access)?

Section Access (секция доступа) – это участок скрипта загрузки QlikView, которую можно использовать для ограничениядоступа. Если секция доступа в скрипте QlikView настроена на автоматическую защиту, то один файл может содержатьданные для нескольких пользователей или групп пользователей. QlikView будет использовать информацию в секциидоступа для аутентификации и авторизации, а также для динамического сокращения данных, чтобы пользователь могвидеть только свои данные.Защита встроена в сам файл, поэтому даже загруженный файл в некоторой степени защищен. Однако, если потребностизащиты высоки, следует предупреждать загрузку файлов и использование в автономном режиме. Файлы должныпубликоваться только сервером QlikView. Так как все данные находятся в файле, размер данного файла может бытьочень большим.Все системные поля Секции доступа используются для аутентификации или авторизации. Ниже описан полный наборсистемных полей секции доступа.В секцию доступа можно загрузить ни одного, все или любую комбинацию полей безопасности. Если использованиеUSERID не требуется, авторизация может быть проведена с помощью других полей, например только серийного номера.

ACCESS — Поле, определяющее, какой уровень доступа имеет соответствующий пользователь.USERID — Поле, которое должно содержать принятый идентификатор пользователя. QlikView запроситидентификатор пользователя и сравнит его со значением в данном поле. Данный идентификатор пользователя несовпадает с идентификатором пользователя Windows.PASSWORD — Поле, которое должно содержать принятый пароль. QlikView запросит пароль и сравнит его созначением в данном поле. Данный пароль не совпадает с паролем Windows.SERIAL — Поле, которое должно содержать номер, соответствующий серийному номеру QlikView. Пример: 49002394 7113 7304 QlikView проверит серийный номер пользователя и сравнит его со значением в данном поле.NTNAME — Поле, которое должно содержать строку, соответствующую имени пользователя или группы домена NT

Page 24: Практические вопросы по QlikView - часть 2

Windows. QlikView выдаст сведения о пользователе из ОС и сравнит ее со значением в данном поле.NTDOMAINSID — Поле, которое должно содержать строку, соответствующую SID домена NT Windows. Пример: S-1-5-21-125976590-4672381061092489882 QlikView выдаст сведения о пользователе из ОС и сравнит ее со значением вданном поле.NTSID — Поле, которое должно содержать Windows NT SID. Пример: S-15-21-125976590-467238106-1092489882-1378 QlikView выдаст сведения о пользователе из ОС и сравнит ее со значением в данном поле.OMIT — Поле, которое должно содержать поле, которое должно быть опущено для конкретного пользователя. Могутиспользоваться подстановочные знаки, и поле может быть пустым. Простой способ сделать это – использоватьподполе.

Пример синтаксиса:

<<< Вернуться в основной раздел “QlikView — краткий учебник”

Как задаются переменные и разница между операторамиSET и LET?

Переменные в QlikView можно задать несколькими способами:Способ 1: Использование операторов SET и LET в скрипте загрузки данных, либо использование выражений,результатом которых будет создание соответствующих переменных (например, после выражения Y=1+2 в скриптезагрузки создастся переменная Y);Способ 2: Создание переменных в визуальном редакторе переменных (Variable Overview);Способ 3: Использование Automation API функций, например функции CreateVariable класса Document(ActiveDocument.CreateVariable “MyVar”).

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

Переменная exampleString1 вернет строку “’abc’ & ‘def’”, а exampleString2 вернет склеенную строку – “abcdef”.

Пример:Для задания значений переменным с помощью функций, необходимо использовать оператор LET

Пример:Для того, чтобы произвести вычисление переменной, объявленной с помощью SET, необходимо использоватьконструкцию $(variableName).

В результате выполнения скрипта переменная vResult будет иметь значение равное 12.

Примечание:Оператор LET не является обязательным при объявлении вычисляемых переменных внутри скрипта загрузки. Поэтомувычисляемые переменные можно указывать (но лучше не стоит так делать!) без оператора LET:

Значение переменной vResult будет равно 8.

123456789

SECTION ACCESS; LOAD UPPER(Level) AS ACCESS, UPPER(DomainName) AS NTNAME, UPPER(PASSWORD) AS PASSWORDFROM Access.XLSX; SECTION APPLICATION;

12

SET exampleString1 = 'abc' & 'def';LET exampleString2 = 'abc' & 'def';

1 Let vToday = Today();

12

SET Y = ‘5+7’;vResult = $(Y);

12

LET vCalc = 4+5;vResult = vCalc-1;

Page 25: Практические вопросы по QlikView - часть 2

Как написать динамический SQL запрос в QlikView?

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

Как найти интервал времени в скрипте QlikView?

Если у Вас имеются две даты в формате timestamp, одна из которых означает дату начала того или иного действия, авторая дата означает окончание действия, то интервал времени можно рассчитать при помощи функции interval:

Описание функции Keep в QlikView

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

Явный префикс join в языке скрипта QlikView позволяет выполнять полное объединение двух таблиц. В результатеполучается одна таблица. Во многих случаях такие объединения приводят к созданию очень больших таблиц. Одной изосновных функций QlikView является способность к ассоциированию таблиц вместо объединения, что позволяетсократить использование памяти, повысить скорость обработки и гибкость.Функция keep предназначена для сокращения числа случаев необходимого использования явных объединений.Префикс keep между двумя операторами load или select позволяет уменьшать одну или обе таблицы путем пересеченияданных таблиц перед их сохранением в QlikView. Префиксу keep должно всегда предшествовать одно из ключевых словinner, left или right. Выборка записей из таблицы осуществляется так же, как и при соответствующем объединении. Однакодве таблицы не соединяются и сохраняются в QlikView в виде двух отдельных именованных таблиц.

Пример функции keep:

После выполнения скрипта образуется взаимосвязь между таблицами:

1234567891011121314151617

ODBC CONNECT TO [QlikViewDatabase;DBQ=ORACLE_SERVICE_DB ] (XUserId is d000DNIJSOLFJdJECOA, XPassword TEMP_table:SELECT table_nameFROM all_tablesWHERE OWNER='MySchemaName'ORDER BY table_name; FOR i=1 to NoOfRows('TEMP_table') LET vTableName = Peek('TABLE_NAME',$(i)-1,'TEMP_table'); StatisticTable: SELECT '$(vTableName)' as tableNameStat, count(*) as count FROM MySchemaName.$(vTableName);NEXT DROP Table TEMP_table;

1234

LOAD key,timestampFormatStart,timestampFormatEnd,Interval(timestampFormatEnd-timestampFormatStart) as timeInterval,DescriptionActionResident ActionTable;

12345678910111213

table1:LOAD key, nameFROM[C:\Users\IVShamaev\Desktop\keep and join\source1.csv](txt, codepage is 1251, embedded labels, delimiter is ',');LEFT KEEPtable2:LOAD key, [last name]FROM[C:\Users\IVShamaev\Desktop\keep and join\source2.csv](txt, codepage is 1251, embedded labels, delimiter is ',', msq);

Page 26: Практические вопросы по QlikView - часть 2

Если на листе QlikView создать Table Box, то в результате получим, следующую картинку:

Если бы мы использовали вместо Right Keep функцию INNER KEEP, то результирующая таблица Table Box имела быследующий вид:

Общая схема Keep и Join:

Page 27: Практические вопросы по QlikView - часть 2

Чеклисты по разработке

Производительность модели данных

Синтетические ключи удалены из модели данныхНеоднозначные петли (ambiguous loops) удалены из модели данныхПравильная степень детализации данных (гранулярность данных)По возможности используются QVDПо возможности используйте целочисленные ключи для объединения таблицУдалены системные ключи/timestamps (формат дата,время) из модели данныхНеиспользуемые поля удалены из модели данныхУдалены связующие таблицы из очень больших моделей данныхУдалены ненужные таблицы в схеме снежинка (произведена консолидация данных)Разорвите сцепленные поля с измерениями в отдельные поляОптимизирована работа с QVD файламиИспользуется метод Autonumber для замены больших сцепленных ключей (concatenated keys)

Лучшие практики проектирования (дизайна)

Используете цвета только для контраста и фокусированияИспользуете нейтральные и приглушенные цветаИспользуете шаблоны или темы там, где они доступныПриложение оптимизировано для разрешения экрана пользователяДизайн согласован между вкладками приложенияФормат объектов листа согласованНаиболее часто используемые выборки находятся вверху, наименее популярные – внизуДоступны drop-down выборки для всех столбцов straight или pivot таблицВерсия QV разработчика соответствует версии, которая используется или будет использоваться в промышленнойэксплуатацииИспользуются общие переменные в выраженияхИспользуются условия расчета (calculation conditions) на больших диаграммах

Производительность интерфейса

Запустите QlikView Optimizer для того, чтобы протестировать использование памятиМинимизируйте количество различных функций

Page 28: Практические вопросы по QlikView - часть 2

Минимизируйте вложенные IF условияМинимизируйте строковые сравненияМакросы минимизированы или устраненыМинимизируйте показание частотных характеристикМинимизируйте set analysis в отношении больших таблиц фактовМинимизируйте pivot диаграмма для больших приложений

Лучшие практики по написанию скриптов

Стандарт наименования используется для полей, таблиц, переменныхСкрипт хорошо комментируется – изменения помечены датойПервая вкладка скрыта и содержит информационный разделКаждая предметная область имеет вкладку в скриптеИспользуется подключение файлов через include или в скрытом скрипте для всех ODBC подключенийВсе блоки кода дополнены комментариямиВсе ссылки на файлы используют стандарт наименованияИспользуются бизнес-имена для полей в пользовательском интерфейсеСкрипт безопасности содержится в подключаемом файле с помощью include процедуры

Что такое drill?

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

Сверление бывает нескольких видов:

Drill-down – фильтрация по одной из исходных осей отчета с выводом детальной информации по потомкам врамках иерархии выбранного фильтрующего члена. Например, если имеется отчет по распределению заказов вразрезе Стран и Годов, то при щелчке на 2015-м году выведется отчет в разрезе тех же Стран и месяцев 2015 года.Drill-aside – фильтрация под одной или нескольким выбранным осям и снятие агрегации по одной или несколькимдругим осям. Например, если имеется отчет по распределению заказов в разрезе Стран и Годов, то при щелчке на2015-м году выведется другой отчет в разрезе, например, Стран и Поставщиков с фильтрацией по 2015 году.Drill-trough – снятие агрегации по всем осям и одновременная фильтрация по ним же – позволяет увидетьисходные данные из таблицы фактов, из которых получено значение в отчете. Т.е. при щелчке по значению ячейкивыводится отчет со всеми заказами, которые дали эту сумму. Эдакое мгновенное бурение в самые «недра» куба.

Что такое MAD фреймворк и DAR методология?

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

Page 29: Практические вопросы по QlikView - часть 2

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

Схема концепции MAD:

Page 30: Практические вопросы по QlikView - часть 2

Еще одна картинка, которая рассказывает об инструментах, используемых пользователями:

Существует аналогичный термин – методология DAR (Dashboard, Analysis, Reporting). Структура приложениястроится таким образом, что пользователь переходит от общих дашбордов (Dashboard) к детализированным отчетам(Reporting). Данная методология позволяет быстро выявлять проблемные точки (продукты, подразделения, каналы сбытаи т.д) на высоком уровне, а затем углубляться в анализ причин отклонений переходя на слои Analysis и Reporting.Более подробнее можно ознакомиться в руководстве: Technical Paper – DAR – QlikView.pdf

Как получить переменную с одинарной кавычкой вQlikView?

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

Page 31: Практические вопросы по QlikView - часть 2

С помощью такого подхода можно использоваться данные из QVD-файлов в динамическом построении исполняемыхSQL-запросов.

Удаление таблиц или полей в QlikView

Удалить можно одну таблицу, а можно несколько:

Синтаксис удаления полей из таблицы в QlikView:

Как запустить процедуру PL/SQL из скрипта QlikView?

Для запуска процедуры PL/SQL в Oracle DB из скрипта QlikView, необходимо использовать следующий синтаксис:

Как включить подробное логирование в QlikView?

Для того, чтобы при загрузке данных (выполнении скрипта) генерировался log-файл, необходимо в свойствах документавключить генерацию лог-файла: Settings -> Document Properties -> отметить “Generate Logfile”.

123456789101112131415

TableWithValues:LOAD concat(chr(39) & SHOP_CODE & chr(39), ',') as concat_SHOP_CODEFROM '$(PATH_QVD)TableWithValues.qvd' (qvd); LET storeList = Peek('concat_SHOP_CODE',0,'TableWithValues'); DROP Table TableWithValues; //Далее используем эту переменную в SQL запросеSQL_TABLE:SQL SELECT --+MATERIALIZE FIELD1,FIELD2,FIELD3,FIELD4,FIELD5,FIELD6,FIELD7, SHOP_CODE FROM TableSourceInDatabase WHERE ROWNUM>0 AND SHOP_CODE IN ($(storeList));

12

DROP Table TempOrders;DROP Tables TempOrders, TempCustomers, TempCalendar;

12

DROP Field NameDesc FROM TempTable;DROP Fields NameDesc, NameParent, ChildCode FROM TempTable;

12345

//Строка подключения к базе данных OracleODBC CONNECT TO [QlikViewDatabase;DBQ=ORACLE_SERVICE_DB ] (XUserId is CKAZZ55555AFJdJEKHB, XPassword //Строка запуска процедуры PL/SQL из QlikView ScriptSQL CALL ORACLE_PACKAGE_NAME.PROCEDURE_NAME('STRING PARAM 1','STRING PARAM 2','$(qlikview_variable)')

Page 32: Практические вопросы по QlikView - часть 2

Как сделать URL-ссылки в таблице?

Допустим, что у нас есть таблица с названием статей и ссылками на статьи:

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

123456789

Article_Link:LOAD * INLINE [ Название статьи, Ссылка на статью Анализ истории Lastfm в контексте перехода на Яндекс.Музыку, http://habrahabr.ru/post/269941/ "Библиотека, помогающая преодолеть концептуальный разрыв между ООП и БД во время тестирования при использовании ORM, — LinqTestable" Разделить – значит преумножить, http://habrahabr.ru/company/hpe/blog/269915/ Параллельная обработка большого селекта в нескольких сессиях, http://habrahabr.ru/company/oda/blog/269693/ Памятка евангелиста PostgreSQL: репликанты против репликации, http://habrahabr.ru/post/269889/];

Page 33: Практические вопросы по QlikView - часть 2
Page 34: Практические вопросы по QlikView - часть 2

Результирующая таблица:

Как создать выпадающий список для присвоения значенияпеременной в QlikView?

Вот такое можно сделать:

Исходные данные:

123

Persons:LOAD * INLINE [ Person_ID, Person_Name, Position

Page 35: Практические вопросы по QlikView - часть 2

Шаг 1 – выбираем объект Input Box:

Шаг 2 – настраиваем Constraints:

45678910111213141516

1, Константинов Дмитрий, Генеральный директор 2, Сергеев Антон, Руководитель практики бизнес-анализа 3, Иванов Илья, Старший консультант QlikView 4, Суворов Михаил, Старший консультант QlikView 5, Дмитриева Ольга, Консультант QlikView 6, Орлова Мария, Бизнес-аналитик QlikView 7, Григорьев Денис, Менеджер проектов 8, Машкова Екатерина, Младший консультант QlikView 9, Мухачев Иван, Младший аналитик 10, Михеева Дарья, Стажер]; LET vSelectedPerson = 'Константинов Дмитрий';

Page 36: Практические вопросы по QlikView - часть 2

Шаг 3 – Формируем список:

Шаг 4 – Убираем знак равно:

1 =Concat({1} Person_Name,';')

Page 37: Практические вопросы по QlikView - часть 2

Обработка нестандартных дат – форматирование дат вQlikView

Как из такой даты ‘2015-07-28T12:26:05.265+00:00’ получить вот такую дату ‘28.07.2015 12:26:05.265’? Очень просто!

Получаем дату:

Получаем время:

Формируем требуемую дату:

Дата минус количество дней – как получить?

Иногда в отчетах необходимо отобразить N количество дней от текущей даты. Для этого необходимо создатьпеременную с текущей датой (можно создать в скрипте загрузке данных):

Далее в Label и Expression используем выражения:

Как вывести в Straight Table топовые продукты прииспользовании в рассчитываемом измерении ValueList()

1 Date(Floor(SubField(time_field,'T',1)))

1 Time(SubField(SubField(time_field,'T',2),'+',1),'h:mm:ss.fff')

123

Timestamp(Date(Floor(SubField(time_field,'T',1))) & ' ' & Time(SubField(SubField(time_field,'T',2),'+',1),'h:mm:ss.fff'),'DD.MM.YYYY h:mm:ss.fff')

1 LET vCurrDate = Date(Today());

123

Date(Date#('$(vCurrDate)')-1,'DD.MM.YYYY')Date(Date#('$(vCurrDate)')-2,'DD.MM.YYYY')Date(Date#('$(vCurrDate)')-3,'DD.MM.YYYY')

Page 38: Практические вопросы по QlikView - часть 2

Как исключить влияние выборок во всех измерениях,кроме перечисленных, на конкретную диаграмму вQlikView?

На помощь приходит системное поле $Field и Set Analysis:

В окне Expression выражение будет подчеркнуто как неправильное (но сам подход проверен и работает ).

Массовая загрузка файлов в QlikView из директории(числов файлов не известно заранее)

1 Concat(DISTINCT {<product={'=Rank( SUM( Aggr( Avg({<date_main={"$(vCurrDate)"}, department_name={"$(vDepartment)"}, @data_quality = {"*"}-{"Грязные данные"}>} @Sales), product) ) )=3'

1 sum({$<[$(=Concat({1<$Field-={'Stock','Manager'}>}distinct $Field,']=,[')&']=')>} Amount)

1234567891011121314151617181920212223242526272829303132333435

//Директория хранения файлов с даннымиSET directoryName = 'C:\QlikView\Source\ERP_or_OLAP_Unloading\';SET fileFormat = 'csv'; //В цикле прогружаем все файлы с форматом $(fileFormat) из директории $(directoryName)for each fileName in FileList('$(directoryName)*.$(fileFormat)') D08_Adjustments: LOAD @1 as Dim01, @2 as Dim02, @3 as Dim03, @4 as Dim04, @5 as Dim05, @6 as Dim06, @7 as Dim07, @8 as Dim08, @9 as Dim09, @10 as Dim10, @11 as Dim11, @12 as Dim12, @13 as Dim13, @14 as Dim14, @15 as Dim15, @16 as Dim16, @17 as Dim17, @18 as Dim18, @19 as Data01, @20 as Data02, @21 as Data03, @22 as Data04, @23 as Data05, @24 as Data06, @25 as Data07, @26 as Data08, @27 as Data09,

Page 39: Практические вопросы по QlikView - часть 2

Как вытащить из модели/приложения QlikView данные вqvd или csv?

Для того, чтобы вытащить данные из модели QlikView (файл формата qvw) , достаточно запустить вот такой вотскриптик:

“Импровизированный” генератор случайных чисел вQlikView

Создание календаря в QlikView

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

363738394041

@28 as Data10, @29 as Data11, @30 as Data12 From '$(fileName)' (txt, codepage is 1251, no labels, delimiter is ';', msq);NEXT fileName

1234567

Binary [C:\Qlikview\Модель_QlikView.qvw]; FOR vCount = 0 to NoOfTables()-1 LET vTableName = TableName($(vCount)); STORE $(vTableName) INTO 'C:\Qlikview\qvd\$(vTableName).qvd' (qvd); STORE $(vTableName) INTO 'C:\Qlikview\csv\$(vTableName).csv' (delimiter is ';');NEXT vCount

1 Round( 500 * ( 1 - sqrt(sqrt(Rand())) ) ) + 1

123456789101112131415161718192021222324252627282930313233343536

QuartersMap: MAPPING LOAD rowno() as Month, 'Q' & Ceil (rowno()/3) as Quarter AUTOGENERATE (12); Temp:LOAD min([Дата]) as minDate,max([Дата]) as maxDateResident [Таблица фактов]; Let varMinDate = Num(Peek('minDate', 0, 'Temp')); Let varMaxDate = Num(Peek('maxDate', 0, 'Temp')); DROP Table Temp; TempCalendar: LOAD $(varMinDate) + Iterno()-1 As Num, Date($(varMinDate) + IterNo() - 1) as TempDateAutoGenerate 1 While $(varMinDate) + IterNo() -1 <= $(varMaxDate); Календарь: Load TempDate AS Дата, week(TempDate) As Неделя, Month(TempDate) As Месяц, ApplyMap('QuartersMap', month(TempDate), Null()) as Квартал, Year(TempDate) As Год, Day(TempDate) As День, Week(weekstart(TempDate)) & '-' & WeekYear(TempDate) as НеделяГод, Month(TempDate) & '-' & Year(TempDate) as МесяцГод, ApplyMap('QuartersMap', month(TempDate), Null()) & '-' & Year(TempDate) as КварталГод, WeekDay(TempDate) as ДеньНеделиResident TempCalendar Order By TempDate ASC;Drop Table TempCalendar;

Page 40: Практические вопросы по QlikView - часть 2

Создание исполняемого файла (Executable application.exein qlikview)

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

Как через url открыть другой файл QlikView

В Straight table можно создать URL, который будет вести к приложению с детальными данными:

Внимание: этот подход работает только с диска C (где установлена винда).

Получить текущую директорию и родительскуюдиректорию в скрипте QlikView

1 file:///C:/Проекты QlikView/Детальные данные/Модель 1.1.qvw

Page 41: Практические вопросы по QlikView - часть 2

Комментарии: ВКонтакте (0) Обычные (0)

Tweet

Получить текущую директорию (папку, в которой находимся):

Получить родительскую директорию (и т.д.):

ПОХОЖИЕ СТАТЬИ:

Практическиевопросы поQlikView – Часть 1

Drill-Down Group вприложенииQlikView

Анализдинамическихвременных рядов вQlikView

Обработка ошибокв Qlikview

Запись опубликована автором Иван Шамаев в рубрике IT статьи, QlikView с метками BI, QlikView, бизнес-аналитика. Добавьте взакладки постоянную ссылку.

+1 3Like

Добавить комментарийВаш e-mail не будет опубликован. Обязательные поля помечены *

+ один = восемь

Отправить комментарийОтправить комментарий

1 LET vCurrentDirectory = Left(DocumentPath(),Index(DocumentPath(),'\',-1));

1 LET vParentDirectory = Left(DocumentPath(),Index(DocumentPath(),'\',-2));

Имя *

E-mail *

Сайт

Комментарий