В результате выполнения запроса получаем количество и долю сессий на карточки товара в зависимости от статуса товара ("в наличии", "в резерве", "нет в наличии").
Динамические параметры
- startDate - дата начала анализируемого периода
- endDate - дата окончания анализируемого периода
- dataSetName - название dataset с данными Streaming
- sTableName - название таблицы с данными сессионного Streaming
- hTableName - название таблицы с данными хитового Streaming
- dateType - тип даты (может принимать значение (date - дата, numberOfWeek - номер недели, numberOfMonth - номер месяца.)
- dimensionIndex - индекс пользовательского параметра уровня хита в котором хранится информация о статусе товара
Пример визуализации результатов расчетов
SQL-запрос
SELECT
{dateType default="date" type="select" values="date,numberOfWeek,numberOfMonth"},
productAvailability,
numberOfSessions,
shareOfTotalSessions FROM
--t4 - считаем долю сессий на карточки товара в зависимости от статуса товара
(
SELECT
t3.date AS date,
t3.numberOfWeek AS numberOfWeek,
t3.numberOfMonth AS numberOfMonth,
t3.productAvailability AS productAvailability,
t3.totalSessions AS numberOfSessions,
t3.totalSessions/t4.totalSessions AS shareOfTotalSessions FROM
--t3 - определяем у статус товара у страниц входа, которые соответствуют карточке товара
(
SELECT
date,
numberOfWeek,
numberOfMonth,
productAvailability,
COUNT(t2.hitId) AS totalSessions FROM
--t1 - выбираем все входы на карточки товара из данных сессионного Streaming
(
SELECT
date,
hits.hitId,
INTEGER(CEIL((DAYOFYEAR(TIMESTAMP(INTEGER(hits.time*1000000)))-4)/7-0.01+1)) AS numberOfWeek,
MONTH(hits.time+1000) AS numberOfMonth
FROM
FLATTEN ((
SELECT
date,
hits.eCommerceActionType,
hits.time,
hits.hitId,
hits.isEntrance
FROM
TABLE_DATE_RANGE({dataSetName default="OWOXBIStreaming" type="input"}.{sTableName default="session_streaming_" type="input"}, TIMESTAMP('{startDate default="2016-02-08" type="datetime"}'), TIMESTAMP('{endDate default="2016-02-08" type="datetime"}'))), hits)
WHERE
hits.eCommerceActionType = 'detail'
AND hits.isEntrance = 1
GROUP EACH BY
hits.hitId,
date,
numberOfWeek,
numberOfMonth ) AS t1
JOIN EACH
--t2 - выбираем все хиты, соответствующие просмотру карточки товара и статус товара
(
SELECT
hitId,
customDimensions.value AS productAvailability
FROM
FLATTEN ((
SELECT
sessionId,
date,
eCommerceAction.action_type,
hitId,
customDimensions.index,
customDimensions.value
FROM
TABLE_DATE_RANGE({dataSetName}.{hTableName default="streaming_" type="input"}, TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}'))), customDimensions)
WHERE
eCommerceAction.action_type = 'detail'
AND customDimensions.index = {dimensionIndex default="20" type="input"}
AND customDimensions.value IS NOT NULL
AND customDimensions.value != '(not set)'
GROUP EACH BY
hitId,
productAvailability) AS t2
ON
(t1.hits.hitId=t2.hitId)
GROUP EACH BY
date,
numberOfWeek,
numberOfMonth,
productAvailability) AS t3
LEFT JOIN EACH (
SELECT
date,
numberOfWeek,
numberOfMonth,
COUNT(t2.hitId) AS totalSessions
FROM (
SELECT
date,
hits.hitId,
INTEGER(CEIL((DAYOFYEAR(TIMESTAMP(INTEGER(hits.time*1000000)))-4)/7-0.01+1)) AS numberOfWeek,
MONTH(hits.time+1000) AS numberOfMonth
FROM
FLATTEN ((
SELECT
date,
hits.eCommerceActionType,
hits.time,
hits.hitId,
hits.isEntrance
FROM
TABLE_DATE_RANGE({dataSetName}.{sTableName}, TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}'))), hits)
WHERE
hits.eCommerceActionType = 'detail'
AND hits.isEntrance = 1
GROUP EACH BY
hits.hitId,
date,
numberOfWeek,
numberOfMonth ) AS t1
JOIN EACH (
SELECT
hitId,
customDimensions.value AS productAvailability
FROM
FLATTEN ((
SELECT
sessionId,
date,
eCommerceAction.action_type,
hitId,
customDimensions.index,
customDimensions.value
FROM
TABLE_DATE_RANGE({dataSetName}.{hTableName}, TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}'))), customDimensions)
WHERE
eCommerceAction.action_type = 'detail'
AND customDimensions.index = {dimensionIndex}
AND customDimensions.value IS NOT NULL
AND customDimensions.value != '(not set)'
GROUP EACH BY
hitId,
productAvailability) AS t2
ON
(t1.hits.hitId=t2.hitId)
GROUP EACH BY
date,
numberOfWeek,
numberOfMonth) AS t4
ON
(t3.date=t4.date))
0 Комментарии