Не секрет, что QlikView обладает мощным интеграционным движком. Технология подключения к традиционным источникам данных, таким как Microsoft SQL Server, PostgreSQL, MySQL и прочие СУБД, достаточно широко освещена в руководствах к QlikView, блогах, различных книгах и учебниках. То же самое касается и подключения плоских файлов (Excel, CSV, TXT). Но сегодня хочу рассказать о том, как подключиться к веб-источникам, на примере сервиса Яндекс Метрика.
НА ЗАМЕТКУ! Под веб-источникам мы понимаем некий веб-ресурс, который содержит необходимую для нас информацию, которую нам следует интегрировать в QlikView для последующего анализа.
Минутка теории: Способы подключения веб-источников в QlikView
Существует два основных способа получения данных в QlikView из веб-источников:
- Непосредственный запрос из QlikView к веб-ресурсу, в стиле запросов GET через API.
В зависимости от того, какие возможности выдачи информации предусмотрены в API веб-ресурса, такую информацию мы и получим. На практике, чаще всего информация поставляется после запроса в виде XML, JSON, KML (Google Maps), хотя бывают и иные варианты, те же CSV, TXT, иногда XLS и т.п.
- QlikView считывает код веб-страницы и по заданным параметрам «забирает» только необходимые данные.
Этот поход нужно использовать, когда информация находится в теле веб-страницы, скажем, курс валюты на главной странице www.yandex.ru. О том, как его реализовать, расскажу в отдельном посте.
Получаем данные из веб-источников в QlikView: метод прямого запроса
-
Первоначальная подготовка
a) API
Если мы хотим забрать данные в QlikView из Яндекс Метрики и любого другого веб-ресурса, следует начать с изучения API данного ресурса. Описание API Яндекс.Метрики:
Нам следует получить токен для авторизации, но перед тем, как получить токен, естественно, должен быть установлен и настроен счетчик Яндекс Метрики на сайте.
Как получить токен и настроить счетчик Яндекс достаточно хорошо описано в документации: . Будем считать, что счетчик Яндекс Метрики у Вас на сайте работает и токен вы получили по инструкции.
Следующий шаг – выбор формата данных. Для загрузки в QlikView выберем XML, т.к. для JSON интерпретации QlikView следует еще «обучить» (подобные реализации существуют в некотором количестве в Интернете, но с XML будет проще). Выбор формата XML или JSON осуществляется непосредственно в строке запроса.
В документации к API есть примеры тех или иных запросов к Яндекс Метрике, с примерным видом результатов. Так как эта статья – руководство для старта работы с данными Яндекс Метрики в QlikView, здесь мы будем рассматривать только базовые варианты настроек.
b) Скрипт в основе всего
Чтобы мы могли получить какие-либо данные в QlikView, следует создать соответствующий скрипт, который будет или загружать данные из источника, или их генерировать непосредственно в скрипте по заданным параметрам. Или даже делать оба действия сразу.
Итак, для того, чтобы получить данные для анализа из Яндекс Метрики, нам следует написать такой скрипт, который будет обращаться к Яндекс Метрике особым способом, где Яндекс Метрика будет «распознавать» данное обращение и «понимать» что это за запрос, после чего возвращать соответствующий XML массив необходимых данных.
-
Загружаем данные Яндекс Метрики в QlikView
a) Запускаем QlikView, открываем редактор скрипта Ctrl+E, и начинаем кастовать заклинания.
Так у нас выглядит базовая строка запроса к API Яндекс Метрике:
http://api-metrika.yandex.ru/stat/traffic/summary?id=$(vMetricsID)&oauth_token=$(vMetricsKEY)&date1=20100101&date2=20100101]
Где vMetricsID – переменная QlikView, которая содержит в себе идентификатор счетчика метрики и vMetricsKEY – токен для доступа к счетчику.
Токен и ID счетчика, повторюсь, следует получать непосредственно в панели управления Яндекс Метрикой.
Переменные QlikView используются для того, чтобы можно было динамически, когда нам это потребуется изменять идентификатор счетчика и токен для получения статистики по другому сайту, т.е. для быстрой настройки, без редактирования скрипта.
b) Создаем объект для внесения данных авторизации Яндекс.Метрики:
- Закрываем на время редактор скрипта.
- Добавляем новый лист в приложении. В верхнем меню Layout> Add sheet.
- Далее нам нужно создать две переменные. В верхнем меню Settings> Variable Overview или Ctrl+Alt+V нажимаем Add. Указываем название vMetricsKEY. Точно также создаем vMetricsID.
- Ок. Теперь создадим объект, который позволит нам вносить информацию в данные переменные. Кликаем на втором листе (который мы добавили в пункте №2) в любое место правой кнопкой мышки New Sheet Object> Input Box.
- В настройках инпут бокса на основной вкладке будут видны две наших переменных, добавляем их в Displayed Variables.
- Появился инпут бокс:
- Вводим в соответствующие поля токен и идентификатор счетчика Яндекс Метрики.
c) Продолжим работу с скриптом
- Переходим в редактор скрипта QlikView, Ctrl+E. В начале скрипта у нас есть некий набор текста, его не трогаем.
- Ставим курсор в 11 строку под текстом, далее нажимаем кнопку внизу «Web files». Выбираем опцию «Internet files» и вводим в этом поле стандартный XML демо-запрос к Яндекс Метрике: http://api-metrika.yandex.ru/stat/traffic/summary?id=2138128, и переходим далее.
- Видим, что результата нет. Это нормально, т.к. нам здесь требуется авторизация.
- Что же, берем эту строку за основу и переделываем ее следующим образом:
http://api-metrika.yandex.ru/stat/traffic/summary?id=$(vMetricsID)&oauth_token=$(vMetricsKEY)&date1=20100101&date2=20100101]
где мы подставили соответствующие переменные в виде параметров строки запроса. QlikView вместо переменных в данную строку запроса подставит значения из них. Соответственно в Яндекс Метрику уйдет уже такой запрос, который система сможет обработать и вернет в QlikView XML массив данных.
НА ЗАМЕТКУ! Обратите внимание, что в строке также используются два параметра, date1 и date2, это «Дата с» и «Дата по» диапазона, за который мы запрашиваем данные из Яндекс Метрики в QlikView. Здесь мы используем свои даты, с 01 января 2010 года по 01 января 2010 года, т.е. данные о посещениях сайта за один день. Указав иной диапазон, Яндекс Метрика вернет агрегированный массив информации за этот конкретный период времени. Обычно нас интересует информация о посещаемости сайта за более продолжительный период, скажем, за последние три года, за каждый день. В следующей части обзора я покажу, как получить такие данные, а сейчас же мы сфокусируемся только на том, как получить данные из Яндекс Метрики в QlikView. Все улучшения уже будем применять после.
- Итак, ввели получившуюся строку в поле «Internet file» (уже обновленную строку с токеном и идентификатором счетчика). Жмем «Далее». Если авторизация прошла успешно, Вы увидите примерно следующее:
- Нажимаем «Finish» и переходим к скрипту. Увидим нечто подобное:
doc:
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 |
LOAD xmlns, date2, rows, date1, id, [totals/denial], [totals/visits], [totals/new_visitors_perc], [totals/page_views], [totals/visit_time], [totals/depth], [totals/new_visitors], [totals/visitors], [goals/count], [data/count], [data/row/wday] as wday, [data/row/denial] as [row/denial], [data/row/visits] as [row/visits], [data/row/new_visitors_perc] as [row/new_visitors_perc], [data/row/page_views] as [row/page_views], [data/row/date] as date, [data/row/visit_time] as [row/visit_time], [data/row/depth] as [row/depth], [data/row/new_visitors] as [row/new_visitors], [data/row/visitors] as [row/visitors], [data/row/id] as [row/id], [max/denial], [max/visits], [max/new_visitors_perc], [max/page_views], [max/visit_time], [max/depth], [max/new_visitors], [max/visitors], [min/denial], [min/visits], [min/new_visitors_perc], [min/page_views], [min/visit_time], [min/depth], [min/new_visitors], [min/visitors] FROM [http://api-metrika.yandex.ru/stat/traffic/summary?id=xxxxxxxx&oauth_token=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy&date1=20140505&date2=20140505] (XmlSimple, Table is [doc]); |
Разберем подробнее, что же мы сейчас получили.
Doc: — это стандартный синтаксис QlikView, указывающий на то, что мы создаем в оперативной памяти таблицу под названием Doc. Она будет содержать в себе поля, которые перечислены между операторами Load … From.
Все поля, которые у нас здесь есть – это поля, которые возвращает нам Яндекс Метрика. Отметим, что в скрипте некоторые поля имеют префикс as. Это означает примерно следующее – «взять» поле [data/row/wday] из источника данных и загрузить его в таблицу с названием wday. Таким же образом мы можем переименовать далее любое поле.
- Уберем чехарду с датами. Обратите внимание, в нашем запросе в API Яндекс Метирики даты указываются в формате Яндекс Метрики, т.е. YYYYMMDD. QlikView же, по умолчанию воспринимает формат даты вида MMDDYYYY. Соответственно, для того, чтобы преобразовать формат данных, который будет использоваться далее в таблице, следует применить преобразование:
- Укажем маску для даты окончания выборки date2. Для этого используем префикс в скрипте QlikView — date# (подробнее см. прилагаемый к QlikView Help): Date#(date2, ‘YYYYMMDD’) as date2,
- В данном случае мы объявляем, что информация, содержащаяся в поле date2, должна восприниматься как дата вида YYYYMMDD, и название поля мы оставляем таким же, для этого указываем as date2. В таблицу QlikView данные после такой процедуры попадут уже в традиционном виде MMDDYYYY. Т.е. суть данной процедуры считать данные из поля в том виде, в котором они есть и транспонировать этот вид на тот, который применяется сейчас по умолчанию.
- Сейчас никакие поля мы удалять не будем, и больше изменений в скрипте также пока не будем производить. Финальный скрипт с учетом нашего маленького преобразования будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 |
SET ThousandSep=’ ‘; SET DecimalSep=’,'; SET MoneyThousandSep=’ ‘; SET MoneyDecimalSep=’,'; SET MoneyFormat=’# ##0,00 р.;-# ##0,00 р.'; SET TimeFormat=’h:mm:ss'; SET DateFormat=’DD.MM.YYYY'; SET TimestampFormat=’DD.MM.YYYY h:mm:ss[.fff]'; SET MonthNames=’янв;фев;мар;апр;май;июн;июл;авг;сен;окт;ноя;дек'; SET DayNames=’Пн;Вт;Ср;Чт;Пт;Сб;Вс'; |
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 |
doc: LOAD xmlns, Date#(date2, ‘YYYYMMDD’) as date2, rows, date1, id, [totals/denial], [totals/visits], [totals/new_visitors_perc], [totals/page_views], [totals/visit_time], [totals/depth], [totals/new_visitors], [totals/visitors], [goals/count], [data/count], [data/row/wday] as wday, [data/row/denial] as [row/denial], [data/row/visits] as [row/visits], [data/row/new_visitors_perc] as [row/new_visitors_perc], [data/row/page_views] as [row/page_views], [data/row/date] as date, [data/row/visit_time] as [row/visit_time], [data/row/depth] as [row/depth], [data/row/new_visitors] as [row/new_visitors], [data/row/visitors] as [row/visitors], [data/row/id] as [row/id], [max/denial], [max/visits], [max/new_visitors_perc], [max/page_views], [max/visit_time], [max/depth], [max/new_visitors], [max/visitors], [min/denial], [min/visits], [min/new_visitors_perc], [min/page_views], [min/visit_time], [min/depth], [min/new_visitors], [min/visitors] FROM [http://api-metrika.yandex.ru/stat/traffic/summary?id=xxxxxxxx&oauth_token=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy&date1=20140505&date2=20140505] (XmlSimple, Table is [doc]); |
d) Проверим, все ли получилось:
- Если Вы указали диапазон дат С и ПО, в рамках которого есть статистика в счетчике, а также указали корректно идентификатор счетчика Яндекс Метрики и токен для доступа, QlikView сможет загрузить данные из Яндекс Метрики без проблем.
- Нажимаем Ctrl+S, чтобы сохранить приложение.
- Нажмимаем Ctrl+R, чтобы перезагрузить приложение. QlikView обратится в Яндекс Метрику и получит соответствующие данные, наложит преобразование на поле date2, сохранит все поля в таблице Doc. Просмотреть эту таблицу Вы сможете в модели данных, если откроете табличный просмотр в QlikView нажав Ctrl+T.
Во второй части учебного обзора работы с Яндекс Метрикой мы:
- добавим две переменные, чтобы управлять диапазоном дат С и ПО без изменений в скрипте.
- добавим ряд преобразований в скрипте и выражений контроля выполнения скрипта, чтобы получить информацию за длительный период времени за каждый день посещения сайта, в одной строке = данные за один день. Т.е. «научим» QlikView определять, какая «сейчас» дата, за какую дату у нас есть данные в QlikView из Яндекс Метрики, чтобы делать инкрементальные дозагрузки новых данных.
- познакомимся с QlikView Data Files (.qvd) – специальный форматом хранения данных, который использует QlikView.
На этом сегодня все. При обнаружении ошибок или неточностей, прошу оставлять комментарии. Задавайте любые вопросы.
Спасибо.
Свежие комментарии