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.

trafico-organico-dispositivo.sql
-- 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

dispositivosistema_operativosesionesusuariosporcentaje
mobileAndroid4523387638.21
mobileiOS3210289027.12
desktopWindows2456210020.75
desktopMacintosh1234108910.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.