A função de funil de janela analisa o comportamento do usuário, o tráfego de aplicativos e as conversões de metas de produtos ao rastrear eventos sequenciais em uma janela de tempo deslizante.
A função de funil de janela aceita as duas sintaxes a seguir.
Para usar strings em instruções analíticas, coloque-as entre aspas simples (''). Strings sem aspas ou entre aspas duplas ("") indicam nomes de campos ou colunas. Por exemplo:
'status'
indica a string status, enquanto
status
ou
"status"
indica o campo de log status.
|
Função |
Sintaxe |
Descrição |
Suporte SQL |
Suporte SPL |
|
window_funnel(sliding_window, timestamp, event_id, ARRAY[event_list01, event_list02...]) |
Busca uma cadeia de eventos em uma janela de tempo deslizante e calcula o número máximo de eventos consecutivos nessa cadeia. Use esta sintaxe quando já existir uma coluna de evento (event_id) definida nos dados. |
√ |
× |
|
|
window_funnel(sliding_window, timestamp, ARRAY[event_id=event_list01, event_id=event_list02...]) |
Busca uma cadeia de eventos em uma janela de tempo deslizante e calcula o número máximo de eventos consecutivos nessa cadeia. Use esta sintaxe para definir valores de evento personalizados e não enumerados, o que oferece maior flexibilidade. |
√ |
× |
Como funciona
A função de funil de janela busca uma cadeia de eventos em uma janela de tempo deslizante, identifica a sequência correspondente mais longa a partir do início da cadeia e retorna o comprimento dessa sequência.
A função utiliza o seguinte algoritmo:
Inicia pelo primeiro evento da cadeia definida, define o contador de eventos como 1 e abre a janela deslizante.
Dentro da janela deslizante, se os eventos subsequentes ocorrerem na ordem correta, o contador é incrementado.
Se a sequência for interrompida, a busca atual termina, o contador de eventos para de incrementar e uma nova busca começa.
Após a conclusão de todas as buscas, se houver múltiplas correspondências, a função retorna o maior valor do contador, que representa o comprimento da cadeia de eventos correspondente mais longa.
Por exemplo, considere uma janela de tempo deslizante de 100 segundos e uma cadeia de eventos: Evento 1 -> Evento 2 -> Evento 3 -> Evento 4 -> Evento 5. Se a sequência real for Evento 1 -> Evento 2 -> Evento 4 -> Evento 5 -> Evento 1 -> Evento 3, a função retorna 2, pois a sequência correspondente mais longa iniciada no Evento 1 é Evento 1 -> Evento 2.
A busca deve começar com o primeiro evento da cadeia definida. Por exemplo, se a sequência real de eventos for Evento 2 -> Evento 3 -> Evento 4, a função retorna 0.
A busca exige uma ordem estrita e não pode pular eventos. Por exemplo, na sequência Evento 1 -> Evento 2 -> Evento 4, a correspondência para após o Evento 2 porque o Evento 3 foi ignorado. Portanto, o Evento 4 não é contabilizado.

Sintaxe
A função de funil de janela aceita as duas sintaxes a seguir.
-
Se já houver uma coluna de evento (event_id) definida nos dados, use a seguinte sintaxe:
window_funnel(sliding_window, timestamp, event_id, ARRAY[event_list01, event_list02...]) -
Para definir valores de evento personalizados e não enumerados, use a seguinte sintaxe:
window_funnel(sliding_window, timestamp, ARRAY[event_id=event_list01, event_id=event_list02...])
Parâmetros
|
Parâmetro |
Descrição |
|
sliding_window |
A janela de tempo deslizante, em segundos. O valor deve ser do tipo bigint. |
|
timestamp |
O timestamp, em segundos. O valor deve ser do tipo bigint. Recomendamos o uso do campo de log integrado __time__. |
|
event_id |
O campo de log que representa um evento, como A, B ou C. O valor deve ser do tipo varchar. |
|
event_list |
A cadeia de eventos personalizada para correspondência, que pode conter até 32 eventos. O valor deve ser do tipo array. Exemplos:
|
Exemplos
Uma loja de e-commerce executa uma promoção e usa a função de funil de janela para analisar o desempenho de conversão. O caminho de conversão consiste em três etapas: visualizar produto, adicionar ao carrinho e comprar produto. O Simple Log Service coleta logs desses eventos.
O exemplo a seguir mostra os campos em uma entrada de log: behavior_type:pv, category_id:149192, item_id:2073959, timestamp:1511860012 e user_id:137617.
|
Campo de log |
Descrição |
|
behavior_type |
O tipo de comportamento do usuário. Valores válidos:
|
|
category_id |
O ID da categoria do produto. |
|
item_id |
O ID do produto. |
|
timestamp |
O momento em que o comportamento do usuário ocorreu. |
|
user_id |
O ID do usuário. |
Exemplo 1
Analise o comportamento de compra dos usuários em uma janela de 24 horas.
-
Instrução de consulta
* | SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels GROUP BY user_id ORDER BY user_id LIMIT 1000 -
Resultados
O valor de
levelspara o usuário 24 é 3, o que indica que ele completou todo o caminho: visualizou um produto, adicionou-o ao carrinho e comprou-o.O valor de
levelspara o usuário 14 é 2, o que indica que ele visualizou um produto e o adicionou ao carrinho, mas não concluiu a compra.
A consulta retorna 1.000 registros em uma tabela com duas colunas: user_id e levels.
Exemplo 2
Analise quantos usuários concluíram cada etapa do funil.
-
Instrução de consulta
* | SELECT levels, count, sum(count) over( ORDER BY levels DESC ) AS total FROM ( SELECT levels, count(1) AS count FROM ( SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels FROM log GROUP BY user_id ) GROUP BY levels ORDER BY levels ) -
Resultados
513.194 usuários visualizaram um produto e 138.491 deles saíram após essa etapa.
374.703 usuários adicionaram um produto ao carrinho e 198.642 deles saíram após essa etapa.
176.061 usuários compraram um produto.
Exemplo 3
Calcule as taxas de conversão da promoção.
Taxa de conversão absoluta: a porcentagem do total de usuários que concluíram uma etapa específica.
Taxa de conversão relativa: a porcentagem de usuários que concluíram uma etapa específica em relação aos que concluíram a etapa anterior.
-
Instrução de consulta
* | SELECT *, 100.0 * total /(sum(count) over()) AS "absolute conversion rate", if( lag(total, 1, 0) over() = 0, 100, (100.0 * total / lag(total, 1, 0) over()) ) AS "relative conversion rate" FROM ( SELECT levels, count, sum(count) over( ORDER BY levels DESC ) AS total FROM ( SELECT levels, count(1) AS count FROM ( SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels FROM log GROUP BY user_id ) GROUP BY levels ) ORDER BY levels ) -
Resultados
A consulta retorna uma tabela com cinco colunas: levels, count, total, absolute conversion rate e relative conversion rate. Por exemplo, no nível 2, a taxa de conversão absoluta é de aproximadamente 72,72%. No nível 3, a etapa final, a taxa de conversão absoluta é de aproximadamente 34,17% e a taxa de conversão relativa é de aproximadamente 46,99%.
Gráfico de funil
