Как рассчитать трафик на карточки товаров "Нет в наличии"?

В результате выполнения запроса получаем количество и долю сессий на карточки товара в зависимости от статуса товара ("в наличии", "в резерве", "нет в наличии").

 
Динамические параметры
  • 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))
Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 1 из 1
Еще есть вопросы? Отправить запрос

0 Комментарии

Войдите в службу, чтобы оставить комментарий.