Как работать с неагрегированными данными Яндекс.Метрики? (Метрика Про)

11 сентября, 2023

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

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

Именно на их основе я буду выполнять работу с неагрегированными (сырыми) данными своего счетчика Яндекс.Метрики, настроенную с помощью интеграции, входящей в пакет Метрика Про. Это важно, поскольку механизм интеграции обладает некоторыми отличиями от выгрузки данных с использованием Logs API (+ не является обратно совместимой с Logs API по формату данных):

  • интеграция в Метрике Про содержит расширенный набор полей;
  • в визитах, в отличие от Logs API, атрибуция лежит массивами. Все массивы вида TrafficSource.XXX скоррелированы между собой по типу атрибуции. Поле XXX в нужной атрибуции YYY: TrafficSource.XXX[indexOf(TrafficSource.Model, YYY)] as XXX;
  • в визитах поле FirstPartyCookie аналогично clientid в LogsAPI.

Фрагменты запросов, которые будут использоваться в этом руководстве, размещены в официальной документации Яндекса. Мы лишь пройдемся по ним и увидим реальный результат от выполнения данных команд. И сделаем это в двух местах:

  1. подключимся к базе данных ClickHouse с помощью DBeaver и выполним запрос там;
  2. подключимся к Yandex DataLens с помощью встроенного коннектора ClickHouse и выполним запрос в нем, создав QL-чарт.

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

Начнем работу с неагрегированными данными Яндекс.Метрики?

Все приведенные запросы выполняются только для пакета Метрика Про.

Как выгружать визиты

Первый запрос, который мы выполним - это данные по визитам. В официальной справке Яндекса он выглядит так (пример со множеством полей):

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

В строке:

Необходимо вставить путь к базе данных и таблице визитов для своего кластера ClickHouse. Чтобы узнать его, перейдите в свой проект Yandex Cloud и откройте сервис Managed Service for ClickHouse. Нажмите на название своего кластера:

Выбор кластера ClickHouse

На открывшейся странице выберите SQL, а затем введите имя пользователя и пароль и подключитесь к своей базе данных:

Подключение к ClickHouse

В следующем окне провалитесь внутрь вашей базы данных. Там вы должны увидеть таблицу визитов с данными вашего счетчика Яндекс.Метрики:

Таблица визитов в ClickHouse

У вас будет другое название этой таблицы, поскольку идентификатор, следующий за префиксом visits_, для каждого проекта уникальный. Скопируйте название таблицы визитов и перед ней добавьте название базы данных, разделив их точкой (без пробелов!). Для моего проекта - это db1.visits_dtta54kkhn59qe3i94jj . Вставьте полученное значение вместо шаблона yandex_data_transfer_test.visits_dttql4la13mb206q472r.

Следующее, что вам потребуется заменить - это диапазон дат. В строке:

В качестве примера я укажу 1 сентября 2023 года (2023-09-01).

Поскольку Яндекс не знает идентификатора вашего счетчика Метрики, то вам необходимо вручную задать его в запросе. Для этого измените значение 24226447 в скобках в строке:

На идентификатор собственного счетчика Яндекс.Метрики. Чтобы найти его значение, перейдите по ссылке и скопируйте идентификатор напротив нужного счетчика:

Идентификатор счетчика Яндекс.Метрики

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

  • идентификатор счетчика;
  • путь к базе данных и таблице с данными;
  • диапазон дат.

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

Теперь этот запрос можно выполнить и посмотреть на результат. Как я писал ранее, мы будем это делать в DBeaver и/или DataLens.

Чтобы выполнить SQL-запрос в DBeaver, правой кнопкой мыши нажмите на базу данных или само подключение, и выберите Редактор SQL - Новый редактор SQL:

Редактор SQL - Новый редактор SQL

В открывшемся окне вы можете написать SQL-запрос. Вставьте вышеприведенный код с данными, которые вы заменили на свои:

Пример запроса со множеством полей (по визитам)

Чтобы выполнить команду, нажмите на оранжевую иконку или сочетание клавиш Ctrl+Enter:

Выполнение SQL-запроса

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

Результат выполнения

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

Он будет содержать множество полей, которое можно выгрузить в тарифе Метрика Про. По столбцу FirstPartyCookie можно подсчитать количество строк и сопоставить полученный результат с данными Яндекс.Метрики. Количество визитов по уникальному идентификатору пользователя за выбранный диапазон дат должно +/- сходиться.

Сравнение статистики визитов по сырым данным и в интерфейсе Метрики

В справке Яндекса есть несколько уточнений по поводу выгрузки и подсчету статистики:

  • визиты могут обновляться в прошлое, например при привязывании офлайн-конверсии;
  • при включении интеграции у самых первых визитов sum(Sign) может оказаться неконсистентным.

В логах коннектора лежат несколлапсированные версии визитов (т.е. несколько версий одного визита). Если их не коллапсировать, то данные будут неконсистентыми и один и тот же визит (его старые версии) будет учитываться более 1 раза. Это происходит, потому что при обновлении визита старая версия (VisitVersion = 1, Sign = 1) не удаляется. Вместо этого добавляется полностью идентичная старой версии строчка, с разницей лишь в знаке Sign (VisitVersion = 1, Sign = -1). Далее добавляется уже обновленная версия визита с положительным Sign (VisitVersion = 2, Sign = 1). Таким образом, сделав group by по интересующим полям, вы получите правильное и корректное число визитов через sum(Sign) за счет «схлопывания» неактуальных версий (Sign = 1 и Sign = -1 превратится в ноль).

Вот так это выглядит в таблице с данными в ClickHouse:

VisitID, Sign, VisitVersion

Один визит с VisitID имеет несколько строк в таблице с разными значениями Sign и VisitVersion, и старая версия из таблицы не удаляется.

Далее в справке Яндекса приводится несколько примеров.

Пример несколлапсированного визита в логах визита
В DBeaver это сам запрос и результат его выполнения будет выглядеть так:

Пример несколлапсированного визита в логах визита

Если ваш запрос выдает пустой результат, попробуйте изменить значение count(distinct VisitVersion) > 3 на меньшее, например, 1 или 2.

Пример с правильным коллапсированием
Результат выполнения SQL-запроса:

Пример с правильным коллапсированием

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

final обрабатывает таблицу таким образом, чтобы версии уже были сколлапсированы. Убирает неактуальные версии визитов сам. Работает гораздо дольше, чем при подсчете через группировку и sum(Sign).

Пример SQL-запроса:

Результат его выполнения:

Пример коллапсирования с использованием final

Как выгружать хиты

Хит (hit) - это событие, которое учитывается Метрикой. Такими событиями являются:

  • просмотры;
  • достижение любой цели, созданной на счетчике;
  • отправка параметров визитов.

Хитом не считаются события, которые передаются при инициализации счетчика.

В официальной справке Яндекса представлен следующий пример запроса:

, где вам необходимо изменить:

  • yandex_data_transfer_test.hits_dttql4la13mb206q472r на свою базу данных а таблицу с хитами;

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

  • перейдите в свой проект Yandex Cloud и откройте сервис Managed Service for ClickHouse. Нажмите на название своего кластера;
  • на открывшейся странице выберите SQL, а затем введите имя пользователя и пароль и подключитесь к своей базе данных;
  • в следующем окне провалитесь внутрь вашей базы данных. Там вы должны увидеть таблицу хитов с данными вашего счетчика Яндекс.Метрики. Таблица хитов имеет префикс hits_

Таблица хитов в ClickHouse

В строке where EventDate = today()-1 вставьте нужную дату, а в CounterID = 24226447 измените значение на идентификатор своего счетчика Яндекс.Метрики.

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

Результат выполнения

Как соотнести визит с его хитами

Для соотнесения VisitID с принадлежащими ему хитами (WatchID) может быть недостаточно колонки WatchIDs. Это связано с тем, что в поле WatchID отсутствуют хиты-параметры визитов. Вы можете самостоятельно собрать список хитов, которые входят в визит. Для этого нужна дата начала визита, дата окончания визита и идентификатор посетителя.

SQL-запрос:

В этом запросе вам нужно изменить значения примеров базы данных и таблиц на свои:

  • from yandex_data_transfer_test.visits_dttql4la13mb206q472r на свою таблицу визитов и базу данных;
  • from yandex_data_transfer_test.hits_dttql4la13mb206q472r на свою таблицу хитов и базу данных;

А а также скорректировать дату выгрузку в нескольких местах:

  • where StartDate = '2023-04-01'
  • EventDate >= '2023-04-01'
  • and EventDate <= toDate('2023-04-01')+5 )

Результат выполнения кода в DBeaver будет выглядеть так:

Результат объединения данных таблиц визитов и хитов

Отчет "Посещаемость"

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

И первый отчет, который мы воспроизведем - отчет по посещаемости.

SQL-запрос для построения QL-чарта:

Результат выполнения в DBeaver:

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

Вы можете сравнить данные, полученные после выполнения SQL-команды, с интерфейсными. Они должны сходиться со статистикой в отчете "Посещаемость":

Данные в отчете "Посещаемость"

В моем примере количество визитов сходятся (968 за 1 сентября 2023 года). Вы можете изменить диапазон дат, указав больший период выгрузки, а не только за один день. Например, с 1 по 7 сентября 2023 года:

Выгрузка данных за больший диапазон дат

Чтобы построить график по визитам в Yandex DataLens, вам необходимо перейти по ссылке и в меню Чарты выбрать Создать чарт - QL-чарт:

Создание QL-чарта

Затем выберите типа чарта SQL и подключение к своему кластеру ClickHouse. В завершение нажмите кнопку Создать:

Выбор подключения к ClickHouse

На открывшейся странице в левой ее части вы можете писать свой SQL-запрос, а в правой получать результат его выполнения в виде выбранной визуализации (чарта):

Окно создания QL-чарта в Yandex DataLens

Давайте построим самый простой график по посещаемости, выбрав тип чарта Линейная диаграмма. Вставьте вышеприведенный код в окно запроса и нажмите кнопку Запустить. В правой части вы увидите итоговый график по визитам, очень схожий на то, что представлено в интерфейсе Яндекс.Метрики:

График посещаемости на основе сырых данных Яндекс.Метрики

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

Столбчатая диаграмма

Поздравляю! Вы только что создали свою первую визуализацию на основе неагрегированных данных с помощью SQL-запроса. Чтобы сохранить график по визитам и в дальнейшем использовать его на своем дашборде DataLens, в правом верхнем углу нажмите кнопку Сохранить. Задайте QL-чарту название и сохраните его в нужной папке.

Помимо графика в отчете по посещаемости есть таблица с данными различных показателей. SQL-запрос для нее будет таким:

Результат выполнения этого кода в DBeaver:

Таблица с данными о посещаемости за выбранный диапазон дат

Вы можете скопировать SQL-запрос и добавить его в DataLens, выбрав в качестве чарта тип Таблица:

QL-чарт по посещаемости в DataLens

Сохранив эту таблицу как отдельный QL-чарт, вы сможете в дальнейшем использовать ее в дашборде.

Отчет "UTM метки"

Пример запроса из официальной справки Яндекса (таблица визитов):

Результат выполнения в DBeaver:

Таблица с данными по UTM-меткам в DBeaver

Запуск запроса в DataLens:

QL-чарт с данными по UTM-меткам в DataLens

Сохранив эту таблицу как отдельный QL-чарт, вы сможете в дальнейшем использовать ее в дашборде.

Отчет "Популярное"

Пример запроса в официальной документации Яндекса (таблица хитов):

Результат выполнения в DBeaver:

Таблица с данными по популярным страницам сайта в DBeaver

Запуск запроса в DataLens:

QL-чарт с данными по популярным страницам в DataLens

Сохранив эту таблицу как отдельный QL-чарт, вы сможете в дальнейшем использовать ее в дашборде.

Отчет "Конверсия цели"

Если вы хотите получить статистику по конкретной цели вашего счетчика Яндекс.Метрика, то используйте нижеприведенный SQL-запрос:

В нем вам не просто нужно поменять даты, идентификатор счетчика и название таблицы визитов и базы данных, но еще и указать идентификатор цели. Узнать его можно в интерфейсе Яндекс.Метрики в разделе Цели:

Номер цели в интерфейсе Метрики

Напротив нужной цели будет написан ее номер (ID). Вам нужно скопировать его и вставить в запросе в несколько мест, заменив шаблонное значение goal17069575 на свое goalXXXXXXXX, где XXXXXXXX - ваш идентификатор цели.

В DBeaver очень легко заменить все значения на новые, используя функцию замены с помощью клавиш Ctrl+F. В результате вы получите следующий результат:

Таблица с данными по выбранной конверсии в DBeaver

Запуск запроса в DataLens:

QL-чарт с данными по выбранной конверсии в DataLens

Сохранив эту таблицу как отдельный QL-чарт, вы сможете в дальнейшем использовать ее в дашборде.

Отчет "Источники, сводка"

Следующий отчет, который мы построим с вами на сырых данных - это Источники, сводка. Он будет в двух модификациях - таблица и таблица, детально. Точно так же, как и в интерфейсе Яндекс.Метрики, где в отчете Источники, сводка присутствует две группировки - Источник трафика, Источник трафика (детально):

Отчет "Источники, сводка" (Источник трафика, Источник трафика (детально))

Сначала просто табличный вариант (таблица визитов):

Результат выполнения в DBeaver:

Таблица с данными по источникам трафика в DBeaver

В столбце ym:s:lastSignTrafficSource отображаются не сами источники трафика, а их индексы - 1, 2, -1, 0, 9 и т.д. Значения в полях  означают:

  • -1: Внутренние переходы;
  • 0: Прямые заходы;
  • 1: Переходы по ссылкам на сайтах;
  • 2: Переходы из поисковых систем;
  • 3: Переходы по рекламе;
  • 4: Переходы с сохраненных страниц;
  • 5: Не определен;
  • 6: Переходы по внешним ссылкам;
  • 7: Переходы с почтовых рассылок;
  • 8: Переходы из соц сетей;
  • 9: Переходы из рекомендательных систем;
  • 10: Переходы из мессенджеров;
  • 11: Переходы по QR коду.

Вы можете сравнить полученные данные со статистикой в интерфейсе по данному отчету:

Отчет "Источники, сводка"

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

Запрос в DataLens:

QL-чарт с данными по источникам трафика в DataLens

Другой SQL-запрос позволяет детальнее узнать про источники трафика (таблица визитов):

Результат выполнения в DBeaver:

Таблица с детальными данными по источникам трафика в DBeaver

Запрос в DataLens:

QL-чарт с детальными данными по источникам трафика в DataLens

Сохранив таблицы по источникам трафика и источникам трафика (детально) как отдельные QL-чарты, вы сможете в дальнейшем использовать ее в дашборде.

Отчет "Рекламные системы"

Еще один интересный пример, который разбирается в официальной документации Яндекса - это отчет Рекламные системы (таблица визитов):

Результат выполнения в DBeaver:

Таблица с данными по рекламным системам в DBeaver

Запрос в DataLens:

QL-чарт с данными по рекламным системам в DataLens

Сохранив эту таблицу как отдельный QL-чарт, вы сможете в дальнейшем использовать ее в дашборде.

Теперь на сырых данных попробуем построить отчеты, которых нет в интерфейсе в Метрики. Яндекс дает примеры следующих отчетов:

  • Воронки ecommerce-событий
  • Воронки ecomerce-событий в различных срезах
  • Удержание новых посетителей
  • Удержание новых посетителей в различных срезах

Воронки ecommerce-событий

Интеграция Яндекс.Метрики c Yandex Cloud (Метрика Про) позволяет построить более сложные отчеты, которых нет в Метрике. Например, построить воронку по ecommerce-событиям.

Для этого отчета Яндекс рекомендует соблюдать следующие условия:

  • должны быть настроены события detail, add, purchase и их корректная передача;
  • от 10 посетителей в каждом из срезов;
  • конверсия в первый шаг больше 1 %.

Если ваш проект удовлетворяет данным требованиям, то запрос по воронке ecommerce-событий будет выглядеть так (таблица визитов):

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

Вышеприведенный запрос нет смысла выполнять в DBeaver, поскольку результат представляется в виде столбчатой диаграммы. Поэтому сразу выполним его в Yandex DataLens:

QL-чарт с воронкой ecommerce-событий в DataLens

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

Воронки ecommerce-событий (по срезам)

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

Сам SQL-запрос (срез по мобильным и не мобильным устройствам, isMobile):

Сделаем то же самое в DataLens, заменив шаблонные данные на свои:

QL-чарт построения воронки на срезе по IsMobile

Удержание новых посетителей

SQL-запрос из справки Яндекса (таблица визитов):

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

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

Результат выполнения кода в DataLens:

QL-чарт удержания (retention) новых пользователей

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

Удержание новых посетителей (по срезам)

Также можно добавить срез и сравнивать удержание в разных срезах. Яндекс рекомендует, чтобы в срезе было хотя бы 30 посетителей, а сам срез составлял хотя бы 5% от общего числа.

Пример удержания по различным источникам трафика первого визита посетителя (таблица визитов):

Запрос в DataLens позволяет построить такой QL-чарт:

QL-чарт удержания (retention) новых пользователей по источникам трафика

Как видите, этот запрос показывает источники трафика как индексы:

  • -1: Внутренние переходы;
  • 0: Прямые заходы;
  • 1: Переходы по ссылкам на сайтах;
  • 2: Переходы из поисковых систем;
  • 3: Переходы по рекламе;
  • 4: Переходы с сохраненных страниц;
  • 5: Не определен;
  • 6: Переходы по внешним ссылкам;
  • 7: Переходы с почтовых рассылок;
  • 8: Переходы из соц сетей;
  • 9: Переходы из рекомендательных систем;
  • 10: Переходы из мессенджеров;
  • 11: Переходы по QR коду.

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

Получайте бесплатные уроки и фишки

По контекстной, таргетированной рекламе и аналитике