Analisando mudanças com dados históricos (snapshotting)
É fácil analisar os dados mais recentes e alterações na GoodData. Este artigo usa um cenário de vendas, mas você pode usá-lo analisar seu help desk, controle de qualidade ou dados de engenharia e desenvolvimento.
Este artigo apresenta a técnica analítica chamada de snapshotting. No cenário a seguir, você irá trabalhar com os conceitos de oportunidades, fases de vendas e mudança.
Análise de vendas
Análise de vendas Analytics trata de oportunidades de vendas que são geradas por suas atividades de negócio. Cada oportunidade tem um status que descreve se a oportunidade é Em aberto (Pipeline), Ganho (receitas), ou Perda (receita perdida).
Neste artigo, tentamos responder a uma pergunta típica de vendas: “Qual era o pipeline no início do semestre e como melhorou desde então?”
Noções básicas de snapshotting
Para responder a essa pergunta, você vai usar uma técnica chamada snapshotting. A ideia-chave é que continuamos a transferir todas as oportunidades de seu CRM para o GoodData toda semana (ou dia ou mês - depende de suas necessidades). Chamamos o conjunto semanal de oportunidades de um snapshot. Cada snapshot está associado a uma data e uma ID exclusiva.
Então, se temos um projeto que acumula snapshots por 118 semanas, a maioria de nossas oportunidades será duplicada 118 vezes no projeto. Algumas deles foram criados depois de começarmos a fazer snapshots e têm menos de 118 versões. Cada versão está associada a uma data de snapshot (talvez segunda-feira de cada semana) e à ID do snapshot. É muito benéfico usar IDs de snapshots em sequência sem lacunas. Podemos então identificar simplesmente o snapshot anterior/seguinte, como a ID atual menos ou mais um.
Aqui está a primeira captura. Uma métrica simples SELECT SUM(Valor) WHERE Status = Aberto
mede os retornos de pipeline em um número que é aproximadamente 118 vezes maior do que o que esperamos. Isto é porque estamos adicionando até todas as dez versões de cada oportunidade. Em vez disso, podemos definir a métrica que mostra a quantidade total para cada snapshot somente:
Pipeline [118 semanas]:
SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = 1
Pipeline [agora]:
SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = 118
No entanto, você precisará de uma nova métrica na próxima semana e uma outra na semana posterior. Uma métrica que retorna a quantidade total para o último snapshot seria útil. Vamos começar a criar tal métrica com identificação do último snapshot:
Snapshot [mais recente]:
SELECT MAX(SnapshotId)
Esta definição parece fácil o suficiente, no entanto, tem alguns problemas. Imagine que você demitiu o representante de vendas João durante o snapshot 25. Mantivemos todas as oportunidades que ele fechou associadas a ele e reassociamos todas as oportunidades abertas a outros vendedores.
Agora, se detalharmos o snapshot [mais recente] por representante, veremos que a métrica retorna 118 para todos os representantes de vendas, exceto João, que recebe o snapshot [mais recente] = 25. Este é o problema porque calcularíamos nosso total sobre o snapshot 25 para John e o snapshot 118 para todo mundo. Precisamos melhorar a definição da métrica de snapshot [mais recente]:
Snapshot [mais recente]:
SELECT MAX(SnapshotId) BY ALL IN ALL OTHER DIMENSIONS WITHOUT PARENT FILTER`
Esta métrica retorna o snapshot MAX independentemente DE quaisquer dimensões. O último snapshot (= 118) de todos os representantes de vendas, incluindo John, para todas as regiões, para todos os produtos etc. Quando você adiciona a instrução BY ALL IN ALL OTHER DIMENSIONS à sua métrica, ela retorna o total geral (MAX) do período completo e de todas as dimensões. Retorna uma constante.
Para que serve a cláusula WITHOUT PARENT FILTER? Imagine que você coloque a métrica em um relatório que contém o filtro Rep. Vendas = João. Aplicar este filtro conduziria aos mesmos problemas que eliminamos com BY ALL IN ALL OTHER DIMENSIONS. A cláusula WITHOUT PARENT FILTER ignora o nível superior filtros.
Saiba mais exemplos e conceitos de agregação em MAQL - linguagem de consulta analítica.
Então podemos usar a métrica snapshot [mais recente] em nossa métrica de pipeline e obter a quantidade mais recente desta forma:
Pipeline [agora]:
SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = Snapshot [Most Recent]
Da mesma forma podemos calcular o pipeline para o primeiro snapshot (aquele mais antigo). A métrica é:
Snapshot [mais antigo]:
SELECT MIN(SnapshotId) BY ALL IN ALL OTHER DIMENSIONS
e use-o na métrica de pipeline a seguir:
Pipeline [mais antigo]:
SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = Snapshot [Oldest]
Medindo a mudança de Pipeline em um trimestre
Os snapshots mais antigos e mais recentes são excelentes, mas queremos algo um pouco diferente. Queremos calcular o pipeline para o primeiro e o último snapshot em um trimestre. Pode conseguir através das seguintes definições de métricas:
Snapshot [primeiro no período]:
SELECT MIN(SnapshotId) BY ALL IN ALL OTHER DIMENSIONS EXCEPT SnapshotDate WITHOUT PARENT FILTER
Snapshot [último no período]:
SELECT MAX(SnapshotId) BY ALL IN ALL OTHER DIMENSIONS EXCEPT SnapshotDate WITHOUT PARENT FILTER
Vamos focar nas dimensões da instrução BY ALL IN ALL OTHER DIMENSIONS EXCEPT
. Usar este conceito permite calcular o total MAX/MIN de SnapshotId independentemente de qualquer dimensão, mas com exceção do atributo específico. A exceção é um atributo após a expressão EXCEPT
. Assim, o número resultante não vai mais ser uma constante. Vai depender do valor de SnapshotDate. Em outras palavras, essa métrica retorna o SnapshotId máximo para o período de SnapshotDate.
Se você colocar as métricas acima para um relatório com o trimestre de snapshot, verá a primeira e última ID de snapshot que temos para cada trimestre. Veja o relatório abaixo:
Então,o pipeline no início de um período:
Pipeline [Primeiro no período]:
SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = Snapshot [First in Period]
E o número mais recente e maior da pipeline é:
pipeline [último período]:
SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = Snapshot [Last in Period]
Junte essas duas métricas em um relatório com o trimestre de snapshot e obterá o pipeline no início de cada trimestre e o último pipeline conhecido de cada trimestre.
Dependendo de suas necessidades, você pode dividir ou subtrair estes números para obter os crescimentos absolutos ou relativos.