Funnel vizualisation - как построить?

 · 4 min read
 · Mikhail K
Table of contents

Построение "Воронки" продаж

Визуализация Funnel Chart ("Воронка") символизирует собой процесс. С помощью нее можно великолепным образом раскрыть суть данных. Показать в количественном выражении значения которые изменяются от этапа к этапу. Надеюсь, эта статья поможет сэкономить время на поиски неочевидных моментов при построении виза, обьеденении разрозненных источников из интернета и разборе того как все устроено что называется "под капотом"

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

  1. Использование баров
  2. Использование Measure Values и табличных вычислений

Два озвученных способа и алгоритмов их построения мы рассмотрим ниже.

Способ № 1: Использование баров

Текущий способ является наипростейшим из представленных и основан на барах, линиях или областях. IMAGE_1

Алгоритм действий:

  1. Построить стандартный график Bar Chart (столбиковая диаграмма)
  2. Отсортировать категории по требования (по убыванию суммы значений или в ручном порядке)
  3. Дублировать меру и инвертировать ее шкалу (опция Reversed)
  4. Форматировать визуализацию

Способ № 2: Использование Measure Values и табличных вычислений

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

Подготовка данных

В первом способе данные представлены так, что каждая запись содержит один статус. Более того, в интернете часто предлагается агрегировать данные по этапам. И именно в таком виде передавать данные на вход инструменту BI. Но это ужастный способ, так как тем самым отбирается хлеб этого инструмента. Ведь он ответственен за агрегации и вычисления. Более того, в таком виде мы сами себя лишаем нужной детализации, ведь анализ не остановится на одной визуализации, потребуется посмотреть данные под другим углом. IMAGE_2 IMAGE_3

Однако на практике встречаются случаи, что статус (этап) приходится вычислять из других полей этой же записи. Рассмотрим данные вымышленного интернет-магазина, который сделал рассылку своим потенциальным клиентам в предверии черной пятницы. IMAGE_4

Гранулярность (детализация) ведется в разрезе потенциальных клиентов. Иначе говоря 1 запись - 1 клиент.

Существует 5 этапов:

  1. Приглашен - сам факт наличия записи
  2. Зарегистрирован в своей учетной записи - поле registration_status
  3. Посетил акционную страницу - поле activity_time содержит время посещения страницы
  4. Собрал заказ - поле cart_products_number должно содержать количество отложенных в корзину товаров
  5. Купил - поле billing_ts содержит дату время оплаты покупки

Таким образоом на примере клиента с id 704835 (поле sk) видно, что он прошел все этапы от момента приглашения до совершения покупки. Значит у нас имеется 1 клиент и 5 статусов к нему. Это связь один ко многим. В Tableau (версия 2019.2) нет реализации связей, поэтому все оношения реализуются простым дублированием записей.Дополнительно надо помнить, что измерение не возьмутся из ниоткуда, их тоже надо создать. Так как внешнего справочника статусов (этапов) не существует и заводить мы его не собираемся, то подготовить данные можно с помощью SQL. Понимаю, что существуют и другие способы, но мной выбран наиболее текущий.

Пример запроса

SELECT 
    'Приглашен' as stage_name, *
FROM SB_SCHOOL.LRN_SUPERSTORE_PROMO
UNION ALL
SELECT'Зарегистрирован' as stage_name, *
FROM SB_SCHOOL.LRN_SUPERSTORE_PROMO
WHERE registration_status = 'registered'
UNION ALL
SELECT
'Посетил' as stage_name, *
FROM SB_SCHOOL.LRN_SUPERSTORE_PROMO
WHERE registration_status = 'registered' 
  AND activity_time <> 'not visited'
UNION ALL
SELECT
'Собрал заказ' as stage_name, *
FROM SB_SCHOOL.LRN_SUPERSTORE_PROMO
WHERE registration_status = 'registered' 
    AND activity_time <> 'not visited' 
  AND cart_products_number > 0
UNION ALL
SELECT'Купил' as stage_name, *
FROM SB_SCHOOL.LRN_SUPERSTORE_PROMO
WHERE registration_status = 'registered' 
  AND activity_time <> 'not visited' 
  AND cart_products_number > 0
  AND billing_ts is not NULL

Как это выглядит на примере рассмастриваемого клиента: IMAGE_5

Построение визуализацииПосле того как данные подготовлены, можно перейти к построению визуализации и работе в Tableau

  1. Подключите скрипт используя Custom SQL Query
  2. Создайте для каждого этапа вычисляемое поле IMAGE_6
  3. Используя Measure Values добавьте рассчитанные значения на визуализацию IMAGE_7
  4. Переключите опцию Analysis - Stack Marks - Off IMAGE_8
  5. Выберите тип диаграммы Area IMAGE_9
  6. Переключите рассчет табличных выражений каждой добавленной меры на stage_name и отсортеруйте этапы в ручном порядке IMAGE_10 IMAGE_11
  7. Дублируйте "Measure Names" и инвертируйте ось опцией Reversed в настройках IMAGE_12
  8. Добавтьте в Colors stage_name и отформатируйте визуализацию убрав не нужные элементы IMAGE_13

Готово! Результат: Funnel Chart.twbx

Резюме

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