Tráfico orgánico por dispositivo y sistema operativo
Desglosa las sesiones orgánicas por tipo de dispositivo y sistema operativo. Facilita la detección de problemas de rendimiento o UX en dispositivos específicos.
-- Tráfico orgánico por dispositivo y sistema operativo
SELECT
device.category AS dispositivo,
device.operating_system AS sistema_operativo,
COUNT(
DISTINCT CONCAT(
user_pseudo_id, '.',
CAST(
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')
AS STRING)
)
) AS sesiones,
COUNT(DISTINCT user_pseudo_id) AS usuarios,
ROUND(
COUNT(
DISTINCT CONCAT(
user_pseudo_id, '.',
CAST(
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')
AS STRING)
)
) * 100.0 / SUM(COUNT(
DISTINCT CONCAT(
user_pseudo_id, '.',
CAST(
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')
AS STRING)
)
)) OVER(), 2
) AS porcentaje
FROM
`your-project.analytics_XXXXXXXXX.events_*`
WHERE
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
AND traffic_source.medium = 'organic'
AND event_name = 'session_start'
GROUP BY
dispositivo, sistema_operativo
ORDER BY
sesiones DESC
LIMIT 20
Explicación paso a paso
- 3 device.category devuelve 'desktop', 'mobile' o 'tablet'.
- 4 device.operating_system indica el SO: Android, iOS, Windows, macOS, Linux, etc.
- 14 Calcula el porcentaje de sesiones respecto al total usando una window function SUM() OVER().
- 37 Filtra por session_start para contar sesiones, no eventos individuales.
- 41 Limita a 20 combinaciones para enfocarse en las más relevantes.
Ejemplo de resultado esperado
| dispositivo | sistema_operativo | sesiones | usuarios | porcentaje |
|---|---|---|---|---|
| mobile | Android | 4523 | 3876 | 38.21 |
| mobile | iOS | 3210 | 2890 | 27.12 |
| desktop | Windows | 2456 | 2100 | 20.75 |
| desktop | Macintosh | 1234 | 1089 | 10.43 |
Variaciones y adaptaciones
Para incluir el navegador, añadir device.web_info.browser AS navegador al SELECT y GROUP BY. Para ver solo mobile vs desktop (sin SO), eliminar device.operating_system. Para añadir engagement rate por dispositivo, cruzar con session_engaged como en la query 4.