это может быть основной вопрос, но я просто не мог понять. Пример данных и запрос можно найти здесь. (на вкладке "Первое касание")
Я пропущу здесь маркетинговую терминологию, но в основном то, что делает запрос, — это присвоение кредитов/баллов местам размещения (рекламе) на основе определенного правила. Здесь действует правило «первого касания», что означает, что заслуга принадлежит первому пользователю, с которым взаимодействует реклама — это может быть просмотр или клик. «ПРОЖЕКТОР» здесь означает, что пользователь совершает действие, чтобы фактически купить продукт (конверсия).
Как видно из примера данных, у пользователя 1 есть одна конверсия, а первое объявление — это место размещения 22 (первое касание), поэтому 22 получает 1 балл. У пользователя 2 есть две конверсии, и первое объявление каждого из них — 11, поэтому 11 получает 2 балла.
Логика здесь довольно проста, но мне было трудно понять сам запрос. Какой смысл сравнивать prev_conversion_event.event_time < conversion_event.event_time
? Разве они не одинаковы по сути? Я имею в виду, что они оба пришли из UNNEST(t.*_path.events)
. И attributed_event.event_time
тоже оттуда.
Что в любом случае оценивают prev_conversion_event.event_time
, conversion_event.event_time
и attributed_event.event_time
в этом сценарии? Я просто запутался, как черт здесь. Очень ценю помощь!
Для удобства я вставляю примеры данных, запрос и вывод ниже: Примеры данных Вывод
/* Substitute *_paths for the specific paths table that you want to query. */
SELECT
(
SELECT
attributed_event_metadata.placement_id
FROM (
SELECT
AS STRUCT attributed_event.placement_id,
ROW_NUMBER() OVER(ORDER BY attributed_event.event_time ASC) AS rank
FROM
UNNEST(t.*_paths.events) AS attributed_event
WHERE
attributed_event.event_type != "FLOODLIGHT"
AND attributed_event.event_time < conversion_event.event_time
AND attributed_event.event_time > (
SELECT
IFNULL( (
SELECT
MAX(prev_conversion_event.event_time) AS event_time
FROM
UNNEST(t.*_paths.events) AS prev_conversion_event
WHERE
prev_conversion_event.event_type = "FLOODLIGHT"
AND prev_conversion_event.event_time < conversion_event.event_time),
0)) ) AS attributed_event_metadata
WHERE
attributed_event_metadata.rank = 1) AS placement_id,
COUNT(*) AS credit
FROM
adh.*_paths AS t,
UNNEST(*_paths.events) AS conversion_event
WHERE
conversion_event.event_type = "FLOODLIGHT"
GROUP BY
placement_id
HAVING
placement_id IS NOT NULL
ORDER BY
credit DESC