Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,526 views

Published on

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

Published in: Data & Analytics
  • Be the first to comment

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

  1. 1. ← Предыдущая Следующая → Практические вопросы по 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 О себе Карта сайта Библиотека Отзывы о компаниях Услуги
  2. 2. 15 Что такое DMS авторизация? 16 Что такое секция доступа (Section Access)? 17 Как задаются переменные и разница между операторами SET и LET? 18 Как написать динамический SQL запрос в QlikView? 19 Как найти интервал времени в скрипте QlikView? 20 Описание функции Keep в QlikView 21 Чеклисты по разработке 21.1 Производительность модели данных 21.2 Лучшие практики проектирования (дизайна) 21.3 Производительность интерфейса 21.4 Лучшие практики по написанию скриптов 22 Что такое drill? 23 Что такое MAD фреймворк и DAR методология? 24 Как получить переменную с одинарной кавычкой в QlikView? 25 Удаление таблиц или полей в QlikView 26 Как запустить процедуру PL/SQL из скрипта QlikView? 27 Как включить подробное логирование в QlikView? 28 Как сделать URL-ссылки в таблице? 29 Как создать выпадающий список для присвоения значения переменной в QlikView? 30 Обработка нестандартных дат – форматирование дат в QlikView 31 Дата минус количество дней – как получить? 32 Как вывести в Straight Table топовые продукты при использовании в рассчитываемом измерении ValueList() 33 Как исключить влияние выборок во всех измерениях, кроме перечисленных, на конкретную диаграмму в QlikView? 34 Массовая загрузка файлов в QlikView из директории (числов файлов не известно заранее) 35 Как вытащить из модели/приложения QlikView данные в qvd или csv? 36 “Импровизированный” генератор случайных чисел в QlikView 37 Создание календаря в QlikView 38 Создание исполняемого файла (Executable application.exe in qlikview) 39 Как через url открыть другой файл QlikView 40 Получить текущую директорию и родительскую директорию в скрипте QlikView Продолжим рассматривать практические вопросы по QlikView, которые возникают при разработке приложений на проектах. Рекомендации по проектированию модели данных? Одним из самых важных факторов успешности проекта по QlikView является правильно разработанная модель данных. 1. Прежде, чем приступить к проектированию и реализации модели данных, требуется выявить и проанализировать требования всех уровней (бизнес-требования, требования заинтересованных сторон, функциональные и нефункциональные требования). Начинать работу в QlikView без требований можно, если необходимо создать прототип для уточнения тех или иных требований, либо когда используется Agile подход. 2. В модель данных необходимо включать только те поля и строки данных, которые действительно Вам необходимы. Лишние поля могут вызвать путаницу, проблемы с производительностью, т.е. все это приводит в конечном счете к дополнительным усилиям. 3. Особое внимание следует уделить также ассоциативной модели QlikVIew. Любые поля с одинаковыми именами ведут к созданию связей между таблицами. Если в двух таблицах присутствует более одного одинакового поля, то создастся синтетический ключ – чего всегда следует избегать. Если Вы видите дополнительные таблицы в модели данных со знаком доллара в имени, то нужно пересмотреть и улучшить вашу модель. 4. Потоки данных из нескольких источников желательно объединять при помощи метода CONCATENATE в одну таблицу фактов, а не пытаться выполнить JOIN таблиц. JOIN всегда приводит к созданию множества колонок с одинаковыми именами и значениями, поэтому желательно направлять данные в одно поле (с одинаковым смыслом для нескольких потоков данных). 5. Сделайте все возможное для того, чтобы упростить и рационализировать модель данных в сценарии загрузки. 6. Используйте при извлечении данных QVD слои. Это необходимо для инкрементальной загрузки данных (incremental loads), а также очень полезно для разделения извлеченных данных на части, которыми легко управлять. Подход дробления загрузки по QVD файлам может быть полезен при тестировании. Процесс загрузки будет рассматриваться как набор модулей и, поэтому, процесс тестирования можно будет проводить по мере готовности каждого модуля. Дополнительным плюсом использования QVD слоя является возможность параллельно извлекать данные из разных источников или разных таблиц. Скорость считывания QVD файлов документом QlikView намного производительней, чем
  3. 3. если извлекать данные из базы данных. 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 и Subset Ratio в Table View (Ctrl + T), наводя на поля. Нужно исследовать, где Information Density меньше чем 100% и информировать Архитектора о потенциальных проблемах с NULL значениями. Необходимо проверять Subset Ratio перед выполнением JOIN на таблицах.
  4. 4. Определение 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 шага:
  5. 5. Первые два шага аутентификации – это обработка данных web-слоем (QlikView Server или IIS). На третьем шаге веб-слой передает идентифицирующую информацию на QlikView сервер, используя QVP протокол. Четвертый шаг – это авторизация, которая выполняется на сервере QlikView и которая использует группы, которые разрешены Directory Service Connector. Существуют несколько больших преимуществ у данного подхода: QlikView не нужно хранить пароли, они хранятся у провайдера идентификации, таких как LDAP или AD. Могут быть применены стандартные процедуры для управления пользователями, что позволяет соблюдать политики безопасности, которые приняты в компании. Существует возможность настройки аутентификации с помощью внешних провайдеров идентификации, таких Google. Вся авторизация производится в backend, что упрощает защиту. Роль Directory Service Connector в данной цепочке несколько размыта тем фактом, что почти все компоненты QlikView его используют. Web-слой, QlikView сервер, QlikView Management Service и QlikView Publisher используют Directory Service Connector для различных целей. Большинство компонентов QlikVIew используют Directory Service Connector для авторизации или для получения информации о пользователях, за исключением тех случаев, когда используются Custom Users. Если Вы используете Custom Users, то они сначала проходят аутентификацию к Directory Service Connector, которая в отдельных случаях хранит логины и пароли пользователей. Сколько измерений используется в Guage Chart? “Guage” диаграмма – это диаграмма, которая отображает относительные данные без разбивки данных по измерениям. В диаграмме типа “Guage chart” указываются выражения с применением Set Analysis. Set Analysis может быть завязан на список элементов того или иного измерения. Но напрямую данная диаграмма измерений не содержит.
  6. 6. Существует один прием, при помощи которого можно осуществить отображение нескольких стрелочек на диаграмме Guage Chart. Делаем отдельно, например, 4 диаграммы (причем у трех фон делаем прозрачный): Далее совмещаем все 4 диаграммы и таблицу со значениями по регионам: Наиболее часто используется отображение Guage chart в таблице:
  7. 7. Что такое анализ множеств (Set Analysis)? Set Analysis (Анализ множеств) – это основной инструмент, который позволяет в сложных приложениях ограничивать подмножество данных для построения различных диаграмм, а также позволяет завязываться на конкретные выборки в конкретных измерениях. Фактически, множества задают контекст в expression, в разрезе которого мы анализируем данные. У анализа множеств (set analysis) существуют 3 важных компонента:
  8. 8. Идентификатор – определяет состояние набора данных нашего подмножества. Оператор – определяет операции над множествами данных (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). Требуемые таблицы (это итоговое резюмирование всех метрик и измерений, указанных выше): Место нахождения полей; Частота обновления; Тип загрузки данных (инкрементальная загрузка, загрузка с полной заменой данных);
  9. 9. Любые дополнительные соображения по требованиям (например, наличие медленно меняющихся измерений Slowly Changing 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-проект)
  10. 10. Лучшие техники (методы) моделирования данных? 4 шага для Dimensional Modeling: 1. Выберите бизнес-процесс для модели; 2. Определите отдельные составляющие бизнес-процесса (одно путешествие, один сегмент, один рейс, одна запись бронирования и т.д.); 3. Выберите измерения, которые будут применяться к каждой строке в таблице фактов; 4. Идентифицируйте числовые факты, которые будут содержаться в каждой строке таблицы фактов. Что такое QlikView-сервер, Publisher и Access Point? QlikView Server и его подсистемы выполняют задачи загрузки, защиты, распространения и управления контентом и его доставки конечным пользователям. Все клиенты QlikView обращаются к серверу QlikView Server, на котором хранится контент. QlikView Server отвечает за организацию клиент-серверного доступа к приложениям и данным QlikView. Сервер хранит документы QlikView и делает их доступными конечным пользователям, количество которых может исчисляться тысячами. При необходимости он помогает планировать операции перезагрузки данных, однако обычно за планирование отвечает модуль QlikView Publisher. QlikView Publisher реализует дополнительные функции планирования и доставки. Дополнительный (опциональный)
  11. 11. компонент QlikView Publisher предназначен для создания сложных сценариев распространения контента, типичных для крупных предприятий. Он расширяет и улучшает функциональные возможности QlikView Server в области администрирования и обеспечивает дополнительную защиту контента QlikView на уровне пользователей и групп. Например, из единого контента QlikView этот инструмент может сгенерировать самостоятельные документы, предназначенные для конкретных пользователей или групп и содержащие лишь интересующие их данные. AccessPoint представляет собой настраиваемую точку доступа ко всем приложениям QlikView. С помощью AccessPoint, модуля QlikView Server, пользователи обращаются ко всем приложениям QlikView в соответствии с правами доступа. Кроме того, QlikView AccessPoint поддерживает различные фоновые сервисы, например распределение и балансировку нагрузки между несколькими серверами QlikView, объединенными в кластер. На данной картинке отображены основные компоненты технической архитектуры QlikView Server, а также взаимосвязь с пользовательскими интерфейсами и Back-end системами. Диаграмма трех состояний сред QlikView (Среды “Development” -> “Testing” -> “Production”) Для того, чтобы в промышленной системе вносить изменения, рекомендуется придерживаться следующей схемы взаимодействия сред:
  12. 12. Что такое инкрементальная загрузка данных (Incremental Load) и как ее организовать? Полная перезагрузка данных несет в себе ряд существенных недостатков: 1. Со временем, время, которое затрачивается на извлечение данных увеличивается до такой степени, что получать своевременно документы QlikView не представляется возможным (даже к середине рабочего дня, при условии запуска загрузки поздно вечером). 2. Полная перезагрузка данных значительно увеличивает нагрузку на сервер базы данных и сеть, что в свою очередь отрицательно сказывается на производительности “соседних” информационных систем. 3. Нет возможности сделать оперативную загрузку новых данных днем, т.к. процесс занимает значительное время. Инкрементальная загрузка – это процесс загрузки только новых или обновленных записей из базы данных в отдельный QVD файл. Инкрементальная загрузка данных очень полезна, т.к. она работает намного эффективней по сравнению с полной загрузой, в частности при наличии большого объема данных. Вариант 1 “INSERT ONLY” Может использоваться для любой базы данных; Загружает только новые записи (Inserted records); Требуется поле ModificationDate. Схема загрузки данных:
  13. 13. Вариант 2 “INSERT & UPDATE” Может использоваться для любой базы данных; Загружаются вставленные и обновленные записи; Требуются поля ModificationDate и PrimaryKey. Схема загрузки данных: 1 2 3 4 5 6 7 8 9 QV_Table: SQL SELECT PrimaryKey, X, Y From DB_Table WHERE ModificationTime >= #$(LastExecTime)# AND ModificationTime <#$(ThisExecTime)#; Concatenate LOAD PrimaryKey, X, Y FROM File.QVD; STORE QV_Table INTO File.QVD;
  14. 14. Вариант 3 “INSERT, UPDATE & DELETE” Может использоваться для любой базы данных; Загружаются вставленные и обновленные записи; Удаляются DELETED записи (те, которые были удалены в базе данных); Требуются поля ModificationDate и PrimaryKey; Медленно работает, т.к. выполняется Inner Join; Сложная схема реализации (нетривиальная задача). Схема загрузки данных: 1 2 3 4 5 6 7 8 9 QV_Table: SQL SELECT PrimaryKey, X, Y From DB_Table WHERE ModificationTime >= #$(LastExecTime)# AND ModificationTime <#$(ThisExecTime)#; Concatenate LOAD PrimaryKey, X, Y FROM File.QVD WHERE NOT EXISTS(PrimaryKey); STORE QV_Table INTO File.QVD;
  15. 15. Вариант 4 “INSERT, UPDATE & DELETE” при наличии в базе данных флага DeletionFlag Может использоваться для любой базы данных; Загружаются вставленные и обновленные записи; Удаляются DELETED записи (те, которые были удалены в базе данных); Требуются поля ModificationDate, PrimaryKey, DeletionFlag; Сложная схема реализации (нетривиальная задача). Вариант 5 “Дополнительные правки итогового скрипта для Incremental Load” 1 2 3 4 5 6 7 8 9 10 11 QV_Table: SQL SELECT PrimaryKey, X, Y From DB_Table WHERE ModificationTime >= #$(LastExecTime)# AND ModificationTime <#$(ThisExecTime)#; Concatenate LOAD PrimaryKey, X, Y FROM File.QVD WHERE NOT EXISTS(PrimaryKey); Inner Join SQL SELECT PrimaryKey FROM DB_TABLE; STORE QV_Table INTO File.QVD; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ListOfDeletedEntries: SQL SELECT PrimaryKey AS Deleted FROM DB_TABLE WHERE DeletionFlag = 1 AND ModificationTime >= #$(LastExecTime)#; QV_Table: SQL SELECT PrimaryKey, X, Y From DB_Table WHERE ModificationTime >= #$(LastExecTime)# AND ModificationTime <#$(ThisExecTime)#; Concatenate LOAD PrimaryKey, X, Y FROM File.QVD WHERE NOT EXISTS(PrimaryKey) AND NOT EXISTS(Deleted,PrimaryKey); Drop Table ListOfDeletedEntries; STORE QV_Table INTO File.QVD; 1 2 LET ThisExecTime = Now();
  16. 16. Кейс “Инкрементальная загрузка данных – организация QVD- файлов” Возник небольшой кейс по инкрементальной загрузке данных: Необходимо обновлять последние три месяца, при этом в новом месяце добавляется новый файл QVD, а последний месяц (самый старый) удаляется. Схема инкрементальной загрузки: Код решения ПЕРЕМЕНННЫЕ: ПОЛНАЯ ПЕРЕГРУЗКА ДАННЫХ: 3 4 5 6 7 8 9 10 11 12 13 14 15 16 QV_Table: SQL SELECT PrimaryKey, X, Y From DB_Table WHERE ModificationTime >= #$(LastExecTime)# AND ModificationTime <#$(ThisExecTime)#; Concatenate LOAD PrimaryKey, X, Y FROM File.QVD WHERE 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 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 //Директория хранения QVD-файлов SET directoryName = 'C:UsersIVShamaevDesktopIncrementalLoadQVD'; //Получаем текущий месяц и текущий год 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)); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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)' ];
  17. 17. ИНКРЕМЕНТАЛЬНАЯ ЗАГРУЗКА: 22 23 24 25 26 27 28 29 30 STORE myTable INTO '$(directoryName)Table-$(iYear)-$(iMonth).qvd' (qvd); //формат имени QVD-файла "Table-2015-10.qv DROP Table myTable; //Окончание загрузки данных в QVD NEXT iMonth startMonth=1; NEXT iYear ENDIF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 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
  18. 18. Что такое 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-сервисы
  19. 19. Что такое дашборд (приборная панель или панель индикаторов)? Панель индикаторов (Dashboard) – инструмент визуализации, используемый в операционно-ориентированных системах управления эффективностью и позволяющий измерять значения показателей по отношению к целевым и пороговым значениям на основании данных, представляемых в режиме нужного времени. Панель индикаторов (Dashboard) – это визуальное отображение наиболее важной информации, необходимой для достижения одной или нескольких целей, которая помещается целиком на одном экране и которую можно контролировать с первого взгляда. В организации могут существовать различные типы панелей индикаторов (дашбордов):
  20. 20. Операционная панель индикаторов (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]]) 1 2 3 4 5 6 7 8 9 10 11 12 Data_Island: LOAD * Inline [ Product_ref AB100 AB200 AB300 CD100 CD200 CD300 ]; Sales_Info:
  21. 21. В результате выполнения скрипта образуются две несвязанные таблицы: 1. Добавляем на лист документа элемент List Boxes для Product_Ref; 2. Добавляем Straight Table и используем DATE и PRODUCT в качестве измерений 3. Добавляем выражение с применением Set Analysis: 13 14 15 16 17 18 19 20 21 22 23 24 25 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)
  22. 22. В результате в Straight Table продажи изменяются в зависимости от выбора Products из списка Product_Ref. Исходный вариант таблицы: Реагирование на выборку значений: Что такое DMS авторизация? DMS (Document Metadata Service) авторизация позволяет давать разрешение на документы используя Active Directory Groups, а также можно давать доступ отдельным пользователям.
  23. 23. Что такое секция доступа (Section Access)? Section Access (секция доступа) – это участок скрипта загрузки QlikView, которую можно использовать для ограничения доступа. Если секция доступа в скрипте QlikView настроена на автоматическую защиту, то один файл может содержать данные для нескольких пользователей или групп пользователей. QlikView будет использовать информацию в секции доступа для аутентификации и авторизации, а также для динамического сокращения данных, чтобы пользователь мог видеть только свои данные. Защита встроена в сам файл, поэтому даже загруженный файл в некоторой степени защищен. Однако, если потребности защиты высоки, следует предупреждать загрузку файлов и использование в автономном режиме. Файлы должны публиковаться только сервером QlikView. Так как все данные находятся в файле, размер данного файла может быть очень большим. Все системные поля Секции доступа используются для аутентификации или авторизации. Ниже описан полный набор системных полей секции доступа. В секцию доступа можно загрузить ни одного, все или любую комбинацию полей безопасности. Если использование USERID не требуется, авторизация может быть проведена с помощью других полей, например только серийного номера. ACCESS — Поле, определяющее, какой уровень доступа имеет соответствующий пользователь. USERID — Поле, которое должно содержать принятый идентификатор пользователя. QlikView запросит идентификатор пользователя и сравнит его со значением в данном поле. Данный идентификатор пользователя не совпадает с идентификатором пользователя Windows. PASSWORD — Поле, которое должно содержать принятый пароль. QlikView запросит пароль и сравнит его со значением в данном поле. Данный пароль не совпадает с паролем Windows. SERIAL — Поле, которое должно содержать номер, соответствующий серийному номеру QlikView. Пример: 4900 2394 7113 7304 QlikView проверит серийный номер пользователя и сравнит его со значением в данном поле. NTNAME — Поле, которое должно содержать строку, соответствующую имени пользователя или группы домена NT
  24. 24. 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. 1 2 3 4 5 6 7 8 9 SECTION ACCESS; LOAD UPPER(Level) AS ACCESS, UPPER(DomainName) AS NTNAME, UPPER(PASSWORD) AS PASSWORD FROM Access.XLSX; SECTION APPLICATION; 1 2 SET exampleString1 = 'abc' & 'def'; LET exampleString2 = 'abc' & 'def'; 1 Let vToday = Today(); 1 2 SET Y = ‘5+7’; vResult = $(Y); 1 2 LET vCalc = 4+5; vResult = vCalc-1;
  25. 25. Как написать динамический 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: После выполнения скрипта образуется взаимосвязь между таблицами: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ODBC CONNECT TO [QlikViewDatabase;DBQ=ORACLE_SERVICE_DB ] (XUserId is d000DNIJSOLFJdJECOA, XPassword TEMP_table: SELECT table_name FROM all_tables WHERE 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; 1 2 3 4 LOAD key,timestampFormatStart,timestampFormatEnd, Interval(timestampFormatEnd-timestampFormatStart) as timeInterval, DescriptionAction Resident ActionTable; 1 2 3 4 5 6 7 8 9 10 11 12 13 table1: LOAD key, name FROM [C:UsersIVShamaevDesktopkeep and joinsource1.csv] (txt, codepage is 1251, embedded labels, delimiter is ','); LEFT KEEP table2: LOAD key, [last name] FROM [C:UsersIVShamaevDesktopkeep and joinsource2.csv] (txt, codepage is 1251, embedded labels, delimiter is ',', msq);
  26. 26. Если на листе QlikView создать Table Box, то в результате получим, следующую картинку: Если бы мы использовали вместо Right Keep функцию INNER KEEP, то результирующая таблица Table Box имела бы следующий вид: Общая схема Keep и Join:
  27. 27. Чеклисты по разработке Производительность модели данных Синтетические ключи удалены из модели данных Неоднозначные петли (ambiguous loops) удалены из модели данных Правильная степень детализации данных (гранулярность данных) По возможности используются QVD По возможности используйте целочисленные ключи для объединения таблиц Удалены системные ключи/timestamps (формат дата,время) из модели данных Неиспользуемые поля удалены из модели данных Удалены связующие таблицы из очень больших моделей данных Удалены ненужные таблицы в схеме снежинка (произведена консолидация данных) Разорвите сцепленные поля с измерениями в отдельные поля Оптимизирована работа с QVD файлами Используется метод Autonumber для замены больших сцепленных ключей (concatenated keys) Лучшие практики проектирования (дизайна) Используете цвета только для контраста и фокусирования Используете нейтральные и приглушенные цвета Используете шаблоны или темы там, где они доступны Приложение оптимизировано для разрешения экрана пользователя Дизайн согласован между вкладками приложения Формат объектов листа согласован Наиболее часто используемые выборки находятся вверху, наименее популярные – внизу Доступны drop-down выборки для всех столбцов straight или pivot таблиц Версия QV разработчика соответствует версии, которая используется или будет использоваться в промышленной эксплуатации Используются общие переменные в выражениях Используются условия расчета (calculation conditions) на больших диаграммах Производительность интерфейса Запустите QlikView Optimizer для того, чтобы протестировать использование памяти Минимизируйте количество различных функций
  28. 28. Минимизируйте вложенные IF условия Минимизируйте строковые сравнения Макросы минимизированы или устранены Минимизируйте показание частотных характеристик Минимизируйте set analysis в отношении больших таблиц фактов Минимизируйте pivot диаграмма для больших приложений Лучшие практики по написанию скриптов Стандарт наименования используется для полей, таблиц, переменных Скрипт хорошо комментируется – изменения помечены датой Первая вкладка скрыта и содержит информационный раздел Каждая предметная область имеет вкладку в скрипте Используется подключение файлов через include или в скрытом скрипте для всех ODBC подключений Все блоки кода дополнены комментариями Все ссылки на файлы используют стандарт наименования Используются бизнес-имена для полей в пользовательском интерфейсе Скрипт безопасности содержится в подключаемом файле с помощью include процедуры Что такое drill? Интерактивная навигация по данным запроса Источник: Введение в многомерный анализ Drill – это детализация отчета с помощью уменьшения степени агрегации данных, совмещенное с фильтрацией по какой- нибудь другой оси (или нескольким осям). Сверление бывает нескольких видов: Drill-down – фильтрация по одной из исходных осей отчета с выводом детальной информации по потомкам в рамках иерархии выбранного фильтрующего члена. Например, если имеется отчет по распределению заказов в разрезе Стран и Годов, то при щелчке на 2015-м году выведется отчет в разрезе тех же Стран и месяцев 2015 года. Drill-aside – фильтрация под одной или нескольким выбранным осям и снятие агрегации по одной или нескольким другим осям. Например, если имеется отчет по распределению заказов в разрезе Стран и Годов, то при щелчке на 2015-м году выведется другой отчет в разрезе, например, Стран и Поставщиков с фильтрацией по 2015 году. Drill-trough – снятие агрегации по всем осям и одновременная фильтрация по ним же – позволяет увидеть исходные данные из таблицы фактов, из которых получено значение в отчете. Т.е. при щелчке по значению ячейки выводится отчет со всеми заказами, которые дали эту сумму. Эдакое мгновенное бурение в самые «недра» куба. Что такое MAD фреймворк и DAR методология? MAD Framework – концепция, которая гласит о том, что архитектура системы BI должна позволять пользователям переходить от самой агрегированной информации к подробным данным.
  29. 29. Зачем это нужно: в первую очередь, данная концепция позволяет наиболее оптимально принимать управленческие решения. Вы обнаруживаете проблемы на KPI, аналитики локализируют проблемы, рабочие устраняют проблемы на основе детальных данных. Схема концепции MAD:
  30. 30. Еще одна картинка, которая рассказывает об инструментах, используемых пользователями: Существует аналогичный термин – методология DAR (Dashboard, Analysis, Reporting). Структура приложения строится таким образом, что пользователь переходит от общих дашбордов (Dashboard) к детализированным отчетам (Reporting). Данная методология позволяет быстро выявлять проблемные точки (продукты, подразделения, каналы сбыта и т.д) на высоком уровне, а затем углубляться в анализ причин отклонений переходя на слои Analysis и Reporting. Более подробнее можно ознакомиться в руководстве: Technical Paper – DAR – QlikView.pdf Как получить переменную с одинарной кавычкой в QlikView? Иногда необходимо сформировать из значений поля в таблице переменную, при этом значения должны быть обернуты в одинарные кавычки и разделены запятыми. Ниже приведен рабочий пример:
  31. 31. С помощью такого подхода можно использоваться данные из QVD-файлов в динамическом построении исполняемых SQL-запросов. Удаление таблиц или полей в QlikView Удалить можно одну таблицу, а можно несколько: Синтаксис удаления полей из таблицы в QlikView: Как запустить процедуру PL/SQL из скрипта QlikView? Для запуска процедуры PL/SQL в Oracle DB из скрипта QlikView, необходимо использовать следующий синтаксис: Как включить подробное логирование в QlikView? Для того, чтобы при загрузке данных (выполнении скрипта) генерировался log-файл, необходимо в свойствах документа включить генерацию лог-файла: Settings -> Document Properties -> отметить “Generate Logfile”. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 TableWithValues: LOAD concat(chr(39) & SHOP_CODE & chr(39), ',') as concat_SHOP_CODE FROM '$(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)); 1 2 DROP Table TempOrders; DROP Tables TempOrders, TempCustomers, TempCalendar; 1 2 DROP Field NameDesc FROM TempTable; DROP Fields NameDesc, NameParent, ChildCode FROM TempTable; 1 2 3 4 5 //Строка подключения к базе данных Oracle ODBC CONNECT TO [QlikViewDatabase;DBQ=ORACLE_SERVICE_DB ] (XUserId is CKAZZ55555AFJdJEKHB, XPassword //Строка запуска процедуры PL/SQL из QlikView Script SQL CALL ORACLE_PACKAGE_NAME.PROCEDURE_NAME('STRING PARAM 1','STRING PARAM 2','$(qlikview_variable)')
  32. 32. Как сделать URL-ссылки в таблице? Допустим, что у нас есть таблица с названием статей и ссылками на статьи: Нам необходимо создать таблицу в QlikView, из которой можно было бы попасть на сайт со статьей. Делается это очень просто: 1 2 3 4 5 6 7 8 9 Article_Link: LOAD * INLINE [ Название статьи, Ссылка на статью Анализ истории Lastfm в контексте перехода на Яндекс.Музыку, http://habrahabr.ru/post/269941/ "Библиотека, помогающая преодолеть концептуальный разрыв между ООП и БД во время тестирования при использовани Разделить – значит преумножить, http://habrahabr.ru/company/hpe/blog/269915/ Параллельная обработка большого селекта в нескольких сессиях, http://habrahabr.ru/company/oda/blog/269693/ Памятка евангелиста PostgreSQL: репликанты против репликации, http://habrahabr.ru/post/269889/ ];
  33. 33. Результирующая таблица: Как создать выпадающий список для присвоения значения переменной в QlikView? Вот такое можно сделать: Исходные данные: 1 2 3 Persons: LOAD * INLINE [ Person_ID, Person_Name, Position
  34. 34. Шаг 1 – выбираем объект Input Box: Шаг 2 – настраиваем Constraints: 4 5 6 7 8 9 10 11 12 13 14 15 16 1, Константинов Дмитрий, Генеральный директор 2, Сергеев Антон, Руководитель практики бизнес-анализа 3, Иванов Илья, Старший консультант QlikView 4, Суворов Михаил, Старший консультант QlikView 5, Дмитриева Ольга, Консультант QlikView 6, Орлова Мария, Бизнес-аналитик QlikView 7, Григорьев Денис, Менеджер проектов 8, Машкова Екатерина, Младший консультант QlikView 9, Мухачев Иван, Младший аналитик 10, Михеева Дарья, Стажер ]; LET vSelectedPerson = 'Константинов Дмитрий';
  35. 35. Шаг 3 – Формируем список: Шаг 4 – Убираем знак равно: 1 =Concat({1} Person_Name,';')
  36. 36. Обработка нестандартных дат – форматирование дат в 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') 1 2 3 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()); 1 2 3 Date(Date#('$(vCurrDate)')-1,'DD.MM.YYYY') Date(Date#('$(vCurrDate)')-2,'DD.MM.YYYY') Date(Date#('$(vCurrDate)')-3,'DD.MM.YYYY')
  37. 37. Как исключить влияние выборок во всех измерениях, кроме перечисленных, на конкретную диаграмму в QlikView? На помощь приходит системное поле $Field и Set Analysis: В окне Expression выражение будет подчеркнуто как неправильное (но сам подход проверен и работает ). Массовая загрузка файлов в QlikView из директории (числов файлов не известно заранее) 1 Concat(DISTINCT {<product={'=Rank( SUM( Aggr( Avg({<date_main={"$(vCurrDate)"}, department_name={"$(vDepartment)"}, @data 1 sum({$<[$(=Concat({1<$Field-={'Stock','Manager'}>}distinct $Field,']=,[')&']=')>} Amount) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 //Директория хранения файлов с данными SET directoryName = 'C:QlikViewSourceERP_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,
  38. 38. Как вытащить из модели/приложения QlikView данные в qvd или csv? Для того, чтобы вытащить данные из модели QlikView (файл формата qvw) , достаточно запустить вот такой вот скриптик: “Импровизированный” генератор случайных чисел в QlikView Создание календаря в QlikView Для того, чтобы получить календарь в QlikView, достаточно взять ниже приведенный код и заменить наименование таблицы, в которой находятся даты. QlikView получает минимальную и максимальную дату и на основе этих данных генерирует массив дат с различными атрибутами (номер недели, месяц и т.п.): 36 37 38 39 40 41 @28 as Data10, @29 as Data11, @30 as Data12 From '$(fileName)' (txt, codepage is 1251, no labels, delimiter is ';', msq); NEXT fileName 1 2 3 4 5 6 7 Binary [C:QlikviewМодель_QlikView.qvw]; FOR vCount = 0 to NoOfTables()-1 LET vTableName = TableName($(vCount)); STORE $(vTableName) INTO 'C:Qlikviewqvd$(vTableName).qvd' (qvd); STORE $(vTableName) INTO 'C:Qlikviewcsv$(vTableName).csv' (delimiter is ';'); NEXT vCount 1 Round( 500 * ( 1 - sqrt(sqrt(Rand())) ) ) + 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 QuartersMap: MAPPING LOAD rowno() as Month, 'Q' & Ceil (rowno()/3) as Quarter AUTOGENERATE (12); Temp: LOAD min([Дата]) as minDate, max([Дата]) as maxDate Resident [Таблица фактов]; 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 TempDate AutoGenerate 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;
  39. 39. Создание исполняемого файла (Executable application.exe in qlikview) Для того, чтобы создать исполняемый файл, необходимо в приложении с лицензией зайти в меню и произвести следующие действия (привожу только картинки): Как через url открыть другой файл QlikView В Straight table можно создать URL, который будет вести к приложению с детальными данными: Внимание: этот подход работает только с диска C (где установлена винда). Получить текущую директорию и родительскую директорию в скрипте QlikView 1 file:///C:/Проекты QlikView/Детальные данные/Модель 1.1.qvw
  40. 40. Комментарии: ВКонтакте (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 * Сайт Комментарий
  41. 41. Сайт разработан ivan.shamaev@gmail.com

×