Publicado originalmente en el blog de Google Cloud Platform

En la edición de mayo de Google I/O, Firebase anunció un nuevo conjunto de productos para ayudar a los desarrolladores a crear apps para dispositivos móviles. Firebase Analytics, una de las partes que integran la nueva plataforma de Firebase, es una herramienta que captura automáticamente datos relacionados con la manera en que las personas usan tu app de iOS y Android, y te permite definir tus propios eventos de apps personalizados. Cuando se capturan los datos, quedan disponibles a través de un panel de control en la consola de Firebase. Una de las integraciones que prefiero de la nube de la plataforma de Firebase se relaciona con la capacidad de exportar datos sin procesar de Firebase Analytics a Google BigQuery para análisis personalizado. Este análisis personalizado es particularmente útil para agregar datos de las versiones de iOS y Android de tu app, y también para acceder a parámetros personalizados transmitidos en tus eventos de Firebase Analytics. Veamos lo que puedes hacer con esta poderosa combinación:

¿Cómo funciona la exportación de BigQuery?


Después de vincular tu proyecto de Firebase a BigQuery, Firebase exporta de manera automática una nueva tabla a un conjunto de datos asociado de BigQuery a diario. Si dispones de versiones de iOS y Android de tu app, Firebase exporta los datos para cada plataforma a un conjunto de datos separado. Cada tabla contiene los datos de actividad y demográficos del usuario, automáticamente capturados por Firebase Analytics, y los eventos personalizados que captures en tu app. De esta manera, después de exportar los datos de una semana de una app multiplataforma, tu proyecto de BigQuery contendría dos conjuntos de datos y cada uno de ellos tendría siete tablas:


Cómo explorar los datos


El esquema para cada tabla de exportación de Firebase Analytics es el mismo, y hemos creado dos conjuntos de datos (uno para iOS y uno para Android) con información de ejemplo sobre usuarios para que ejecutes los ejemplos de consulta siguientes. Los conjuntos de datos corresponden a un ejemplo de app de juego multiplataforma de iOS y Android. Cada conjunto de datos contiene siete tablas : los datos de análisis de una semana.

La siguiente consulta mostrará datos demográficos y de dispositivo de usuario básicos correspondientes a un día de uso en la versión de iOS de tu app:

SELECT
  user_dim.app_info.app_instance_id,
  user_dim.device_info.device_category,
  user_dim.device_info.user_default_language,
  user_dim.device_info.platform_version,
  user_dim.device_info.device_model,
  user_dim.geo_info.country,
  user_dim.geo_info.city,
  user_dim.app_info.app_version, 
  user_dim.app_info.app_store,
  user_dim.app_info.app_platform
FROM
  [firebase-analytics-sample-data:ios_dataset.app_events_20160601]

Debido a que el esquema para cada tabla de BigQuery exportada de Firebase Analytics es el mismo, puedes ejecutar cualquiera de las consultas de esta publicación en tus propios datos de Firebase Analytics reemplazando los nombres del conjunto de datos y de las tablas por los de tu proyecto.

El esquema tiene datos de usuario y datos de eventos. Firebase Analytics captura de manera automática todos los datos de usuario y los eventos personalizados que agregues a tu app completan los datos de eventos. Veamos los registros específicos de datos de usuario y de eventos.

Datos de usuario


Los registros de usuario contienen un ID de app único para cada usuario (user_dim.app_info.app_instance_id en el esquema) y datos sobre su ubicación, su dispositivo y la versión de su app. En la consola de Firebase, existen paneles de control separados para los análisis de Android e iOS de la app. Con BigQuery, se puede ejecutar una consulta para determinar los puntos del mundo desde los cuales los usuarios acceden a una app en ambas plataformas. En la consulta siguiente se emplea la función de unión de BigQuery, que te permite usar una coma como operador de UNION ALL. Debido a que en la tabla se crea una fila para cada paquete de eventos que un usuario activa, se usa EXACT_COUNT_DISTINCT a fin de garantizar que cada usuario solo se cuente una vez:
SELECT
  user_dim.geo_info.country as country,
  EXACT_COUNT_DISTINCT( user_dim.app_info.app_instance_id ) as users
FROM
  [firebase-analytics-sample-data:android_dataset.app_events_20160601],
  [firebase-analytics-sample-data:ios_dataset.app_events_20160601]
GROUP BY
  country
ORDER BY
  users DESC

Entre los datos de usuario, se incluye un registro user_properties, el cual contiene atributos que defines para describir segmentos de tu base de usuarios, como la preferencia de idioma o la ubicación geográfica. Firebase Analytics captura propiedades de usuario de manera predeterminada y puedes crear hasta 25 propias.

La preferencia de idioma de un usuario es una de las propiedades de usuario predeterminadas. Para ver los idiomas que nuestros usuarios hablan en las diferentes plataformas, se puede ejecutar la siguiente consulta:

SELECT
  user_dim.user_properties.value.value.string_value as language_code, 
  EXACT_COUNT_DISTINCT(user_dim.app_info.app_instance_id) as users,
FROM
  [firebase-analytics-sample-data:android_dataset.app_events_20160601],
  [firebase-analytics-sample-data:ios_dataset.app_events_20160601]
WHERE
  user_dim.user_properties.key = "language"
GROUP BY
  language_code
ORDER BY 
  users DESC

Datos de eventos


Firebase Analytics facilita el registro de eventos personalizados, como el seguimiento de compras de artículos o los clics en botones de tu app. Al registrar un evento, transmites su nombre y hasta 25 parámetros a Firebase Analytics, y en este último se realiza un seguimiento automático de las veces que dicho evento tuvo lugar. En la siguiente consulta se muestra la cantidad de veces que se produjo cada evento en la app en Android para un día determinado:

SELECT 
  event_dim.name,
  COUNT(event_dim.name) as event_count 
FROM
  [firebase-analytics-sample-data:android_dataset.app_events_20160601]
GROUP BY 
  event_dim.name
ORDER BY 
  event_count DESC

Si dispones de otro tipo de valor asociado con un evento (como precios de artículos), puedes pasarlo como parámetro de valor opcional y aplicar filtrado con él en BigQuery. En los ejemplos de tablas hay un evento spend_virtual_currency. Se puede escribir la siguiente consulta para ver la cantidad de moneda virtual que gastan los jugadores por vez:

SELECT 
  event_dim.params.value.int_value as virtual_currency_amt,
  COUNT(*) as num_times_spent
FROM
  [firebase-analytics-sample-data:android_dataset.app_events_20160601]
WHERE
  event_dim.name = "spend_virtual_currency"
AND
  event_dim.params.key = "value"
GROUP BY
  1
ORDER BY 
  num_times_spent DESC

Cómo crear consultas complejas


¿Qué sucede si uno desea ejecutar una consulta en ambas plataformas de su app para un período específico? Debido a que los datos de Firebase Analytics se dividen en tablas por cada día, esto se puede hacer mediante la función TABLE_DATE_RANGE de BigQuery. Esta consulta muestra un recuento de las ciudades de los usuarios en un período de una semana:

SELECT
  user_dim.geo_info.city,
  COUNT(user_dim.geo_info.city) as city_count 
FROM
TABLE_DATE_RANGE([firebase-analytics-sample-data:android_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP()),
TABLE_DATE_RANGE([firebase-analytics-sample-data:ios_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP())
GROUP BY
  user_dim.geo_info.city
ORDER BY
  city_count DESC

También se puede escribir una consulta para comparar el uso de teléfonos móviles y tablets en las diferentes plataformas en un período de una semana:

SELECT
  user_dim.app_info.app_platform as appPlatform,
  user_dim.device_info.device_category as deviceType,
  COUNT(user_dim.device_info.device_category) AS device_type_count FROM
TABLE_DATE_RANGE([firebase-analytics-sample-data:android_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP()),
TABLE_DATE_RANGE([firebase-analytics-sample-data:ios_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP())
GROUP BY
  1,2
ORDER BY
  device_type_count DESC

Para aumentar la complejidad, se puede escribir una consulta que genere un informe de eventos de usuario único en las diferentes plataformas durante las últimas dos semanas. Aquí, se usan PARTITION BY y EXACT_COUNT_DISTINCT para eliminar duplicados del informe de eventos por usuario aplicando propiedades de usuario y el campo user_dim.user_id:

SELECT 
  STRFTIME_UTC_USEC(eventTime,"%Y%m%d") as date,
  appPlatform,
  eventName,
  COUNT(*) totalEvents,
  EXACT_COUNT_DISTINCT(IF(userId IS NOT NULL, userId, fullVisitorid)) as users
FROM (
  SELECT
    fullVisitorid,
    openTimestamp,
    FORMAT_UTC_USEC(openTimestamp) firstOpenedTime,
    userIdSet,
    MAX(userIdSet) OVER(PARTITION BY fullVisitorid) userId,
    appPlatform,
    eventTimestamp,
    FORMAT_UTC_USEC(eventTimestamp) as eventTime,
    eventName
    FROM FLATTEN(
      (
        SELECT 
          user_dim.app_info.app_instance_id as fullVisitorid,
          user_dim.first_open_timestamp_micros as openTimestamp,
          user_dim.user_properties.value.value.string_value,
          IF(user_dim.user_properties.key = 'user_id',user_dim.user_properties.value.value.string_value, null) as userIdSet,
          user_dim.app_info.app_platform as appPlatform,
          event_dim.timestamp_micros as eventTimestamp,
          event_dim.name AS eventName,
          event_dim.params.key,
          event_dim.params.value.string_value
        FROM
         TABLE_DATE_RANGE([firebase-analytics-sample-data:android_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP()),
TABLE_DATE_RANGE([firebase-analytics-sample-data:ios_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP())
), user_dim.user_properties)
)
GROUP BY
  date, appPlatform, eventName

Si dispones de datos en Google Analytics para la misma app, también es posible exportar tus datos de Google Analytics a BigQuery y realizar una COMBINACIÓN con tus tablas de BigQuery de Firebase Analytics.


Cómo visualizar datos de análisis


Ahora que obtuvimos estadísticas de la app para dispositivos móviles usando la exportación sin procesar de BigQuery, las visualizaremos usando Google Data Studio. Data Studio puede realizar lecturas directamente en las tablas de BigQuery e incluso se le puede transmitir una consulta como las anteriores. También puede generar muchas clases de gráficos diferentes según la estructura de tus datos; se incluyen las series temporales, los gráficos de barras y circulares, y los geomapas.

Para nuestra primera visualización, crearemos un gráfico de barras que destinaremos a comparar los tipos de dispositivos desde los cuales los usuarios acceden a la app en cada plataforma. Se puede pegar en Data Studio la consulta comparativa anterior sobre teléfonos móviles y tablets para generar el siguiente gráfico:
A partir de este gráfico, se puede observar fácilmente una mayor probabilidad de que los usuarios de iOS accedan al juego desde una tablet. Para aumentar la complejidad, se puede usar la consulta de informe de eventos anterior para crear un gráfico de barras en el que se compare la cantidad de eventos en diferentes plataformas:
Visita esta publicación para hallar instrucciones detalladas sobre la forma de conectar tu proyecto de BigQuery a Data Studio.

Lo que viene

Si no conocías Firebase, comienza aquí. Si ya estás desarrollando una app para dispositivos móviles en Firebase, consulta esta guía detallada en la que se indica la manera de vincular tu proyecto de Firebase a BigQuery. Para realizar preguntas, consulta los documentos de referencia de BigQuery y usa las etiquetas firebase-analytics y google-bigquery en Stack Overflow. Notifícame si deseas que incluya tema en particular en una publicación futura.