Как визуализировать воронку продаж в Google Data Studio?

Если вы используете Google Data Studio для создания отчетности, то вам наверняка приходила идея визуализировать последовательность определенных событий на сайте и посчитать коэффициенты конверсии для определенных этапов воронки.

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

Прежде чем приступить, нам необходимо создать пользовательский параметр содержащий в себе идентификатор сеанса {{Session ID}}, так как считать мы будем количество сессий в которых произошло то или иное нужное нам событие и уже из этих данных строить воронку.

Как создать идентификатор сеанса?

Для идентификатора сеанса мы будем использовать рандомно создаваемую строку, которая будет отправляться с каждым хитом в Google Analytics.

Создаем пользовательский параметр:

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

Далее идем в GTM и добавим переменную JavaScript содержащую следующий код:

function() {
    return new Date().getTime() + '.' + Math.random().toString(36).substring(5);
}

Этот скрипт создает уникальный идентификатор сеанса. Комбинируя Unix-время и случайный набор буквенно-числовых символов.

И наконец, дополняем тег просмотра страницы в GTM в разделе «Дополнительные настройки > Специальные параметры»:

Сохраняем, публикуем и теперь у нас с вами есть уникальный идентификатор, при помощи которого мы можем «сшить» между собой все хиты (просмотры страниц или события) в каждом конкретном сеансе.

Считаем воронку

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

  1. Просмотр карточки товара (за первый шаг воронки будем считать просмотр страницы товара)
  2. Нажатие кнопки «В корзину» (за второй шаг — событие, срабатывающее при нажатии на кнопку добавления в корзину)
  3. Переход на страницу «Оформление заказа» (за третий шаг — просмотр страницы оформления заказа)
  4. Переход на страницу «Спасибо за покупку» (и наконец за четвертый шаг — просмотр страницы с благодарностями).

Переходим в Data Studio и создаем новое вычисляемое поле используя формулу из комбинации COUNT_DISTINCT (для подсчета уникальных идентификаторов сеанса) и CASE (подробнее о CASE в справке):

COUNT_DISTINCT(
CASE 
WHEN REGEXP_MATCH (Страница, ".*/tovar/.*") // тут используем регулярное выражение для подсчета количества просмотров страниц содержащих товары
THEN Session ID
WHEN Действие по событию = "addToCart" // тут считаем количество событий добавления в корзину (естественно, отслеживание этого события у вас должно быть настроено)
THEN Session ID
WHEN Страница = "/cart/" // тут считаем количество просмотров страницы оформления
THEN Session ID
WHEN Страница = "/thank-you/" // тут считаем количество просмотров страницы "Спасибо"
THEN Session ID
ELSE ""
END)

// Важно! Комментарии Data Studio не поддерживает, поэтому удалите их при создании вычисляемого поля.

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

CASE 
WHEN REGEXP_MATCH (Страница, ".*/tovar/.*")
THEN "Просмотр страницы товара"
WHEN Действие по событию = "addToCart"
THEN "Добавление в корзину"
WHEN Страница = "/cart/"
THEN "Оформление заказа"
WHEN Страница = "/thank-you/"
THEN "Спасибо за покупку"
ELSE "Другое"
END

Теперь все готово для визуализации.

Визуализация воронки

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

И в итоге получаем вот такую визуализацию:

Красиво, но чего-то не хватает.

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

COUNT_DISTINCT(
CASE 
WHEN Название полей воронки = "Просмотр страницы товара" // Считаем количество уникальных сеансов для первого шага воронки
THEN Session ID
ELSE ""
END)

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

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

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

Пробуйте и не стесняйтесь задавать вопросы в комментариях!

P.S. Если вы еще не знакомы с Data Studio, то вначале советую прочитать статью «Data Studio — базовые знания».

Роман Романчук

Эксперт по маркетинговой и продуктовой аналитике, ex-директор по аналитике Сравни.
36 replies on “ Как визуализировать воронку продаж в Google Data Studio? ”
  1. Спасибо — интересно, делал такое же для cебя — только через Content Grouping (как шаги воронки)

  2. Роман, благодаря вашим статьям Data Studio стала мне почти родной)
    Не знаете, в чем может быть дело, если в рамках уникального Session ID в GA записывается 2 уникальных события, хотя такого вроде как не должно быть?

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

  3. Интересно, лаконично, грамотно — спасибо!
    Подскажите, как посчитать все сессии, чтобы построить воронку начиная с посещения сайта?
    Пробую таким способом, не получается:

    Шаги воронки
    WHEN REGEXP_MATCH (Страница входа, «.*»)
    THEN Session ID

    Названия шагов воронки
    WHEN REGEXP_MATCH (Страница входа, «.*»)
    THEN «Все сеансы»

      1. 🙂 У меня как в примере, шаги для битрикс

        COUNT_DISTINCT(
        CASE
        WHEN REGEXP_MATCH (Страница входа, «.*»)
        THEN Session ID
        WHEN Действие по событию = «Product Click»
        THEN Session ID
        WHEN Действие по событию = «Add to Cart»
        THEN Session ID
        WHEN Страница = «/personal/cart/»
        THEN Session ID
        WHEN Страница = «/personal/order/»
        THEN Session ID
        WHEN REGEXP_MATCH (Страница, «.*/personal/order/?ORDER_ID.*»)
        THEN Session ID
        ELSE «»
        END)
        Если без первого условия, то шаг с регуляркой не работает, может быть в ней все дело?

        1. Нашел в чем была проблема, у вас в примере

          WHEN REGEXP_MATCH (Страница, «.*/tovar/.*»)

          Между скобками и REGEXP_MATCH( не должно быть пробела 🙂

  4. Роман добрый день! А не подскажете как реализовать воронку если показатели уже вычислены (поля уже готовы) , но их надо объединить в одно поле «Воронка конверсий» с группировкой «Число показов» — «Число кликов» — «Число целей». https://uploads.disquscdn.com/images/45e29e47e00aabcef088eb861e5aa57cb4d7bb930ed27e248dd356605372c8d9.png

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

  5. Делал через сегменты GA(по пользователям, а не сеансам), а потом выгружал кол-во пользователей в каждом сегменте(Funnel_1, Funnel_2 и тд)
    Ну и делал в Sheets + addon к GA 🙂
    Вдруг кому пригодится

  6. День добрый! Сделал воронку следующим образом:

    Сама воронка:
    COUNT_DISTINCT(
    CASE
    WHEN REGEXP_MATCH(Страница, «.*/cart.*»)
    THEN SessionId
    WHEN REGEXP_MATCH(Страница, «.*/onestepcheckout.*»)
    THEN SessionId
    WHEN REGEXP_MATCH(Страница, «.*/success.*»)
    THEN SessionId
    ELSE «»
    END)

    Значения:
    CASE
    WHEN REGEXP_MATCH(Страница, «.*/cart.*»)
    THEN «Посещение корзины»
    WHEN REGEXP_MATCH(Страница, «.*/onestepcheckout.*»)
    THEN «Оформление заказа»
    WHEN REGEXP_MATCH(Страница, «.*/success.*»)
    THEN «Успешная покупка»
    ELSE «Другое»
    END

    В итоге данные расходятся с данными из Аналитикса по целям в меньшую сторону (в целях стоят регулярные выражения, но там просто: регулярное выражение success, к примеру). Где я свернул не туда?

    1. В целом, на сайте уже есть проставленные готовые цели. Может, будет проще визуализировать их в виде воронки? Но как?)

        1. Так действительно работает, спасибо! А как убрать лишние значения? По идее, нужно переделать этот параметр «Название полей», указав там значения целей, но что-то сама формула мне никак не дается. https://uploads.disquscdn.com/images/ffba1a876c8afe86a31e5555fd63bc27f240b7f810f0b3b6d14714b9855dd0b3.png

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

          2. Что-то как я ни бился, не удается избавиться от нулей. Либо всё остается на своих местах, либо исчезают вообще все значения

  7. Привет:)
    Построила воронку вот так:
    COUNT_DISTINCT(
    CASE
    WHEN REGEXP_MATCH(Страница,»for.example.ru/»)
    THEN sessionID
    WHEN Действие по событию = ‘submit’
    THEN sessionID
    WHEN Категория событий = ‘CONVERSIONS’ AND Действие по событию = ‘checkOut’
    THEN sessionID
    WHEN Категория событий = ‘CONVERSIONS’ AND Действие по событию = ‘sendSuccess’
    THEN sessionID
    ELSE »
    END
    )

    Значения:
    CASE
    WHEN REGEXP_MATCH(Страница,»for.example.ru/»)
    THEN ‘Просмотр страницы’
    CASE
    WHEN Действие по событию = ‘submit’
    THEN ‘Шаг 1’
    WHEN Категория действия = ‘CONVERSIONS’ AND Действие по событию = ‘checkOut’
    THEN ‘Шаг 2’
    WHEN Категория действия = ‘CONVERSIONS’ AND Действие по событию = ‘sendSuccess’
    THEN ‘Шаг 3’
    ELSE ‘Прочее’
    END

    Шаг 1 находится на странице for.example.ru/. Шаг1 считается некорректно, его значение меньше в десятки раз, чем в GA. Не подскажете в чем может быть проблема?
    Убираю Просмотр страницы — данные всех шагов, включая шаг 1, корректны.
    Вынесение
    WHEN REGEXP_MATCH(Страница,»for.example.ru/»)
    THEN ‘Просмотр страницы’
    в отдельный CASE не помогло

  8. Привет:)
    Построила воронку вот так:
    COUNT_DISTINCT(
    CASE
    WHEN REGEXP_MATCH(Страница,»for.example.ru/»)
    THEN sessionID
    WHEN Действие по событию = ‘submit’
    THEN sessionID
    WHEN Категория событий = ‘CONVERSIONS’ AND Действие по событию = ‘checkOut’
    THEN sessionID
    WHEN Категория событий = ‘CONVERSIONS’ AND Действие по событию = ‘sendSuccess’
    THEN sessionID
    ELSE »
    END
    )

    Значения:
    CASE
    WHEN REGEXP_MATCH(Страница,»for.example.ru/»)
    THEN ‘Просмотр страницы’
    WHEN Действие по событию = ‘submit’
    THEN ‘Шаг 1’
    WHEN Категория действия = ‘CONVERSIONS’ AND Действие по событию = ‘checkOut’
    THEN ‘Шаг 2’
    WHEN Категория действия = ‘CONVERSIONS’ AND Действие по событию = ‘sendSuccess’
    THEN ‘Шаг 3’
    ELSE ‘Прочее’
    END

    Шаг 1 находится на странице for.example.ru/. Шаг1 считается некорректно, его значение меньше в десятки раз, чем в GA. Не подскажете в чем может быть проблема?
    Убираю Просмотр страницы — данные всех шагов, включая шаг 1, корректны.
    Вынесение
    WHEN REGEXP_MATCH(Страница,»for.example.ru/»)
    THEN ‘Просмотр страницы’
    в отдельный CASE не помогло

    1. Привет)
      А что ты хочешь посчитать в первом шаге воронки?
      Считая Session ID ты посчитаешь сеансы на данной странице, а не просмотры.
      Я, наверное, не совсем понятно описал это в статье.

      1. Я хочу посчитать количество сешн айди которые посещали страницу for.example.ru/
        Проблема в том, что при наличие шага с посещением страницы, «Шаг 1»:
        WHEN Действие по событию = ‘submit’
        THEN ‘Шаг 1’

        считается не корректно, он сразу становится меньше в большое количество раз. Может быть дело в том, что действие соответствующее «Шаг 1» находится также на странице for.example.ru/?
        Если убрать
        WHEN REGEXP_MATCH(Страница,»for.example.ru/»)
        THEN sessionID

        То «Шаг 1» сразу считается корректно.
        Не понимаю как это исправить(

        1. То есть проблема даже не в том, что просмотр страницы подсчитывается как-то не так. Проблема в том, что он мешает дальше воронке работать корректно.

  9. Добрый день!
    Как добавить новое вычисляемое поле, где была бы информация по выполненным целям ?

    1. Привет!
      Новое поле необязательно создавать. В Google Analytics есть показатель «Достигнутые цели», который содержит информацию по всем целям.

  10. Роман, добрый день,

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

    Спасибо.

    1. Здравствуйте!
      Для этого нужно будет установить Google Analytics прямо в код сайта на все страницы и далее настроить дополнительный JS код, отправляющий с каждым хитом Session ID.
      Не очень хорошая реализация, так сейчас никто не делает)
      Ставьте GTM и настраивайте там.
      А если не знаете как это сделать, то вот тут все подробно написано http://thisisdata.ru/courses/digital-analytics/section2-lesson3/

  11. Приветствую! подскажи пожалуйста, что я делаю не то: Конверсия 18%, а должна быть 10%
    http://prntscr.com/p0fb4z

    показатели воронки

    COUNT_DISTINCT(
    CASE
    WHEN Страница = «/main»
    THEN Session ID
    WHEN Страница = «/main-thanks»
    THEN Session ID
    ELSE «»
    END)

    параметры воронки

    CASE
    WHEN Страница = «/main»
    THEN «Посетил подписную страницу»
    WHEN Страница = «/main-thanks»
    THEN «Зарегистрировался на мастер-класс»
    ELSE «Другое»
    END

    1. нашёл решение другое. Создал фиксацию абсолютно всех взаимодействий с сайтом через переменные в Google tag manager. Теперь я могу отдельно выводить параметр

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *