В результате выполнения запроса получаем доход, количество заказов и среднюю долю JS-ошибок на 1 хит по группам пользователей. Расчеты производятся следующим образом: для каждого пользователя за анализируемый период был рассчитан показатель "Доля JS-ошибок на один хит", как сумма JS ошибок / суммарное количество хитов.
Далее все пользователи были поделены на 10 групп в зависимости от показателя "Доля JS - ошибок на один хит". В группу 1 - вошли пользователи с наименьшим значением показателя "Доля JS - ошибок на один хит" (т.е. у этих пользователей частота появления JS - ошибок минимальна). В 10 - ю группу соответственно вошли пользователи, которые чаще всего встречаются с JS - ошибками (не зависимо от их активности на сайте). Стоит отметить, что кол-во пользователей во всех группах одинаковое.
Далее для каждой из групп рассчитывается доход и количество заказов. Как правило, чем чаще пользователь встречается с JS - ошибками на сайте, тем ниже доход он приносит.
Важно! В расчетах принимали участие только те пользователи, которые хотя бы раз за анализируемый период сталкивались с JS-ошибкой.
Динамические параметры
- startDate - дата начала анализируемого периода
- endDate - дата окончания анализируемого периода
- dataSetName - название dataset с данными сессионного Streaming
- tableName - название таблицы с данными сессионного Streaming
- numberOfGroups - количество групп на которые будут делиться пользователи
- eventCategoryName - категория событий с JS-ошибками
Пример визуализации результатов расчетов
SQL-запрос
SELECT
JSErrorGroup,
SUM(TotalTransactions) AS TotalTransactions,
SUM(TotalRevenue) AS TotalRevenue,
AVG(ErrorsPerHit) AS avgErrorsPerHit
FROM (
-- считаем количество JS-ошибок на 1 хит для каждого пользователя и делим всех пользователей по этому признаку на n групп
SELECT
t3.clientId AS ClientId,
JSErrorsQTY,
TotalTransactions,
TotalRevenue,
TotalHits,
JSErrorsQTY/TotalHits AS ErrorsPerHit,
NTILE({numberOfGroups default="10" type="select" values="5,10,15,20"}) OVER (ORDER BY ErrorsPerHit ASC) AS JSErrorGroup
FROM (
--t3 - объединяем t1 и t2
SELECT
t1.clientId AS ClientId,
JSErrorsQTY,
TotalTransactions,
TotalRevenue
FROM (
--t1 - считаем кол-во JS-ошибок на каждого пользователя
SELECT
clientId,
COUNT(type) AS JSErrorsQTY
FROM (TABLE_DATE_RANGE({dataSetName default="OWOXBI_Streaming" type="input"}.{tableName default="streaming_" type="input"}, TIMESTAMP('{startDate default="2015-11-14" type="datetime"}'), TIMESTAMP('{endDate default="2016-01-27" type="datetime"}')))
WHERE
eventInfo.eventCategory = '{eventCategoryName default="JS Errors" type="input"}'
GROUP BY
clientId) AS t1
LEFT JOIN EACH (
--t2 - считаем кол-во заказов и доход каждого пользователя
SELECT
clientId,
COUNT(transaction.transactionId) AS TotalTransactions,
SUM(transaction.transactionRevenue) AS TotalRevenue
FROM (
SELECT
clientId,
transaction.transactionId,
transaction.transactionRevenue
FROM (TABLE_DATE_RANGE({dataSetName default="OWOXBI_Streaming" type="input"}.{tableName default="streaming_" type="input"}, TIMESTAMP('{startDate default="2015-11-14" type="datetime"}'), TIMESTAMP('{endDate default="2016-01-27" type="datetime"}')))
WHERE
eCommerceAction.action_type = 'purchase'
GROUP BY
clientId,
transaction.transactionId,
transaction.transactionRevenue)
GROUP BY
clientId) AS t2
ON
(t1.clientId = t2.clientId)) AS t3
JOIN EACH (
--t4 - считаем кол-во хитов на каждого пользователя
SELECT
clientId,
COUNT(type) AS TotalHits
FROM (TABLE_DATE_RANGE({dataSetName default="OWOXBI_Streaming" type="input"}.{tableName default="streaming_" type="input"}, TIMESTAMP('{startDate default="2015-11-14" type="datetime"}'), TIMESTAMP('{endDate default="2016-01-27" type="datetime"}')))
GROUP BY
clientId) AS t4
ON
(t3.clientId = t4.clientId))
GROUP BY
JSErrorGroup
ORDER BY
JSErrorGroup
0 Комментарии