Analizar cambios con datos históricos (creación de instantáneas)

En GoodData es relativamente fácil analizar los últimos datos y cambios. Este artículo utiliza un escenario de ventas pero puede utilizarlo para analizar el servicio de asistencia técnica, el control de calidad o los datos de ingeniería y de desarrollo.

Este artículo presenta la técnica de análisis que recibe el nombre de creación de instantáneas. En el siguiente escenario, trabajará con los conceptos de oportunidades, fases de ventas y cambio.

Analíticas de ventas

Las analíticas de ventas son todos los datos relativos a las oportunidades de ventas que se generan por la actividad comercial. Cada oportunidad tiene un estado que describe si la oportunidad está Abierta (Canal comercial), Ganada (Ingreso) o Perdida (Ingreso perdido).

En este artículo, intentamos dar respuesta a una pregunta típica de ventas: “¿Cuál ha sido el canal comercial al principio de este trimestre y cómo ha mejorado desde entonces?”

Datos básicos de creación de instantáneas

Para responder a la pregunta, utilizaremos una técnica llamada creación de instantáneas. La idea clave es continuar transfiriendo todas las oportunidades del CRM a GoodData cada semana (o día o mes, en función de sus requisitos). Cada conjunto semanal de oportunidades recibe el nombre de instantánea. Las instantáneas están asociadas a una fecha y a un ID único.

Así que si tenemos un proyecto que acumula instantáneas para 118 semanas, la mayoría de oportunidades se duplicarán 118 veces en el proyecto. Muy pocas de las oportunidades que se han creado una vez que hemos empezado a hacer instantáneas tienen menos de 118 versiones. Cada versión está asociada a una fecha de instantánea (quizás el lunes de cada semana) y al ID de instantánea. Es muy beneficioso utilizar ID de instantáneas en secuencia, sin espacios vacíos. Así podemos identificar de forma sencilla las instantáneas anteriores/siguientes como el ID actual menos/más uno.

Aquí tenemos el primer ejemplo. Una sencilla métrica SELECT SUM(Amount) WHERE Status = Open mide el canal comercial y devuelve un número que es aproximadamente 118 veces superior al que teníamos previsto. Esto es así porque hemos agregado hasta 10 versiones de cada oportunidad. En lugar de ello, podemos definir una métrica que muestre solo el importe para la instantánea:

Pipeline [118 weeks ago]:

SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = 1

Pipeline [Now]:

SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = 118

Necesitará, sin embargo, una nueva métrica la siguiente semana y otra, la semana tras la siguiente semana. Una métrica que devuelva el importe total para la última instantánea sería muy práctica. Empecemos a crear pues dicha métrica con una identificación para la última instantánea:

Snapshot [Most Recent]:

SELECT MAX(SnapshotId)

Esta definición parece bastante sencilla, pero presenta algunos problemas. Supongamos que durante la instantánea 25 ha despedido al representante de ventas John. Hemos mantenido todas las oportunidades que él cerró asociadas a dicho representante y hemos asociado todas las oportunidades abiertas a otro representante.

Ahora, si desglosamos la métrica Snapshot [Most Recent] por SalesRep, veremos que la métrica devuelve 118 para todos los representantes de ventas, excepto para John, que obtiene Snapshot [Most Recent] = 25. Esto es un problema porque calcularíamos nuestro total en la instantánea 25 para John y en la instantánea 118 para todos los demás. Debemos mejorar la definición de la métrica Snapshot [Most Recent]:

Snapshot [Most Recent]:

SELECT MAX(SnapshotId) BY ALL IN ALL OTHER DIMENSIONS WITHOUT PARENT FILTER`

Esta métrica devuelve la instantánea MAX independientemente de las dimensiones. La última instantánea (= 118) para todos los representantes de ventas incluido John, para todas las regiones, para todos los productos, etcétera. Cuando añade la instrucción BY ALL IN ALL OTHER DIMENSIONS a su métrica, esta devuelve el total general (MAX) de todos los tiempos y dimensiones. Devuelve una constante.

¿Para qué se utiliza la cláusula WITHOUT PARENT FILTER? Supongamos que sitúa la métrica en un informe que contiene el filtro SalesRep = John. La aplicación de este filtro nos llevaría a los mismos problemas que hemos descartado con BY ALL IN ALL OTHER DIMENSIONS. La cláusula WITHOUT PARENT FILTER ignora los filtros de nivel superiores.

A continuación, podemos usar la métrica Snapshot [Most Recent] en la métrica del canal comercial y obtener así el último importe de esta forma:

Pipeline [Now]:

SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = Snapshot [Most Recent]

De modo parecido, podemos calcular el canal comercial para la primera instantánea (la más antigua). La métrica es:

Snapshot [Oldest]:

SELECT MIN(SnapshotId) BY ALL IN ALL OTHER DIMENSIONS

y utilícela en la siguiente métrica del canal comercial:

Pipeline [Oldest]:

SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = Snapshot [Oldest]

Medir el canal comercial en un trimestre

Disponer de las instantáneas más antiguas y más recientes es genial, pero queremos algo un poco diferente. Queremos calcular el canal comercial para la primera y la última instantánea en un trimestre. Podemos conseguir este cálculo mediante las siguientes definiciones de métrica:

Snapshot [First in Period]:

SELECT MIN(SnapshotId) BY ALL IN ALL OTHER DIMENSIONS EXCEPT SnapshotDate WITHOUT PARENT FILTER

Snapshot [Last in Period]:

SELECT MAX(SnapshotId) BY ALL IN ALL OTHER DIMENSIONS EXCEPT SnapshotDate WITHOUT PARENT FILTER

Centrémonos en la instrucción de excepción BY ALL IN ALL OTHER DIMENSIONS. El uso de este concepto permite calcular el total de MAX/MIN de SnapshotId al margen de la dimensión pero con la excepción del atributo específico. La excepción es un atributo tras la expresión EXCEPT. Así que el número resultante ya no será más una constante. Dependerá del valor de SnapshotDate. En decir, esta métrica devuelve el SnapshotId máximo para el período SnapshotDate.

Si dispone las métricas anteriores en un informe con la instantánea del trimestre, verá el primer y último ID de la instantánea que tenemos para cada trimestre. Vea el informe siguiente:

Así que el canal comercial al principio del período es:

Pipeline [First in Period]:

SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = Snapshot [First in Period]

Y el último y mayor número de canal comercial es:

Pipeline [Last in Period]:

SELECT SUM(Amount) WHERE Status = Open AND SnapshotId = Snapshot [Last in Period]

Disponga ahora estas dos métricas en un informe con la instantánea de trimestre y obtendrá el canal comercial al principio de cada trimestre y el último canal comercial conocido cada trimestre.

En función de sus necesidades, puede dividir o restar estas cifras para obtener crecimientos absolutos o relativos.