Crea una plataforma unificada de estadísticas de aplicaciones con Firebase, BigQuery y Looker

En este documento, se muestra cómo centralizar las fuentes de datos en un almacén de datos y profundizar en el comportamiento de los clientes para tomar decisiones empresariales fundamentadas. Este tipo de solución te ayuda a realizar un seguimiento de la información en varios canales, lo que permite que tu organización determine, por ejemplo, cómo las mejoras de productos afectan el comportamiento de uso del cliente, o cómo se deben priorizar las correcciones de funciones y de aplicaciones. Este documento es especialmente útil para organizaciones nativas digitales, incluidas las industrias de software como servicio (SaaS), videojuegos y comercio electrónico.

Este documento está dirigido a analistas de datos y desarrolladores, y se asume que tienes experiencia en el lenguaje de consulta estructurado (SQL) y que tienes conocimientos básicos sobre lo siguiente:

  • BigQuery
  • Looker
  • Firebase
  • Las herramientas de administración de relaciones con clientes (CRM), seguimiento de problemas y asistencia al cliente de tu organización

En este documento, se incluyen secciones en las que se describe cómo abordar las necesidades comerciales reales de un público más amplio:

Procedimiento Público Objetivos comerciales
Informes Ejecutivos y administradores de cuentas Visualiza el progreso hacia los objetivos y haz un seguimiento del promedio de usuarios activos por día.
Prioriza errores Administradores de programas técnicos, administradores de productos y desarrolladores Identifica las fallas que experimentan los clientes valiosos y los problemas que se generan en la asistencia por chat.
Administra cuentas Representantes de ventas y administradores de cuentas Identifica a los clientes afectados por fallas y tendencias de uso para tus cuentas.

Arquitectura

Arquitectura

En esta arquitectura, BigQuery es la única fuente de información para las estadísticas, ya que recibe datos de varias fuentes con regularidad. En Looker, los analistas de datos combinan los bloques de Looker con modelos de LookML de origen personalizados para analizar datos de diferentes usuarios.

Looker es la plataforma de inteligencia empresarial de Google Cloud, que te permite compilar paneles de transmisiones en vivo que brindan a los usuarios la capacidad de desglosar los detalles de los datos y realizar acciones directas en sus resultados.

Esta arquitectura usa las siguientes fuentes de datos:

  • Google Analytics 4: realiza un seguimiento de las interacciones de los clientes en tu aplicación.
  • Firebase Crashlytics: recopila y organiza información de fallas de las aplicaciones de Firebase.
  • Firestore: proporciona una base de datos de backend para tu aplicación de Firebase.
  • Hojas de cálculo de Google: recopila datos de origen de forma manual en hojas de cálculo.
  • Plataforma de administración de relaciones con clientes (CRM): administra los datos de clientes. En este documento, se hace referencia a Salesforce como ejemplo; puedes aplicar las mismas ideas a otras herramientas.
  • Software de administración de proyectos o seguimiento de problemas: Ayuda a los equipos a realizar un seguimiento de las correcciones de errores y el desarrollo de funciones. En este documento, se hace referencia a JIRA como ejemplo; puedes aplicar las mismas ideas a otras herramientas.
  • Software de asistencia al cliente o departamento de ayuda: Estos tipos de herramientas organizan las comunicaciones con los clientes para ayudar a las empresas a responderles a los clientes con más rapidez y eficacia. En este documento, se hace referencia a Zendesk como ejemplo; puedes aplicar las mismas ideas a otras herramientas.

Costos

En los procedimientos que se indican en este documento, se usan los siguientes componentes facturables de Google Cloud:

En este documento, también se hace referencia a plataformas de integración de datos y fuentes de datos de terceros, que tienen sus propios modelos de precios. Consulta la información de precios de Fivetran.

Antes de comenzar

  1. En Google Cloud Console, ve a la página del selector de proyectos.

    Ir al selector de proyectos

  2. Selecciona o crea un proyecto de Google Cloud.

  3. Habilita la facturación en todas las transferencias de tu proyecto. Se te cobrarán $0 por las transferencias gratuitas.

    Solo se requiere habilitar la facturación una vez por proyecto, incluso si transfieres datos desde varias fuentes. La facturación también debe estar habilitada para consultar los datos en BigQuery después de transferirlos.

    Obtén más información sobre cómo confirmar que la facturación esté habilitada en tu proyecto.

  4. BigQuery se habilita automáticamente en proyectos nuevos. Para activar BigQuery en un proyecto existente, habilita la API de BigQuery.

    Habilita la API de BigQuery

Prepara el entorno

Centraliza los datos en BigQuery

En los procedimientos de esta sección, se describe cómo hacer lo siguiente:

  • Exportar tus eventos sin procesar de Google Analytics 4, así como los datos de fallas.

  • Exportar desde Firestore a BigQuery

  • Consultar datos en Hojas de cálculo de Google

  • Exportar datos con herramientas de terceros

Exporta desde Google Analytics 4

Puedes exportar todos tus eventos sin procesar desde las propiedades Google Analytics 4 a BigQuery para realizar análisis más complejos. Para exportar los datos de Google Analytics 4, consulta BigQuery Export.

Exporta desde Crashlytics

Crashlytics proporciona una excelente manera de hacer un seguimiento de las fallas en tu aplicación y supervisarlas. Exportar estos datos de fallas a BigQuery te brinda más flexibilidad para los tipos de preguntas que puedes responder con estos datos. Para obtener más información sobre la exportación de datos a BigQuery, consulta Exporta datos de Qwiklabs a BigQuery.

En la pestaña Integraciones de Firebase, puedes configurar una conexión a BigQuery. De manera opcional, puedes activar o desactivar la transmisión, lo que envía datos de fallas a BigQuery en tiempo real.

Exporta Crashlytics

Exporta de Firestore a BigQuery

Firestore es una base de datos flexible y escalable para el desarrollo en servidores, dispositivos móviles y la Web desde Firebase y Google Cloud. Para configurar exportaciones de lotes de documentos de Firestore a BigQuery, lo que te permite incorporar datos directamente de tu aplicación a los análisis, consulta Carga datos de exportaciones de Firestore. De manera alternativa, para usar la extensión de Firebase, consulta Exportación de BigQuery para Firestore.

Consulta datos en Hojas de cálculo de Google

Muchas empresas almacenan información de la empresa que se ingresa o modifica de forma manual en hojas de cálculo, como Hojas de cálculo de Google. Un ejemplo de esta situación son los objetivos comerciales o los objetivos de ingresos. Es importante centralizar esta información en BigQuery para que puedas realizar un seguimiento del progreso y lograr los objetivos. BigQuery admite la creación de una tabla externa para que puedas consultar y unir datos de forma directa en la información almacenada en Hojas de cálculo de Google. Para obtener más información, lee Consulta datos de Drive.

Exporta datos con herramientas de terceros

Existen varias herramientas de integración de datos que exportan datos con algunos códigos o ninguno. Fivetran ofrece conectores de muchas aplicaciones de software como servicio (SaaS) diferentes, lo que incluye CRM, seguimiento de problemas y software de asistencia al cliente. Para obtener información sobre cómo configurar BigQuery como el destino de tus fuentes, consulta la Guía de configuración de BigQuery.

Para obtener información sobre la configuración de las fuentes que se usan en este documento, consulta las siguientes guías de configuración de Fivetran:

Unifica las fuentes de datos

Con los datos canalizados a BigQuery, es posible que tengas un proyecto similar a este, en el que cada fuente de datos se encuentra en su propio conjunto de datos:

Ejemplos de archivos en un proyecto

Para escribir consultas que unan tablas de diferentes conjuntos de datos, usa ID estandarizados en todas las plataformas.

Mapea los ID del usuario entre las fuentes de datos

El ID del usuario de la base de datos de tu aplicación, como Firestore, puede ser una buena fuente de información y se puede usar para propagar los ID del usuario en otras aplicaciones. Si asignas un ID persistente y único a cada usuario, puedes unir fuentes de datos y presentar una vista multiplataforma del comportamiento del usuario.

Mapea los ID del usuario entre las fuentes de datos

Cada una de las fuentes de datos que se analizan en Arquitectura se puede configurar para que se establezca un ID del usuario personalizado. Una vez que los datos se exportan a BigQuery, este ID del usuario está disponible como una columna de la tabla especificada y se puede usar para unir las tablas de una consulta.

  • Crashlytics

    Realiza una consulta para obtener el ID del usuario:

    SELECT user.id FROM crashlytics.[my_crashlytics_table]
    

    Para configurar los ID del usuario a fin de que coincidan con otras aplicaciones, usa el SDK de Crashlytics.

  • Google Analytics 4

    Realiza una consulta para obtener el ID del usuario:

    SELECT user_id FROM google_analytics.events
    

    Para obtener información sobre cómo incluir los ID del usuario en los datos que envías a Google Analytics, consulta los siguientes artículos:

  • Zendesk

    Realiza una consulta para obtener el ID del usuario:

    SELECT external_id FROM zendesk.users</code>
    

    Zendesk admite un ID del usuario externo que puedes configurar para un usuario durante una importación masiva de usuarios o mientras usas la API.

Mapea fuentes de datos a tu CRM

La asignación de las fuentes de datos a la herramienta de CRM puede variar entre las organizaciones de empresa a empresa (B2B) y de empresa a consumidor (B2C). Las empresas B2B necesitan mapear usuarios a ID de cuentas y, posiblemente, mapear ID de cuentas en cada plataforma.

En el siguiente diagrama, se ilustra un ejemplo de mapeo de fuentes de datos a una herramienta de CRM, Salesforce:

Mapea fuentes a CRM

  • Salesforce (B2C): para acceder al ID del usuario desde Salesforce, asigna el ID del usuario unificado al ID del usuario de Salesforce. El ID del usuario externo depende del nombre del campo personalizado en Salesforce. Puedes usar un campo personalizado en el objeto de contacto de Salesforce que contenga el ID del usuario unificado. Los campos personalizados se propagan en la exportación de Salesforce como su propia columna.

  • Salesforce (B2B): Para acceder al ID de cuenta desde Salesforce, mapea el ID de usuario unificado al ID de cuenta de Salesforce. Puedes crear una tabla personalizada en tu propia base de datos (Firestore) que realice un seguimiento del ID de usuario unificado en una columna y del ID de cuenta de Salesforce en otra, y replicar esa tabla en BigQuery.

    Otra opción es usar variables personalizadas en Google Analytics 4 y Crashlytics para incluir el ID de la cuenta de Salesforce:

    • Para acceder a las propiedades del usuario personalizadas de Google Analytics 4, ejecuta lo siguiente:

      SELECT up.value.string_value FROM google_analytics.events, UNNEST(user_properties) as up WHERE up.key = 'sfdc_account_id'
      
    • Para acceder a las claves personalizadas en Crashlytics, ejecuta el siguiente comando:

      SELECT ck.value FROM crashlytics.[my_crashlytics_table], UNNEST(custom_keys) as ck WHERE ck.key = 'sfdc_account_id'
      

Puedes configurar el ID de organización externo en Zendesk con lo siguiente:

SELECT external_id FROM zendesk.organization

ID de errores en el mapa en fuentes de datos

Para realizar un seguimiento del efecto de los problemas en el comportamiento de los clientes y en la ruta de resolución, puedes unir los problemas de los clientes en Qwiklabs, JIRA y Zendesk. En este caso, puedes usar el ID del problema de Crashlytics como el ID de fuente de información en todas las plataformas.

Puedes obtener el ID de problema de Crashlytics con esta consulta:

SELECT issue_id FROM [my_crashlytics_table]

Mapea los ID de problema entre las fuentes de datos

  • JIRA

    Realiza una consulta para obtener el ID de problema de Crashlytics:

    SELECT external_id FROM jira.issue
    

    Firebase ofrece integraciones directas entre JIRA y Qwiklabs. Consulta Agrega integraciones de JIRA a tu proyecto. Esta integración te permite crear un problema nuevo desde la página de Crashlytics o generar automáticamente problemas de JIRA en función de un límite determinado. Para obtener información sobre cómo usar los datos en varias fuentes para la creación automática de JIRA con acciones de Looker, consulta Prioriza errores.

  • Zendesk

    Realiza una consulta para obtener el ID del ticket de Zendesk:

    SELECT ticket_id FROM zendesk.ticket
    

    Cuando se crea un ticket de asistencia, el equipo puede crear un error o una solicitud de función en JIRA en nombre del cliente. Zendesk tiene integraciones directas con JIRA que facilitan este proceso para los agentes de atención al cliente. Para obtener más información, consulta Integración de la app de JIRA con la asistencia de Zendesk. Consulta también Usa la asistencia de Zendesk para la integración de JIRA, que te permite acceder a esta información en campos personalizados de JIRA. El nombre de la columna en JIRA depende de la forma en que configures la integración y el conector específico que uses.

Analiza datos en Looker

Conecta BigQuery a Looker

Con los datos disponibles en BigQuery, puedes conectar tu proyecto a Looker. Consulta Cómo configurar una conexión en Looker a Google BigQuery.

Usa los bloques de Looker

El mercado de Looker tiene una variedad de modelos y paneles de datos compilados previamente específicos para ciertas fuentes. Looker Blocks te permite dedicar menos tiempo para definir métricas y desarrollar LookML, y más tiempo para hacer preguntas más profundas sobre los datos.

Por el momento, existen bloques disponibles para Salesforce, Zendesk, JIRA y Bitbucket. También existe un bloque de Google Analytics 360. Para instalar estos bloques desde Marketplace, navega hasta el símbolo de vidriera en tu instancia de Looker.

Usa la barra de búsqueda para encontrar bloques específicos:

Buscar bloques de Looker

Después de ubicar los bloques, puedes instalar el modelo:

Instala el modelo

Una vez instalado el modelo, puedes extender y personalizar las definiciones para que se adapten a tus necesidades comerciales. En este documento, crearás un proyecto nuevo para usar Zendesk, Salesforce, JIRA y bloques de Crashlytics que están disponibles en el mercado actualmente.

Puedes encontrar el ejemplo de LookML de una empresa de SaaS (B2B) para este proyecto nuevo en el repositorio de GitHub de estadísticas de aplicaciones unificadas. Si recién comienzas a usar LookML, consulta Comienza a usar LookML antes de pasar al código.

En el código de muestra, se usa la importación de proyectos locales para incorporar el LookML que se necesita desde cada bloque.

En el archivo modelo, puedes especificar qué archivos deseas incluir. Por ejemplo:

include: "//marketplace_crashlytics/*.model"

Otra opción es copiar y pegar directamente el LookerML que deseas usar desde los bloques en tu propio proyecto (en lugar de importarlo) para simplificar el desarrollo futuro.

Usa los identificadores que se analizan en Unifica las fuentes de datos para crear exploraciones que se unan a las fuentes de datos. Esto no crea una tabla amplia; en su lugar, Looker usa este modelo semántico para ejecutar las uniones necesarias en el entorno de ejecución de la consulta. En el siguiente ejemplo, se crean las relaciones entre los datos deCrashlytics, JIRA y Salesforce:

# Crash events, combined with JIRA issues and Salesforce accounts
explore: crashlytics {
  fields: [ALL_FIELDS*, -issue.needs_triage, -issue.is_approaching_sla,]
  join: user_details {
    type: inner
    relationship: many_to_one
    sql_on: ${user_details.data__user_id} = ${crashlytics.user__id} ;;
  }
  join: account {
    type: inner
    relationship: many_to_many
    sql_on: ${account.id} = ${user_details.data__account_id} ;;
  }
  join: issue {
    type: left_outer
    relationship: many_to_one
    sql_on: ${issue.external_id} = ${crashlytics.issue_id} ;;
  }
}

Con las exploraciones establecidas, los usuarios finales tienen acceso a un entorno de autoservicio de estadísticas que admite preguntas multiplataforma. También puedes importar y copiar los paneles de LookML proporcionados en los bloques para desarrollar paneles más eficaces mediante métricas que combinan información de cada fuente de datos.

Paneles de LookML

Automatiza los flujos de trabajo operativos

Para incorporar datos a las actividades operativas y automatizar las tareas repetitivas, usa las acciones de Looker para enviar datos a otras aplicaciones. Para obtener más información sobre las acciones de Looker y cómo habilitar estas acciones, consulta Configuración de administrador: acciones.

En este documento, se describe cómo usar las acciones de Looker para realizar lo siguiente:

Con las fuentes de datos centralizadas en BigQuery, puedes analizar información en diferentes casos de uso. Consulta Informes, Prioriza errores y Administra cuentas para ver ejemplos de métricas que puedes calcular en BigQuery y flujos de trabajo que se pueden automatizar dentro de Looker.

Informes

Los equipos de liderazgo necesitan vistas precisas y actualizadas de su empresa. Algunas métricas clave que pueden ser relevantes para los ejecutivos incluyen los objetivos de ingresos para objetivos y usuarios activos diarios promedio.

Visualiza el seguimiento de los objetivos

Cuando se comparan los objetivos de ingresos almacenados en Hojas de cálculo de Google, que están almacenados en la tabla salesforce.goals, con la información del cliente en CRM, los clientes pueden visualizar cómo se acercan a los objetivos.

# Total Bookings Goal for Current Quarter plus Closed Revenue
SELECT
goals._Total_Bookings_ as goal,
SUM(CASE WHEN opportunity.stage_name = 'Closed Won' THEN opportunity.amount  ELSE NULL END) AS total_closed_won_amount,
FROM salesforce.opportunity  AS opportunity
LEFT JOIN salesforce.goals AS goals
ON CONCAT('Q' , EXTRACT(QUARTER FROM opportunity.close_date)) = goals.Quarter
AND EXTRACT(YEAR FROM opportunity.close_date) = goals.Year
WHERE DATE_TRUNC(opportunity.close_date, QUARTER) = DATE_TRUNC(CURRENT_DATE(), QUARTER)
GROUP BY 1

En LookerML, puedes usar variables de Liquid para extraer de forma dinámica el objetivo correcto de un equipo, una región o un período específicos en función de los filtros que aplica el usuario. Para obtener más detalles sobre cómo usar Liquid, consulta Referencia de variable de Liquid. Para ver un ejemplo del uso de Liquid, consulta este archivo de vista de demostración, que se modela en esta Hoja de cálculo de Google de ejemplo.

Visualiza el seguimiento de los objetivos

Calcula el promedio de usuarios activos por día

La métrica del promedio de usuarios activos por día representa la cantidad promedio de usuarios que accedieron por día para cada cuenta, según los registros de eventos de Google Analytics que se unen a una tabla de mapeo de cuentas de usuario de Firestore y los detalles de cuenta de Salesforce.

    # Average number of active users each day for each account
    WITH account_facts AS
    (SELECT
        events.event_date AS event_date,
        account.id  AS account_id,
        COUNT(DISTINCT events.user_id ) AS number_of_users
    FROM google_analytics.events AS events
    LEFT JOIN firestore.user_details AS user_details ON events.user_id=user_details.data.user_id
    FULL OUTER JOIN salesforce.account  AS account ON account.id = user_details.data.account_id
    GROUP BY 1, 2)

    SELECT
        account_facts.event_date AS account_facts_event_date,
        AVG(account_facts.number_of_users) AS account_facts_average_number_users
    FROM account_facts
    GROUP BY 1

Pon en funcionamiento flujos de trabajo

Además de visualizar las métricas en un panel, también puedes poner en funcionamiento estos flujos de trabajo. Por ejemplo, puedes crear una alerta para enviar una notificación cuando un equipo alcance sus objetivos.

Pon en funcionamiento flujos de trabajo

Otro ejemplo es usar la información de las métricas a fin de propagar una Presentación de Google para las reuniones de toda la empresa. Para ello, programa tu informe en Hojas de cálculo de Google.

Propagar Presentaciones de Google

Luego, en Presentaciones de Google, puedes crear un gráfico basado en datos de Hojas de cálculo de Google.

Prioriza errores

Para priorizar, resolver y minimizar las interrupciones de los clientes, los administradores de programas técnicos, los administradores de productos y los desarrolladores deben medir el impacto de los problemas en sus aplicaciones. Las métricas que ayudan a abordar este caso de uso incluyen las fallas experimentadas por clientes valiosos y los problemas generados en la asistencia por chat.

Filtra las fallas que experimentan los clientes valiosos

Con los datos de CRM, puedes filtrar los problemas de Crashlytics que afectan a los clientes con un valor que supere un umbral determinado.

# Issues that resulted in a fatal crash for accounts worth more than $5000
SELECT
    DISTINCT crashlytics.issue_id
FROM crashlytics.[my_table] AS crashlytics
INNER JOIN firestore.user_details  AS user_details ON user_details.data.user_id = crashlytics.user.id
INNER JOIN salesforce.account  AS account ON account.id = user_details.data.account_id
WHERE (select sum(amount) from salesforce.opportunity where account_id = account.id) > 5000 and crashlytics.is_fatal

Filtra problemas que aparecen en la asistencia por chat

Si combinas los datos de los registros de asistencia con Crashlytics, puedes filtrar los problemas que plantean los clientes en la asistencia por chat.

# Issues that are linked to at least one Zendesk ticket
SELECT crash.issue_id, count(distinct zen.id) as num_tickets
FROM crashlytics.[my_table] as crash
INNER JOIN jira.issue as jira on jira.external_issue_id = crash.issue_id
INNER JOIN zendesk.ticket as zen on zen.id in unnest(jira.c__zendesk_ticket_ids)
GROUP BY 1
HAVING COUNT(distinct zen.id) > 0
ORDER BY 2 DESC

Con esta información, los usuarios finales pueden configurar notificaciones para errores nuevos que cumplan criterios específicos, como cuando un error identificado en una versión nueva también afecta a un cliente valioso.

Además de recibir una notificación sobre estos problemas, los usuarios finales también pueden usar la acción de Looker para JIRA a fin de crear errores de forma automática con la información proporcionada por los campos extraídos en la consulta.

Crear errores desde JIRA

Administra cuentas

Para mejorar la retención y aprovechar las oportunidades de realizar una venta incremental, los representantes de ventas y los administradores de cuentas deben evaluar el estado de los clientes y priorizar qué cuentas necesitan atención. Las métricas que pueden ser relevantes para estas personas incluyen a los clientes afectados por fallas y tendencias de uso de las cuentas.

Identifica a los clientes afectados por fallas

Mediante la unión de los datos de CRM y la información de Crashlytics, los usuarios finales pueden filtrar la información de las fallas para ver solo sus propias cuentas.

#Get account information for customers that experience a fatal or non-fatal crash
SELECT
    account.id  AS account_id,
    account.name  AS account_name
FROM crashlytics.[my_table] AS crashlytics
INNER JOIN firestore.user_details  AS user_details ON user_details.data.user_id = crashlytics.user.id
INNER JOIN salesforce.account  AS account ON account.id = user_details.data.account_id
LEFT JOIN salesforce.user  AS account_owner ON account.owner_id = account_owner.id
WHERE (account_owner.name ) = 'myname'
GROUP BY
    1,
    2

Identifica tendencias de uso para las cuentas

Identificar las tendencias de uso de tus cuentas te permite enfocarte en los clientes que experimentaron una disminución promedio semanal en la cantidad de usuarios activos según los datos de Google Analytics.

# Calculates the average week-over-week change in event counts for each account over the past 4 weeks
WITH week_over_week as (
  SELECT
  account_id,
  (events_count - LAG(events_count,1) OVER (PARTITION BY account_id ORDER BY event_week DESC)
    )/LAG(events_count,1) OVER (PARTITION BY account_id ORDER BY event_week DESC) AS wow_change
  FROM
  (
    SELECT
      account.id  AS account_id,
      DATE_TRUNC(PARSE_DATE('%Y%m%d', events.event_date), WEEK(MONDAY)) AS event_week,
      COUNT(*) AS events_count
  FROM google_analytics.events AS events
  LEFT JOIN firestore.user_details  AS user_details ON events.user_id=user_details.data.user_id
  FULL OUTER JOIN salesforce.account  AS account ON account.id = user_details.data.account_id
  WHERE PARSE_DATE('%Y%m%d', events.event_date) >= (current_date() - 4*7)
  GROUP BY
      1,
      2
  )
)
SELECT account_id, AVG(wow_change) avg_wow
FROM week_over_week
GROUP BY 1
ORDER BY 2 ASC

Mediante la integración de Slack, puedes obtener actualizaciones semanales de tus clientes y tomar medidas inmediatas en función de esa información. En la aplicación Looker, puedes crear acciones a nivel de campo personalizadas que envíen una solicitud POST a un extremo especificado. Esto te permite actualizar campos directamente en Salesforce o comunicarte con tus clientes desde la aplicación de Looker.

Crea acciones personalizadas a nivel de campo en Looker

¿Qué sigue?