Como criar uma plataforma unificada de análise de aplicativos usando o Firebase, o BigQuery e o Looker

Este documento mostra como centralizar suas fontes de dados em um armazenamento de dados e se aprofundar no comportamento do cliente para tomar decisões de negócios informadas. Esse tipo de solução ajuda você a rastrear informações em vários canais, permitindo que sua organização determine, por exemplo, como as melhorias no produto afetam o comportamento de uso do cliente ou como as correções de recursos e aplicativos precisam ser priorizadas. Este documento é especialmente útil para organizações nativas digitais, incluindo as indústrias de Software as a Service (SaaS), de jogos e de comércio eletrônico.

Este documento é destinado a desenvolvedores e analistas de dados e pressupõe que você tenha experiência com a linguagem de consulta estruturada (SQL) e tenha conhecimento básico dos seguintes tópicos:

  • BigQuery
  • Looker
  • Firebase
  • Ferramentas de gestão de relacionamento com o cliente (CRM), rastreamento de problemas e suporte ao cliente da sua organização

Este documento inclui seções que descrevem como atender às necessidades reais das empresas para um público mais amplo:

Procedimento Público Meta(s) de negócios(s)
Relatórios Executivos e gerentes de conta Confira o progresso em relação às metas e acompanhe a média de usuários ativos por dia.
Como priorizar bugs Gerentes de programas técnicos, gerentes de produtos e desenvolvedores Identifique falhas enfrentadas por clientes de alto valor e problemas relacionados ao suporte por chat.
Como gerenciar contas Representantes de vendas e gerentes de contas Identifique os clientes afetados por falhas e tendências de uso das suas contas.

Arquitetura

Arquitetura

Nessa arquitetura, o BigQuery torna-se a única fonte de confiança para análises, recebendo dados de várias origens regularmente. No Looker, os analistas de dados combinam o Looker Blocks com modelos personalizados próprios do LookML para analisar dados de diferentes usuários.

O Looker é a plataforma de Business Intelligence do Google Cloud, que permite criar painéis ao vivo que permitem que os usuários analisem os detalhes dos dados e realizem ações diretas sobre os resultados. ,

Essa arquitetura usa as seguintes fontes de dados:

  • Google Analytics 4: acompanha as interações dos clientes no seu aplicativo.
  • Firebase Crashlytics: coleta e organiza informações sobre falhas de aplicativos do Firebase.
  • Firestore: fornece um banco de dados de back-end para seu aplicativo do Firebase.
  • Planilhas Google: coleta manualmente dados primários inseridos em planilhas.
  • Plataforma de gestão de relacionamento com o cliente (CRM): gerencia os dados do cliente. Este documento se refere ao Salesforce como exemplo, é possível aplicar as mesmas ideias a outras ferramentas.
  • Rastreamento de problemas ou software de gerenciamento de projetos: ajuda as equipes a acompanhar correções de bugs e desenvolvimento de recursos. Este documento refere-se ao JIRA como exemplo. você pode aplicar as mesmas ideias a outras ferramentas.
  • Software de suporte ao cliente ou uma central de informações: esses tipos de ferramentas organizam as comunicações com o cliente para ajudar as empresas a responder aos clientes com mais rapidez e eficiência. Este documento se refere ao Zendesk como exemplo. você pode aplicar as mesmas ideias a outras ferramentas.

Custos

Os procedimentos neste documento usam os seguintes componentes faturáveis do Google Cloud:

Este documento também se refere a plataformas de integração de dados de terceiros e fontes de dados, que têm seus próprios modelos de preços. Consulte Informações sobre preços da Fivetran.

Antes de começar

  1. No Console do Google Cloud, acesse a página do seletor de projetos.

    Acessar o seletor de projetos

  2. Selecione ou crie um projeto do Google Cloud.

  3. Ative o faturamento no seu projeto para todas as transferências. Você será cobrado US$ 0 pelas transferências gratuitas.

    A ativação do faturamento só é necessária uma vez por projeto, mesmo que você esteja transferindo dados de várias fontes. O faturamento também precisa estar ativado para consultar os dados no BigQuery depois que os dados são transferidos.

    Saiba como confirmar se o faturamento está ativado no seu projeto.

  4. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto atual, ative a API BigQuery.

    Ativar a API BigQuery

Como preparar o ambiente

Como centralizar dados no BigQuery

Os procedimentos nesta seção descrevem como fazer o seguinte:

  • Exporte os eventos brutos do Google Analytics 4, bem como os dados de falhas.

  • Exportar do Firestore para o BigQuery.

  • Consultar dados no Planilhas Google.

  • Exportar dados com ferramentas de terceiros.

Exportar do Google Analytics 4

É possível exportar todos os eventos brutos das propriedades do Google Analytics 4 para o BigQuery para análises mais complexas. Para exportar os dados do Google Analytics 4, consulte BigQuery Export

Exportar do Crashlytics

O Crashlytics é uma ótima maneira de acompanhar e monitorar falhas no seu aplicativo. A exportação desses dados de falhas para o BigQuery oferece mais flexibilidade para os tipos de perguntas que podem ser respondidas com esses dados. Para informações sobre como exportar dados para o BigQuery, consulte Exportar dados do Crashlytics para o BigQuery.

Na guia Integrações do Firebase, é possível configurar uma conexão com o BigQuery. Se preferir, ative o streaming, que envia dados de falhas para o BigQuery em tempo real.

Exportar Crashlytics

Exportar do Firestore para o BigQuery

O Firestore é um banco de dados flexível e escalonável para desenvolvimento focado em dispositivos móveis, Web e servidores pelo Firebase e o Google Cloud. Para configurar exportações em lote de documentos do Firestore para o BigQuery, que permitem incorporar dados diretamente do aplicativo nas análises, consulte Como carregar dados de exportações do Firestore. Como alternativa, para aproveitar a extensão do Firebase, consulte Exportação do BigQuery para Firestore.

Consultar dados no Planilhas Google

Muitas empresas armazenam informações comerciais que são inseridas ou modificadas manualmente em planilhas, como o Planilhas Google. Um exemplo desse cenário são metas de negócios ou metas de receita. É importante centralizar essas informações no BigQuery para que você possa, por exemplo, acompanhar o progresso das metas. O BigQuery permite a criação de uma tabela externa para que seja possível consultar e mesclar dados diretamente nas informações armazenadas no Planilhas Google. Para saber mais, consulte Como consultar dados do Drive.

Exportar dados com ferramentas de terceiros

Há várias ferramentas de integração de dados que exportam dados com pouco ou nenhum código. O Fivetran oferece conectores de muitos aplicativos diferentes de software como serviço (SaaS), incluindo CRM, rastreamento de problemas e software de suporte ao cliente. Para saber como configurar o BigQuery como o destino das suas origens, consulte o Guia de configuração do BigQuery.

Para informações sobre como configurar as origens usadas neste documento, consulte os seguintes guias de configuração do Fivetran:

Unificação de fontes de dados

Com os dados canalizados para o BigQuery, você pode ter um projeto semelhante a este, em que cada fonte de dados reside no próprio conjunto de dados:

arquivos de exemplo em um projeto

Para escrever consultas que unem tabelas de conjuntos de dados diferentes, use códigos padronizados em várias plataformas.

Mapear IDs de usuários em fontes de dados

O ID do usuário do banco de dados do aplicativo, como o Firestore, pode ser uma boa fonte de verdade e pode ser usado para preencher os IDs do usuário em outros aplicativos. Ao atribuir um código exclusivo e persistente a cada usuário, é possível mesclar fontes de dados e apresentar uma visualização entre as plataformas do comportamento do usuário.

Mapear IDs de usuários em fontes de dados

Cada uma das fontes de dados discutidas em Arquitetura pode ser configurada para que um ID do usuário personalizado seja definido. Depois que os dados são exportados para o BigQuery, esse ID de usuário fica disponível como uma coluna na tabela especificada e pode ser usado para unir as tabelas em uma consulta.

  • Crashlytics

    Consulta para receber o ID do usuário:

    SELECT user.id FROM crashlytics.[my_crashlytics_table]
    

    Para definir códigos de usuário correspondentes a outros aplicativos, use o SDK do Crashlytics.

  • Google Analytics 4

    Consulta para receber o ID do usuário:

    SELECT user_id FROM google_analytics.events
    

    Para saber como incluir IDs de usuário com os dados que você envia para o Google Analytics, consulte estes artigos:

  • Zendesk

    Consulta para receber o ID do usuário:

    SELECT external_id FROM zendesk.users</code>
    

    O Zendesk é compatível com um ID de usuário externo que pode ser definido para um usuário durante uma importação de usuário em massa ou usando a API.

Mapear origens de dados para seu CRM

Mapear as origens de dados para a ferramenta de CRM pode ser diferente para organizações entre empresas (B2B) e empresas para consumidores (B2C). As empresas B2B precisam mapear os usuários para os IDs de conta e possivelmente IDs de conta em cada plataforma.

O diagrama a seguir ilustra um exemplo de mapeamento de origens de dados para uma ferramenta de CRM, a Salesforce:

mapear origens para CRM

  • Salesforce (B2C): para acessar o ID do usuário do Salesforce, mapeie o ID do usuário unificado para o ID do usuário do Salesforce. O ID do usuário externo depende da nomenclatura do campo personalizado no Salesforce. Você pode usar um campo personalizado no objeto de contato do Salesforce que contém o ID do usuário unificado. Os campos personalizados são preenchidos na exportação do Salesforce como sua própria coluna.

  • Salesforce (B2B): para acessar o ID da conta do Salesforce, mapeie o ID do usuário unificado para o ID da conta do Salesforce. É possível criar uma tabela personalizada no próprio banco de dados, o Firestore, que rastreia o ID do usuário unificado em uma coluna e o ID da conta do Salesforce em outra, replica a tabela no BigQuery.

    Outra opção é usar variáveis personalizadas no Google Analytics 4 e no CTR para incluir o ID da conta do Salesforce:

    • Para acessar as propriedades personalizadas do usuário do Google Analytics 4, execute o seguinte:

      SELECT up.value.string_value FROM google_analytics.events, UNNEST(user_properties) as up WHERE up.key = 'sfdc_account_id'
      
    • Para acessar as chaves personalizadas no Crashlytics, execute o seguinte:

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

É possível definir o código de organização externo no Zendesk com o seguinte:

SELECT external_id FROM zendesk.organization

Mapear códigos de problemas em várias fontes de dados

Para rastrear o efeito dos problemas no comportamento do cliente e no caminho para a resolução, você pode juntar problemas do cliente no Crashlytics, JIRA e Zendesk. Nesse caso, é possível usar o ID do problema do Crashlytics como a fonte da verdade em todas as plataformas.

Para conseguir o código do problema do Crashlytics com esta consulta:

SELECT issue_id FROM [my_crashlytics_table]

Mapear códigos de problemas em várias fontes de dados

  • JIRA

    Consulta para receber o ID do problema do Crashlytics:

    SELECT external_id FROM jira.issue
    

    O Firebase fornece integrações diretas entre o JIRA e o Crashlytics. Consulte Adicionar integrações do JIRA ao seu projeto. Essa integração permite criar um novo problema a partir da página do Crashlytics ou gerar automaticamente problemas de JIRA com base em um determinado limite. Para informações sobre como usar dados em várias fontes para a criação automática do JIRA com ações do Looker, consulte Como priorizar bugs.

  • Zendesk

    Consulta para receber o ID do tíquete do Zendesk:

    SELECT ticket_id FROM zendesk.ticket
    

    Quando um tíquete de suporte é criado, a equipe pode criar um bug ou uma solicitação de recurso no JIRA em nome do cliente. O Zendesk tem integrações diretas com o JIRA que tornam esse processo ainda mais fácil para os agentes de suporte. Para mais informações, consulte Integração de apps JIRA com o suporte do Zendesk. Consulte também Como usar o suporte do Zendesk para integração do JIRA, que permite acessar essas informações em campos personalizados no JIRA. O nome da coluna no JIRA depende da maneira como você configura a integração e o conector específico que você usa.

Como analisar dados no Looker

Conectar o BigQuery ao Looker

Com os dados disponíveis no BigQuery, é possível conectar seu projeto ao Looker. Consulte Como configurar uma conexão no Looker para o Google BigQuery.

Usar blocos do Looker

O mercado do Looker tem vários modelos e painéis de dados pré-criados específicos para determinadas fontes. Os blocos do Looker permitem que você passe menos tempo definindo métricas e desenvolvendo o LookML e mais tempo fazendo perguntas mais profundas sobre os dados.

Atualmente, há blocos disponíveis para Salesforce, Zendesk, JIRA e Crashlytics. Há também um bloco do Google Analytics 360. É possível instalar esses blocos a partir do Marketplace navegando até o símbolo da vitrine na instância do Looker.

Use a barra de pesquisa para encontrar blocos específicos.

Pesquisar por Looker Blocks

Depois de localizar os blocos, instale o modelo:

instalar o modelo

Depois que o modelo for instalado, será possível estender e personalizar definições para atender às necessidades da sua empresa. Neste documento, você cria um novo projeto para usar o Zendesk, o Salesforce, JIRA e blocos do Crashlytics que estão disponíveis atualmente no mercado.

É possível encontrar a amostra LookML para uma empresa de SaaS (B2B) para este novo projeto no repositório GitHub do Application Analytics unificado. Se você está começando a usar o LookML, consulte Primeiros passos com o LookML antes de entrar no código.

O código de exemplo usa a importação de projeto local para trazer o LookML necessário para cada bloco.

No arquivo model, é possível especificar quais arquivos você quer incluir, por exemplo:

include: "//marketplace_crashlytics/*.model"

Outra opção é copiar e colar diretamente o LookML que você quer aproveitar dos blocos no seu próprio projeto (em vez de importá-lo) para simplificar o desenvolvimento futuro.

Use os identificadores discutidos em Como unificar fontes de dados para criar explorações que se juntam nas fontes de dados. Isso não cria uma tabela ampla. Em vez disso, o Looker usa esse modelo semântico para executar as junções necessárias no tempo de execução da consulta. O exemplo a seguir cria as relações entre os dados do Crashlytics, JIRA e 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} ;;
  }
}

Com o recurso Explorar, os usuários finais têm acesso a um ambiente de análise de autoatendimento compatível com perguntas de várias plataformas. Você também pode importar e copiar os painéis do LookML fornecidos nos blocos para desenvolver painéis mais impactantes usando métricas que combinam informações de cada fonte de dados.

Painéis do LookML

Automatize fluxos de trabalho operacionais

Para incorporar dados em atividades operacionais e automatizar tarefas repetitivas, use as ações do Looker para enviar dados para outros aplicativos. Para saber mais sobre as ações do Looker e como ativá-las, consulte Configurações do administrador: ações.

Este documento descreve como usar as ações do Looker para fazer o seguinte:

Com fontes de dados centralizadas no BigQuery, agora é possível analisar informações em diferentes casos de uso. Consulte Geração de relatórios, Como priorizar bugs e Como gerenciar contas para ver exemplos de métricas que podem ser calculadas no BigQuery e fluxos de trabalho que podem ser automatizados no Looker.

Relatórios

As equipes de liderança precisam de visualizações precisas e atualizadas dos negócios. Algumas métricas importantes que podem ser relevantes para executivos incluem metas de receita para metas e média de usuários ativos por dia.

Visualizar rastreamento em direção às metas

Ao comparar as metas de receita armazenadas no Planilhas Google, armazenadas na tabela salesforce.goals, com as informações dos clientes no CRM, os leads podem visualizar como eles estão acompanhando as metas.

# 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

No LookML, use variáveis Liquid para extrair dinamicamente a meta correta para uma equipe, região ou período específico com base nos filtros aplicados pelo usuário. Para mais detalhes sobre como aproveitar o líquido, consulte Referência da variável líquida. Para ver um exemplo de uso de líquido, consulte este arquivo de visualização de demonstração, que é modelado neste exemplo de planilha do Google.

Visualizar rastreamento em direção às metas

Calcular média de usuários ativos por dia

A métrica de usuário ativo médio diário representa o número médio de usuários que fizeram login em cada dia para cada conta, com base nos registros de eventos do Google Analytics associados a uma tabela de mapeamento de conta de usuário do Firestore e dos detalhes da conta do 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

Operacionalizar fluxos de trabalho

Além de visualizar as métricas em um painel, você também pode operacionalizar esses fluxos de trabalho. Por exemplo, você pode criar um alerta para enviar uma notificação quando uma equipe atingir as metas.

operacionalizar fluxos de trabalho

Outro exemplo é usar as informações das métricas para preencher uma apresentação do Apresentações Google para reuniões de toda a empresa. Para fazer isso, programe o relatório para o Planilhas Google.

preencher o Apresentações Google

Em seguida, crie um gráfico com base em dados no Planilhas Google.

Como priorizar bugs

Para priorizar, resolver e minimizar interrupções do cliente, gerentes técnicos de programas, gerentes de produtos e desenvolvedores precisam medir o impacto dos problemas nos seus aplicativos. As métricas que ajudam a lidar com esse caso de uso incluem falhas experimentadas por clientes de alto valor e problemas relacionados ao suporte por chat.

Falhas no filtro feitas por clientes de alto valor

Com os dados de CRM, é possível filtrar problemas do Crashlytics que afetam os clientes com um valor acima de um determinado limite.

# 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

Problemas de filtro gerados pelo suporte por chat

Ao combinar dados de registros de suporte com o Crashlytics, você pode filtrar problemas que são levantados pelos clientes no suporte 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

Com essas informações, os usuários finais podem configurar notificações para novos bugs que atendem a critérios específicos, por exemplo, quando um bug identificado em uma nova versão também afeta um cliente de alto valor.

Além de receber uma notificação sobre esses problemas, os usuários finais também podem aproveitar a ação do JIRA Looker para criar automaticamente bugs com as informações fornecidas pelos campos inseridos na consulta.

criar bugs do JIRA

Como gerenciar contas

Para melhorar a retenção e aproveitar oportunidades de upsell, representantes de vendas e gerentes de contas precisam avaliar a integridade do cliente e priorizar quais contas precisam de atenção. As métricas que podem ser relevantes para esses perfis incluem clientes afetados por falhas e tendências de uso das contas.

Identificar os clientes afetados pelas falhas

Ao unir dados de CRM e informações do Crashlytics, os usuários finais podem filtrar as informações de falhas para analisar apenas as próprias contas.

#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

Identificar tendências de uso de contas

Identificar as tendências de uso das suas contas permite que você se concentre nos clientes que têm uma redução média do número de usuários ativos com base nos dados do Google Analytics semana a semana.

# 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

Usando a integração do Slack, você pode receber atualizações semanais sobre seus clientes e tomar medidas imediatas com base nessas informações. No aplicativo Looker, é possível criar ações de nível de campo personalizadas que enviam uma solicitação POST para um endpoint especificado. Isso permite que você atualize diretamente os campos no Salesforce ou entre em contato com seus clientes do aplicativo LookLook.

criar ações personalizadas no nível do campo no Looker

A seguir