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.
Queries relacionadas
Eventos clave (conversiones) atribuidos a orgánico
GA4 en BigQuery
Intermedio
Funnel de conversión desde landing orgánica hasta evento clave
GA4 en BigQuery
Avanzado
Usuarios nuevos vs recurrentes desde orgánico
GA4 en BigQuery
Intermedio
Window functions para ranking de URLs por categoría
SQL genérico
Avanzado