Este é um relatório de painel em versão SQL para DAU/MAU.
Este relatório fornece uma análise detalhada da proporção de Usuários Ativos Diários (DAU) para Usuários Ativos Mensais (MAU) em um intervalo de datas específico. A proporção DAU/MAU é um indicador chave de desempenho (KPI) que mede o engajamento do usuário, comparando o número de usuários ativos únicos por dia com o número de usuários ativos únicos em um período de 30 dias.
-- [params]
-- date :start_date = 2023-01-01
-- date :end_date = 2024-01-01
WITH date_series AS (
SELECT generate_series(:start_date::date, :end_date::date, '1 day'::interval) AS date
),
DAU AS (
SELECT date(date) AS day, COUNT(DISTINCT user_id) AS dau_count
FROM user_visits
JOIN date_series ON date(user_visits.visited_at) = date_series.date
GROUP BY date
),
MAU AS (
SELECT date_series.date, COUNT(DISTINCT user_visits.user_id) AS mau_count
FROM user_visits
JOIN date_series ON date(user_visits.visited_at) >= date_series.date - INTERVAL '30 days'
AND date(user_visits.visited_at) <= date_series.date
GROUP BY date_series.date
)
SELECT
DAU.day,
(DAU.dau_count::FLOAT / NULLIF(MAU.mau_count, 0)) * 100 AS "DAU/MAU",
DAU.dau_count,
MAU.mau_count
FROM DAU
JOIN MAU ON DAU.day = MAU.date
ORDER BY DAU.day
Explicação da Consulta SQL
A consulta SQL usa Expressões de Tabela Comuns (CTEs) para criar dois conjuntos de dados: um para DAU e outro para MAU. Em seguida, combina esses conjuntos de dados para calcular a proporção DAU/MAU para cada dia dentro do intervalo de datas especificado.
Parâmetros
A consulta aceita dois parâmetros, :start_date e :end_date, permitindo que o usuário especifique o intervalo de datas para o relatório. Ambos os parâmetros de data aceitam o formato de data AAAA-MM-DD.
CTEs
- date_series: A CTE
date_seriesgera uma série de datas de:start_datea:end_date, com um intervalo de um dia entre cada data. Essa série é usada para garantir que o relatório inclua todos os dias dentro do intervalo especificado, mesmo que não haja atividade do usuário em alguns dias. - DAU: A CTE
DAUcalcula o número de usuários únicos que visitaram o site em cada dia (dau_count). Isso é feito juntando a tabelauser_visitscom a CTEdate_seriesna condição de que a data da visita corresponda à data na série. O resultado é agrupado por data para obter a contagem de usuários únicos para cada dia. - MAU: A CTE
MAUcalcula o número de usuários únicos que visitaram o site nos 30 dias anteriores a cada data nadate_series. Isso é feito juntando a tabelauser_visitscom a CTEdate_series, onde a data da visita está entre 30 dias antes e até, e incluindo, a data na série. O resultado é agrupado por data para obter a contagem de usuários únicos para cada período de 30 dias que antecede cada data.
Seleção Final
A parte final da consulta calcula a proporção DAU/MAU para cada dia, dividindo a contagem de DAU pela contagem de MAU e multiplicando por 100 para obter uma porcentagem. Ela também seleciona as contagens de DAU e MAU como referência. A função NULLIF é usada para evitar divisão por zero, que ocorreria se não houvesse MAU para um determinado dia. O resultado é ordenado por dia para fornecer uma visão cronológica do engajamento do usuário.
Resultados de Exemplo
| day | DAU/MAU | dau_count | mau_count |
|---|---|---|---|
| 2023-11-19 | 15.31914893617021 | 360 | 2350 |
| 2023-11-20 | 23.92223161453931 | 566 | 2366 |
| 2023-11-21 | 23.55648535564853 | 563 | 2390 |
| 2023-11-22 | 23.09929372663066 | 556 | 2407 |
| 2023-11-23 | 19.394944053046 | 468 | 2413 |
| … | … | … | … |