Como trabalhar com dados
- Scripts para analisar sequências de origens de tráfego
- Como exportar sessões de modo correto
- Como exportar ocorrências
- Como associar uma sessão a suas ocorrências
- Relatório de tráfego
- Relatório "Tags UTM"
- Relatório "Popular"
- Relatório "Conversão de objetivos"
- Relatório "Origens, sumário"
- Relatório "Sistemas de anúncios"
- Relatório “Funis de eventos de E-commerce” (indisponível na interface do Yandex Metrica)
- Relatório “Funis de eventos de E-commerce em diferentes recortes transversais” (indisponível na interface do Yandex Metrica)
- Relatório "Retenção de novos usuários" (indisponível na interface do Yandex Metrica)
- Relatório “Retenção de novos usuários em diferentes recortes transversais” (indisponível na interface do Yandex Metrica)
Observação
Esta funcionalidade só é disponibilizada com o pacote Yandex Metrica Pro.
Você pode coletar dados não agregados do Yandex Metrica no seu cluster ClickHouse implantado na Yandex Cloud.
Esse método de integração apresenta as seguintes distinções em relação ao da API de Logs:
- A integração abrange um conjunto ampliado de campos.
- Ao contrário do que ocorre na API de Logs, nas sessões os dados de atribuição são armazenados em arranjos. Todos os arranjos
TrafficSource.XXX
são correlacionados com base no tipo de atribuição. O campoXXX
na atribuiçãoYYY
desejada:TrafficSource.XXX[indexOf(TrafficSource.Model, YYY)] as XXX
(veja exemplos de Como exportar sessões do modo correto). - Nas sessões, o
FirstPartyCookie
equivale àclientid
na API de Logs.
Atenção
A integração não é compatível com versões anteriores da API de Logs em matéria de formato de dados.
Scripts para analisar sequências de origens de tráfego
Os scripts geram cadeias de transição para cada usuário. Consequentemente, você recebe:
- Um relatório sobre conversões associadas, a partir de todas as origens.
- Relatórios com diferentes modelos de atribuição, incluindo os não disponíveis na interface do Yandex Metrica (por exemplo, modelo de atribuição linear).
Com base nesses dados, você pode contar de forma independente as sequências de origem de tráfego mais populares que resultam em uma conversão.
Os scripts são publicados no GitHub.
Como exportar sessões de modo correto
Observação
Os dados de sessão são atualizados conforme novas informações vão sendo disponibilizadas. Em média, 99% das sessões são concluídas dentro de 3 dias após o início.
Exemplo com campos múltiplos
SELECT
VisitID,
CounterID,
StartDate,
CounterUserIDHash, -- A ID de usuário interna UserID usada no Yandex Metrica
FirstPartyCookie, -- equivalente à ClientID na API de Logs
Duration,
EAction.Type,
EndURL,
Goals.ID,
IsBounce,
IsMobile,
OS,
OSFamily,
OSName,
PageViews,
Referer,
RegionID,
StartURL,
TrafficSource.ID, -- Os valores nos campos TrafficSource.ID representam:
{-1: Tráfego interno. 0: Tráfego direto.
1: Tráfego de links de site. 2: Tráfego de mecanismos de pesquisa.
3: Tráfego de anúncios. 4: Tráfego de página em cache.
5: Não definido. 6: Tráfego de link externo. 7: Tráfego de lista de e-mails.
8: Tráfego de redes sociais. 9: Tráfego de sistemas de recomendações.
10: Tráfego de apps de mensagem. 11: Tráfego de códigos QR.}
TrafficSource.StrID, -- nome da origem de tráfego legível para humanos
TrafficSource.Model, -- todos os arranjos TrafficSource.XXX estão correlacionados.
A ordem dos elementos dentro deles reflete o modelo de atribuição TrafficSource.Model usado para determinar o valor do campo TraficSource.XXX. O valor do campo TraficSource.XXX está situado dentro do arranjo.
TrafficSource.ID[indexOf(TrafficSource.Model, 1)] as last_TraficSourceID, -- Origem de tráfego pela atribuição "Último clique"
TrafficSource.ID[indexOf(TrafficSource.Model, 2)] as last_significant_TraficSourceID, -- Origem de tráfego pela atribuição "Último clique não direto"
TrafficSource.ID[indexOf(TrafficSource.Model, 3)] as first_TraficSourceID, -- Origem de tráfego pela atribuição "Primeiro clique"
TrafficSource.ID[indexOf(TrafficSource.Model, 4)] as last_yandex_direct_TraficSourceID, -- Origem de tráfego pela atribuição "Último clique não direto do Yandex Direct"
TrafficSource.ID[indexOf(TrafficSource.Model, 5)] as cd_last_significant_TraficSourceID, -- Origem de tráfego pela atribuição "Último clique não direto (multidispositivos)"
TrafficSource.ID[indexOf(TrafficSource.Model, 6)] as cd_first_TraficSourceID, -- Origem de tráfego pela atribuição "Primeiro clique (multidispositivos)"
TrafficSource.ID[indexOf(TrafficSource.Model, 7)] as cd_last_yandex_direct_TraficSourceID, -- Origem de tráfego pela atribuição "Último clique não direto do Yandex Direct (multidispositivos)"
-- Para tráfego de anúncios, você consegue ver a plataforma publicitária de onde ele veio.
Por exemplo, em relação à última origem de tráfego relevante:
If(last_significant_TraficSourceID = 3, TrafficSource.AdvEnginePlaceStrID[indexOf(TrafficSource.Model, 2)], 'not_ad') as last_significant_adv_engine_id,
-- Para tráfego de mecanismos de pesquisa, você consegue ver o mecanismo de pesquisa de onde ele veio.
Por exemplo, em relação à última origem de tráfego relevante:
If(last_significant_TraficSourceID = 2, TrafficSource.SearchEngineStrID[indexOf(TrafficSource.Model, 2)], 'not_search') as last_significant_search_engine_id,
-- O mesmo vale para o tráfego de redes sociais, sistemas de recomendações e demais origens.
UserAgent,
WatchIDs -- para vincular WatchID de hits_all. Hits IsParameter = 1 não será incluído nesta coluna. Este arranjo possui um limite de 500 ocorrências (hits), e o que passar disso será excluído
FROM yandex_data_transfer_test.visits_dttql4la13mb206q472r -- insira seu banco de dados e tabela de sessões aqui
ONDE StartDate = today() - 1 --insira qualquer data. Por exemplo, StartDate = toDate('2022-02-01') ou StartDate = '2022-02-01'
AND CounterID = toUInt32(24226447)
GROUP BY
VisitID,
CounterID,
StartDate,
CounterUserIDHash,
FirstPartyCookie,
Duration,
EAction.Type,
EndURL,
Goals.ID,
IsBounce,
IsMobile,
OS,
OSFamily,
OSName,
PageViews,
Referer,
RegionID,
StartURL,
TrafficSource.Model,
TrafficSource.ID,
TrafficSource.StrID,
last_TraficSourceID,
last_significant_TraficSourceID,
first_TraficSourceID,
last_yandex_direct_TraficSourceID,
cd_last_significant_TraficSourceID,
cd_first_TraficSourceID,
cd_last_yandex_direct_TraficSourceID,
last_significant_adv_engine_id,
last_significant_search_engine_id,
UserAgent,
WatchIDs
HAVING sum(Sign) = 1
limit 1000
- As sessões podem ser atualizadas retrospectivamente, por exemplo no caso da correspondência de conversões offline.
- Na hora de habilitar a integração das primeiras sessões,
sum(Sign)
pode apresentar inconsistência.
O que acontece se você não usar sum(Sign)
-
Os logs do conector armazenam versões de sessão não colapsadas (ou seja, várias versões da mesma sessão). Se você não as colapsar, os dados serão inconsistentes e a mesma sessão (suas versões mais antigas) será contabilizada mais de uma vez.
Isso acontece porque quando uma sessão é atualizada, a versão antiga (
VisitVersion = 1
,Sign = 1
) não é deletada. Em vez disso, uma linha quase idêntica à versão antiga é adicionada, com a única diferença sendo a flagSign
(VisitVersion = 1
,Sign = -1
). Depois disso, a versão atualizada da sessão é adicionada com umSign
positivo (VisitVersion = 2
,Sign = 1
). Consequentemente, quando vocêagrupa por
campos relevantes,sum(Sign)
propicia uma contagem de sessões exata e válida ao "colapsar" versões desatualizadas (Sign = 1
eSign = -1
darão zero).Exemplo de uma sessão não colapsada nos logs de sessão
select VisitID, VisitVersion, Sign FROM yandex_data_transfer_test.visits_dttql4la13mb206q472r -- adicione seu banco de dados e tabela de sessões aqui where StartDate = today()-3 -- especifique qualquer data aqui AND (CounterID = toUInt32(24226447)) -- insira a ID da sua tag aqui and VisitID em (select VisitID from yandex_data_transfer_test.visits_dttql4la13mb206q472r -- adicione seu banco de dados e tabela de sessões aqui where StartDate = today()-3 -- especifique qualquer data aqui group by VisitID having count(distinct VisitVersion) > 3 -- por exemplo, temos uma sessão que foi modificada mais de três vezes (ou qualquer outro número de vezes) order by VisitID desc limit 1 -- por exemplo, temos uma sessão aqui (ou mais) ) order by VisitID, VisitVersion, Sign
Exemplo com colapso adequado
select VisitID, sum(Sign) as visits FROM yandex_data_transfer_test.visits_dttql4la13mb206q472r -- adicione seu banco de dados e tabela de sessões aqui where StartDate = today()-3 -- especifique qualquer data aqui AND (CounterID = toUInt32(24226447)) -- insira a ID da sua tag aqui and VisitID = 1243431264677003301 group by VisitID
Exemplo de colapso usando cláusula final após o nome da tabela
Do modo como
final
lida com a tabela, as versões já estão colapsadas. Ele remove versões redundantes de sessão por conta própria. Esse método roda mais devagar do que o cálculo usando dimensões esum(Sign)
.select VisitID, VisitVersion, Sign FROM yandex_data_transfer_test.visits_dttql4la13mb206q472r final -- adicione seu banco de dados e tabela de sessões aqui where StartDate = today()-3 -- especifique qualquer data aqui AND (CounterID = toUInt32(24226447)) and VisitID = 1243431264677003301 order by VisitID, VisitVersion, Sign
Como exportar ocorrências
Observação
Ao trabalhar com ocorrências, também é necessário considerar a versão delas. Semelhante ao que acontece com as sessões, uma única ocorrência (WatchID
) pode ter múltiplas HitVersion
, que podem ser colapsadas usando o campo Sign
. É importante exportar ocorrências seguindo os mesmos princípios descritos na seção Como exportar sessões de modo correto. O uso da cláusula final
também é permitido.
Exemplo
select CounterID,
EventDate,
CounterUserIDHash, -- a UserID usada no Yandex Metrica
FirstPartyCookie, -- equivalente à ClientID na API de Logs
UTCEventTime,
WatchID,
Referer,
OriginalURL, -- a URL, ao contrário da OriginalURL, pode ficar truncada
URL,
UTMSource,
IsMobile,
OS,
OSFamily,
OSName,
FirstPartyCookie,
IsArtifical,
IsDownload,
IsLink,
IsNotBounce,
IsPageView,
IsParameter
from yandex_data_transfer_test.hits_dttql4la13mb206q472r -- insira seu banco de dados e tabela de sessões aqui
where EventDate = today()-1 -- insira qualquer data aqui
and CounterID = 24226447 -- insira a ID da sua tag aqui
group by CounterID,
EventDate,
CounterUserIDHash, -- a UserID interna usada no Yandex Metrica
FirstPartyCookie, -- equivalente à ClientID da API de Logs
UTCEventTime,
WatchID,
Referer,
OriginalURL, -- a URL, ao contrário da OriginalURL, pode ficar truncada
URL,
UTMSource,
IsMobile,
OS,
OSFamily,
OSName,
FirstPartyCookie,
IsArtifical,
IsDownload,
IsLink,
IsNotBounce,
IsPageView,
IsParameter
having sum(Sign) = 1
Como associar uma sessão a suas ocorrências
Para associar uma VisitID
a suas ocorrências (WatchID
), apenas a coluna WatchIDs
pode não ser suficiente. Isso ocorre porque o campo WatchID
não abrange ocorrências de parâmetros de sessão. Você pode compilar manualmente uma lista de ocorrências dentro da sessão. Para isso, será preciso da data de início da sessão, da data de término e da ID de usuário.
Exemplo
select VisitID, -- este "select" irá conter sessões com o arranjo coletado de ocorrências (hits)
CounterUserIDHash,
UTCStartTime,
Duration,
UTCEndTime,
groupArray(WatchID) as `watchids.id`,
groupArray(IsPageView) as `watchids.is_page_view`,
groupArray(IsParameter) as `watchids.is_parameter`,
groupArray(UTCEventTime) as `watchids.is_utc_event_time`
from (-- este "select" irá conter sessões, com uma entrada distinta para cada ocorrência (hit)
select VisitID,
a.CounterUserIDHash as CounterUserIDHash,
UTCStartTime,
Duration,
UTCEndTime,
WatchID,
IsPageView,
IsParameter,
UTCEventTime
from
(select -- precisamos das sessões, do usuário e das data inicial e data final da sessão. A sessão pode continuar se atualizando retrospectivamente!
VisitID,
CounterUserIDHash,
UTCStartTime,
Duration,
toDateTime(UTCStartTime) + Duration as UTCEndTime
from yandex_data_transfer_test.visits_dttql4la13mb206q472r final
where StartDate = '2023-04-01'
) as a
left join
(select -- precisamos das ocorrências, do usuário, e da data e horário da ocorrência. É possível que os dados históricos da ocorrência mudem.
WatchID,
CounterUserIDHash,
IsPageView,
IsParameter,
UTCEventTime
from yandex_data_transfer_test.hits_dttql4la13mb206q472r final
where EventDate >= '2023-04-01'
and EventDate <= toDate('2023-04-01')+5
) as b
on a.CounterUserIDHash = b.CounterUserIDHash -- use esta ID de usuário especificamente
where UTCEventTime >= UTCStartTime and -- ocorrências com horário posterior ao início da sessão
UTCEventTime <= UTCEndTime -- ocorrências com horário anterior ao fim da sessão
order by CounterUserIDHash, UTCEventTime
)
group by VisitID,
CounterUserIDHash,
UTCStartTime,
Duration,
UTCEndTime
limit 100
Relatório de tráfego
Gráfico
SELECT StartDate AS `ym:s:date`,
sum(Sign) AS `ym:s:visits` -- recolha várias versões de sessão dentro da mais recente e pertinente e conte o número de sessões
from yandex_data_transfer_test.visits_dttql4la13mb206q472r -- adicione seu banco de dados e tabela de sessões aqui
as `default.visits_all`
WHERE `ym:s:date` >= toDate('2023-01-31') -- esta versão não comporta dados históricos do período anterior à criação do conector
and `ym:s:date` <= toDate('2023-02-06') -- dados relativos a "hoje" (e atualizações lentas relativas a dias recentes, como conversões offline) pode chegar atrasadas em relação à interface
and CounterID = 24226447 -- substitua com a ID da sua tag
GROUP BY `ym:s:date`
WITH TOTALS
HAVING `ym:s:visits` >= 0.0
ORDER BY `ym:s:date` ASC
limit 0,7
Tabela
SELECT
toDate(StartDate) AS `ym:s:datePeriodday`,
sum(Sign) AS `ym:s:visits`,
uniqExact(CounterUserIDHash) AS `ym:s:users`,
sum(PageViews * Sign) AS `ym:s:pageviews`,
uniqExactIf(CounterUserIDHash, (`TrafficSource.StartTime`[indexOf(`TrafficSource.Model`, 3)]) = (`TrafficSource.StartTime`[indexOf(`TrafficSource.Model`, 1)])) / uniqExact(CounterUserIDHash) * 100. AS `ym:s:percentNewVisitors`, -- a atribuição 3 representa a atribuição "Primeira sessão" e a atribuição 1 representa "Última sessão"
100. * (sum(IsBounce * Sign) / `ym:s:visits`) AS `ym:s:bounceRate`,
`ym:s:pageviews` / `ym:s:visits` AS `ym:s:pageDepth`,
sum(Duration * Sign) / `ym:s:visits` AS `ym:s:avgVisitDurationSeconds`
-- este conector não é compatível com as métricas "Percentual de robôs" e "Usuários multidispositivos"
FROM yandex_data_transfer_test.visits_dttql4la13mb206q472r -- insira seu banco de dados e tabela de sessões aqui
AS `default.visits_all`
WHERE (StartDate >= toDate('2023-03-10'))
AND (StartDate <= toDate('2023-03-16'))
AND (CounterID = toUInt32(24226447)) -- mude para a ID da sua tag
GROUP BY `ym:s:datePeriodday`
WITH TOTALS
HAVING (`ym:s:visits` > 0.) OR (`ym:s:users` > 0.) OR (`ym:s:pageviews` > 0.)
ORDER BY `ym:s:datePeriodday` DESC
LIMIT 0, 50
Relatório "Tags UTM"
Exemplo
SELECT
`TrafficSource.UTMSource`[indexOf(`TrafficSource.Model`, 2)] AS `ym:s:lastSignUTMSource`,
sum(Sign) AS `ym:s:visits`,
least(uniqExact(CounterUserIDHash), `ym:s:visits`) AS `ym:s:users`,
100. * (sum(IsBounce * Sign) / `ym:s:visits`) AS `ym:s:bounceRate`,
sum(PageViews * Sign) / `ym:s:visits` AS `ym:s:pageDepth`,
sum(Duration * Sign) / `ym:s:visits` AS `ym:s:avgVisitDurationSeconds`,
sumArray(arrayMap(x → (if(isFinite(x), x, 0) * Sign), arrayMap(x_0 → toInt64(notEmpty(x_0)), `EPurchase.ID`))) AS `ym:s:ecommercePurchases`
FROM yandex_data_transfer_test.visits_dttql4la13mb206q472r -- insira seu banco de dados e tabela de sessões aqui
WHERE (StartDate >= toDate('2023-03-10'))
AND (StartDate <= toDate('2023-03-16'))
AND (CounterID = 24226447) -- insira a ID da sua tag aqui
AND (`ym:s:lastSignUTMSource` != '')
GROUP BY `ym:s:lastSignUTMSource`
HAVING (`ym:s:visits` > 0.) OR (`ym:s:users` > 0.) OR (`ym:s:ecommercePurchases` > 0.)
ORDER BY
`ym:s:visits` DESC,
`ym:s:lastSignUTMSource` ASC
LIMIT 0, 50
Relatório "Popular"
Exemplo
SELECT
URLHash(URL, toInt8(0)) AS `ym:pv:URLPathLevel1Hash`,
anyHeavyIf(domain(URL), domain(URL) != '') AS `ym:pv:URLPathLevel1HashFavicon`,
max(URLHierarchy(ifNull(URL, ''))[1]) AS `ym:pv:URLPathLevel1`,
sum(Sign * W) AS `ym:pv:pageviews`,
least(uniq(CounterUserIDHash), `ym:pv:pageviews`) AS `ym:pv:users`
FROM yandex_data_transfer_test.hits_dttql4la13mb206q472r AS `default.hits_all`
WHERE (EventDate >= toDate('2023-03-10'))
AND (EventDate <= toDate('2023-03-16'))
and CounterID = 24226447 -- insira a ID da sua tag aqui
and IsPageView
GROUP BY `ym:pv:URLPathLevel1Hash`
HAVING `ym:pv:pageviews` > 0.0 AND (`ym:pv:pageviews` > 0.0 OR `ym:pv:users` > 0.0)
WITH TOTALS
ORDER BY
`ym:pv:pageviews` DESC,
`ym:pv:URLPathLevel1` ASC,
`ym:pv:URLPathLevel1Hash` ASC
LIMIT 0, 50
Relatório "Conversão de objetivos"
Exemplo
WITH 1. AS W, 17069575 as my_goal_id -- substitua pela ID do seu objetivo
SELECT
toDate(StartDate) AS `ym:s:datePeriodday`,
100. * (sum(has(`Goals.ID`, my_goal_id) * (Sign * W)) / sum(Sign * W)) AS `ym:s:goal17069575conversionRate`,
sum(arrayCount(x → (my_goal_id = x), `Goals.ID`) * (Sign * W)) AS `ym:s:goal17069575reaches`,
sumIf(Sign * W, arrayExists(x_0 → (x_0 = my_goal_id), `Goals.ID`)) AS `ym:s:goal17069575visits`,
least(toFloat64(uniqIf(CounterUserIDHash, arrayExists(x_0 → (x_0 = my_goal_id), `Goals.ID`))), `ym:s:goal17069575visits`) AS `ym:s:goal17069575users`,
sumIf(PageViews * (Sign * W), arrayExists(x_0 → (x_0 = my_goal_id), `Goals.ID`)) AS `ym:s:goal17069575pageviews`,
(least(uniqIf(CounterUserIDHash, ((`TrafficSource.StartTime`[indexOf(`TrafficSource.Model`, 3)]) = (`TrafficSource.StartTime`[indexOf(`TrafficSource.Model`, 1)])) AND arrayExists(x_0 → (x_0 = my_goal_id), `Goals.ID`)), uniqIf(CounterUserIDHash, arrayExists(x_0 → (x_0 = my_goal_id), `Goals.ID`))) / uniqIf(CounterUserIDHash, arrayExists(x_0 → (x_0 = my_goal_id), `Goals.ID`))) * 100. AS `ym:s:goal17069575percentNewVisitors`,
100. * (sumIf(IsBounce * (Sign * W), arrayExists(x_0 → (x_0 = my_goal_id), `Goals.ID`)) / `ym:s:goal17069575visits`) AS `ym:s:goal17069575bounceRate`,
`ym:s:goal17069575pageviews` / `ym:s:goal17069575visits` AS `ym:s:goal17069575pageDepth`,
sumIf(Duration * (Sign * W), arrayExists(x_0 → (x_0 = my_goal_id), `Goals.ID`)) / `ym:s:goal17069575visits` AS `ym:s:goal17069575avgVisitDurationSeconds`
FROM yandex_data_transfer_test.visits_dttql4la13mb206q472r -- insira seu banco de dados e tabela de sessões aqui
WHERE (StartDate >= toDate('2023-02-18'))
AND (StartDate <= toDate('2023-03-17'))
AND (CounterID = 24226447) -- substitua pela ID da sua tag
GROUP BY `ym:s:datePeriodday`
HAVING (`ym:s:goal17069575reaches` > 0.) AND ((`ym:s:goal17069575reaches` > 0.) OR (`ym:s:goal17069575visits` > 0.) OR (`ym:s:goal17069575users` > 0.) OR (`ym:s:goal17069575pageviews` > 0.))
ORDER BY `ym:s:datePeriodday` DESC
LIMIT 0, 50
Relatório "Origens, sumário"
Tabela
WITH 1. AS W
SELECT
`TrafficSource.ID`[indexOf(`TrafficSource.Model`, 2)] AS `ym:s:lastSignTrafficSource`,
sum(Sign * W) AS `ym:s:visits`,
least(toFloat64(uniq(CounterUserIDHash)), `ym:s:visits`) AS `ym:s:users`,
100. * (sum(IsBounce * (Sign * W)) / `ym:s:visits`) AS `ym:s:bounceRate`,
sum(PageViews * (Sign * W)) / `ym:s:visits` AS `ym:s:pageDepth`,
sum(Duration * (Sign * W)) / `ym:s:visits` AS `ym:s:avgVisitDurationSeconds`
from yandex_data_transfer_test.visits_dttql4la13mb206q472r -- insira seu banco de dados e tabela de sessões aqui
WHERE (StartDate >= toDate('2023-03-10'))
AND (StartDate <= toDate('2023-03-16'))
AND (CounterID = 24226447) -- substitua pela ID da sua tag
GROUP BY `ym:s:lastSignTrafficSource`
WITH TOTALS
HAVING (`ym:s:visits` > 0.) OR (`ym:s:users` > 0.)
ORDER BY
`ym:s:visits` DESC,
`ym:s:lastSignTrafficSource` ASC
LIMIT 0, 50
Tabela, detalhada
WITH 1. AS W
SELECT
`TrafficSource.ID`[indexOf(`TrafficSource.Model`, 2)] AS `ym:s:lastSignTrafficSource`,
`TrafficSource.StrID`[indexOf(`TrafficSource.Model`, 2)] AS `ym:s:lastSignTrafficSourceName`,
if(
((`TrafficSource.Domain`[indexOf(`TrafficSource.Model`, 2)]) != '') AND
(`ym:s:lastSignTrafficSource` IN (-1, toInt8(1))),
`TrafficSource.Domain`[indexOf(`TrafficSource.Model`, 2)],
if(`ym:s:lastSignTrafficSource` = toInt8(2),
`TrafficSource.SearchEngineStrID`[indexOf(`TrafficSource.Model`, 2)],
if(`ym:s:lastSignTrafficSource` = toInt8(3), `TrafficSource.AdvEnginePlaceStrID`[indexOf(`TrafficSource.Model`, 2)],
if(`ym:s:lastSignTrafficSource` = toInt8(8), toString(`TrafficSource.SocialSourceNetworkStrID`[indexOf(`TrafficSource.Model`, 2)]),
if(`ym:s:lastSignTrafficSource` = toInt8(9), toString(if((`TrafficSource.RecommendationSystemID`[indexOf(`TrafficSource.Model`, 2)]) = 0, '1', `TrafficSource.RecommendationSystemStrID`[indexOf(`TrafficSource.Model`, 2)])),
if(`ym:s:lastSignTrafficSource` = toInt8(10), toString(if((`TrafficSource.MessengerID`[indexOf(`TrafficSource.Model`, 2)]) = 0, '1', `TrafficSource.MessengerStrID`[indexOf(`TrafficSource.Model`, 2)])),
if(`ym:s:lastSignTrafficSource` = toInt8(11), toString(`TrafficSource.QRCodeProviderStrID`[indexOf(`TrafficSource.Model`, 2)]),
''
)
)
)
)
)
)
) AS `ym:s:lastSignSourceEngine`,
anyHeavy(if(`ym:s:lastSignTrafficSource` IN (-1, toInt8(1)), concatAssumeInjective('http://', `TrafficSource.Domain`[indexOf(`TrafficSource.Model`, 2)]), '')) AS `ym:s:lastSignSourceEngineURL`,
sum(Sign * W) AS `ym:s:visits`,
least(toFloat64(uniqExact(CounterUserIDHash)), `ym:s:visits`) AS `ym:s:users`,
100. * (sum(IsBounce * (Sign * W)) / `ym:s:visits`) AS `ym:s:bounceRate`,
sum(PageViews * (Sign * W)) / `ym:s:visits` AS `ym:s:pageDepth`,
sum(Duration * (Sign * W)) / `ym:s:visits` AS `ym:s:avgVisitDurationSeconds`
FROM yandex_data_transfer_test.visits_dttql4la13mb206q472r -- insira seu banco de dados e tabela de sessões aqui
WHERE (StartDate >= toDate('2023-03-10'))
and (StartDate >= toDate('2023-03-16'))
AND (CounterID = 24226447) -- substitua pela ID da sua tag
GROUP BY
`ym:s:lastSignTrafficSource`,
`ym:s:lastSignTrafficSourceName`,
`ym:s:lastSignSourceEngine`
WITH TOTALS
HAVING (`ym:s:visits` > 0.) OR (`ym:s:users` > 0.)
ORDER BY
`ym:s:visits` DESC,
`ym:s:lastSignTrafficSource` ASC,
`ym:s:lastSignSourceEngine` ASC
LIMIT 0, 50
Relatório "Sistemas de anúncios"
Tabela
WITH 1. AS W
SELECT
`TrafficSource.AdvEnginePlaceStrID`[indexOf(`TrafficSource.Model`, 2)] as `ym:s:lastSignAdvEngine`, -- Plataforma de anúncios pela atribuição "Último clique não direto"
sum(Sign * W) AS `ym:s:visits`,
least(toFloat64(uniqExact(CounterUserIDHash)), `ym:s:visits`) AS `ym:s:users`,
100. * (sum(IsBounce * (Sign * W)) / `ym:s:visits`) AS `ym:s:bounceRate`,
sum(PageViews * (Sign * W)) / `ym:s:visits` AS `ym:s:pageDepth`,
sum(Duration * (Sign * W)) / `ym:s:visits` AS `ym:s:avgVisitDurationSeconds`
from yandex_data_transfer_test.visits_dttql4la13mb206q472r -- insira seu banco de dados e tabela de sessões aqui
WHERE (StartDate = toDate('2023-03-15'))
AND (CounterID = 24226447) -- substitua pela ID da sua tag
AND (`ym:s:lastSignAdvEngine` != '')
AND ((`TrafficSource.ID`[indexOf(`TrafficSource.Model`, 2)]) = toInt8(3)) -- origem de tráfego "Tráfego de anúncios" pela atribuição "Último clique não direto"
GROUP BY `ym:s:lastSignAdvEngine`
WITH TOTALS
HAVING (`ym:s:visits` > 0.) OR (`ym:s:users` > 0.)
ORDER BY
`ym:s:visits` DESC,
`ym:s:lastSignAdvEngine` ASC
LIMIT 0, 50
Relatório “Funis de eventos de E-commerce” (indisponível na interface do Yandex Metrica)
A integração permite criar relatórios mais sofisticados, que não estão disponíveis no Yandex Metrica. Por exemplo, você pode criar um funil de eventos de E-commerce.
Recomendamos que você atenda às seguintes condições desse relatório:
- Os eventos
detail
,add
epurchase
estejam configurados e informados corretamente. - Você tenha pelo menos 10 usuários por recorte transversal.
- A taxa de conversão da primeira etapa seja superior a 1%.
- Você possua dados suficientes de recortes transversais, contanto que os utilize (veja o relatório sobre funis de eventos de E-commerce em diferentes recortes transversais).
Exemplo de relatório
select counter_id,
step0_users, -- total number of users
step1_users, -- users who viewed products
step2_users, -- usuários que visualizaram produtos e depois os adicionaram ao carrinho de compras
step3_users, -- usuários que visualizaram produtos, depois os adicionaram ao carrinho de compras,
depois fizeram uma compra
round(step0_users/step0_users*100, 4) as perc_step0, -- % número total de usuários
round(step1_users/step0_users*100, 4) as perc_step1, -- % usuários que visualizaram produtos
round(step2_users/step0_users*100, 4) as perc_step2, -- % usuários que visualizaram produtos e depois os adicionaram ao carrinho de compras
round(step3_users/step0_users*100, 4) as perc_step3 -- % usuários que visualizaram produtos, depois os adicionaram ao carrinho de compras, depois fizeram uma compra
from
(select
counter_id,
sum(step_1) as step1_users,
sum(step_2) as step2_users,
sum(step_3) as step3_users
from
(select
CounterID as counter_id,
CounterUserIDHash as user_id,
max(e.Type = 1) as step_1, -- apenas visualizaram produtos
sequenceMatch('(?1)(?2)')(e.EventTime, (e.Type = 1), (e.Type = 4)) as step_2, -- visualizaram produtos e depois os adicionaram ao carrinho de compras
sequenceMatch('(?1)(?2)(?3)')(e.EventTime, (e.Type = 1), (e.Type = 4), (e.Type = 3)) as step_3 -- visualizaram produtos, depois os adicionaram ao carrinho de compras, depois fizeram uma compra
from
(select
CounterUserIDHash,
CounterID,
e.Type, -- tipos de evento E-commerce (1 — detalhe, 2 — a situação do carrinho de compras, 3 — fizeram uma compra, 4 — adicionaram um produto ao carrinho de compras, 5 — removeram um produto do carrinho de compras)
e.EventTime
from yandex_data_transfer_test.visits_dttql4la13mb206q472r final -- insira seu banco de dados e tabela de sessões aqui
array join EAction as e -- arrayJoin cria linhas distintas para eventos E-commerce no arranjo
where (StartDate >= '2023-02-01')
and (StartDate <= '2023-02-28')
and CounterID = 24226447 -- substitua pela ID da sua tag
)
group by counter_id, user_id
)
group by counter_id) as a
inner join (select
CounterID as counter_id,
uniqExact(CounterUserIDHash) as step0_users
from yandex_data_transfer_test.visits_dttql4la13mb206q472r final -- insira seu banco de dados e tabela de sessões aqui
where (StartDate >= '2023-02-01')
and (StartDate <= '2023-02-28')
and CounterID = 24226447 -- substitua pela ID da sua tag
group by counter_id) as b
on a.counter_id = b.counter_id
Exemplo de visualização
Relatório “Funis de eventos de E-commerce em diferentes recortes transversais” (indisponível na interface do Yandex Metrica)
Você também pode criar um funil segundo vários recortes transversais: origem de tráfego, sistema operacional, dispositivo.
Exemplo de criação de funil em um recorte transversal IsMobile
select counter_id,
is_mobile,
step0_users, -- total number of users
step1_users, -- usuários que visualizaram produtos
step2_users, -- usuários que visualizaram produtos, depois os adicionaram ao carrinho de compras
step3_users, -- usuários que visualizaram produtos, depois os adicionaram ao carrinho de compras, depois fizeram uma compra
round(step0_users/step0_users*100, 4) as perc_step0, -- % número total de usuários
round(step1_users/step0_users*100, 4) as perc_step1, -- % usuários que visualizaram produtos
round(step2_users/step0_users*100, 4) as perc_step2, -- % que visualizaram produtos, depois os adicionaram ao carrinho de compras
round(step3_users/step0_users*100, 4) as perc_step3 -- % que visualizaram produtos, depois os adicionaram ao carrinho de compras, depois fizeram uma compra
from
(select
counter_id,
is_mobile,
sum(step_1) as step1_users,
sum(step_2) as step2_users,
sum(step_3) as step3_users
from
(select
CounterID as counter_id,
CounterUserIDHash as user_id,
is_mobile,
max(e.Type = 1) as step_1, -- apenas visualizaram produtos
sequenceMatch('(?1)(?2)')(e.EventTime, (e.Type = 1), (e.Type = 4)) as step_2, -- visualizaram produtos, depois os adicionaram ao carrinho de compras
sequenceMatch('(?1)(?2)(?3)')(e.EventTime, (e.Type = 1), (e.Type = 4), (e.Type = 3)) as step_3 -- visualizaram produtos, depois os adicionaram ao carrinho de compras, depois fizeram uma compra
from
(select
CounterUserIDHash,
CounterID,
IsMobile as is_mobile,
e.Type, -- types of E-commerce events (1 — detalhe, 2 — a situação do carrinho de compras, 3 — fizeram uma compra, 4 — adicionaram um produto ao carrinho de compras, 5 — removeram um produto do carrinho de compras)
e.EventTime
from yandex_data_transfer_test.visits_dttql4la13mb206q472r final -- insira seu banco de dados e tabela de sessões aqui
array join EAction as e --arrayJoin cria linhas distintas para eventos E-commerce no arranjo
where (StartDate >= '2023-02-01')
and (StartDate <= '2023-02-28')
and CounterID = 24226447 -- substitua pela ID da sua tag
)
group by counter_id, user_id, is_mobile
)
group by counter_id, is_mobile) as a
inner join (select
CounterID as counter_id,
IsMobile as is_mobile,
uniqExact(CounterUserIDHash) as step0_users
from yandex_data_transfer_test.visits_dttql4la13mb206q472r final -- insira seu banco de dados e tabela de sessões aqui
where (StartDate >= '2023-02-01')
and (StartDate <= '2023-02-28')
and CounterID = 24226447 -- substitua pela ID da sua tabela
group by counter_id, is_mobile) as b
on a.counter_id = b.counter_id and a.is_mobile = b.is_mobile
Exemplo de visualização
Relatório "Retenção de novos usuários" (indisponível na interface do Yandex Metrica)
Exemplo
with main as
(select
counter_id,
num_week,
uniq(user_id) as users
from
(select
CounterUserIDHash as user_id,
CounterID as counter_id,
toDate(FirstVisit) as first_date, -- primeira sessão do usuário no site
StartDate as event_date,
(toMonday(event_date) - toMonday(first_date))/7 as num_week
from yandex_data_transfer_test.visits_dttql4la13mb206q472r final -- insira seu banco de dados e tabela de sessões aqui
where event_date >= '2022-12-01' -- 15-week period
and event_date <= toDate('2022-12-31') + 92 -- 15-week period
and first_date >= '2022-12-01' -- só são considerados novos usuários que chegaram em dezembro
and first_date <= '2022-12-31' -- só são considerados novos usuários que chegaram em dezembro
and counter_id = 24226447 -- substitua pela ID da sua tag
)
group by
counter_id,
num_week
order by num_week)
select counter_id,
a.users as users,
b.users as users_first_week,
round(a.users/b.users*100, 4) as perc_retention
from main as a
inner join (select * from main where num_week = 0) as b
on a.counter_id = b.counter_id
Exemplo de visualização
Relatório “Retenção de novos usuários em diferentes recortes transversais” (indisponível na interface do Yandex Metrica)
Você também pode adicionar um recorte transversal e comparar a retenção de usuários em diferentes recortes transversais. Recomendamos que o recorte transversal inclua pelo menos 30 usuários e represente pelo menos 5% da base total de usuários.
Eis aqui um exemplo de retenção com diferentes origens de tráfego para a primeira sessão do usuário
with main as
(select
counter_id,
param,
num_week,
uniq(user_id) as users
from
(select
CounterUserIDHash as user_id,
CounterID as counter_id,
toDate(FirstVisit) as first_date, -- primeira sessão do usuário no site
StartDate as event_date,
(toMonday(event_date) - toMonday(first_date))/7 as num_week,
TrafficSource.ID[indexOf(TrafficSource.Model, 3)] as param
from yandex_data_transfer_test.visits_dttql4la13mb206q472r -- insira seu banco de dados e tabela de sessões aqui
where event_date >= '2022-12-01' -- período de 15 semanas
and event_date <= toDate('2022-12-31') + 92 -- período de 15 semanas
and first_date >= '2022-12-01' -- só são considerados novos usuários
que chegaram em dezembro
and first_date <= '2022-12-31' -- só são considerados novos usuários,
que chegaram em dezembro
and counter_id = 24226447 -- substitua pela ID da sua tag
)
group by
counter_id,
param,
num_week,
param
order by param, num_week)
select counter_id,
param,
a.users as users,
b.users as users_first_week,
round(a.users/b.users*100, 4) as perc_retention
from main as a
inner join (select * from main where num_week = 0) as b
on a.counter_id = b.counter_id and a.param = b.param