Comparación de valores filtrados de forma dinámica en un informe

Cuando se trabaja con GoodData, los usuarios a menudo limitan los datos de los informes con un filtro de panel, con la idea de omitir determinadas categorías de datos e incluir otras en los cálculos de los informes.

Este artículo describe un escenario en el que desea permitir a los usuarios que comparen los valores de una métrica cuando se incluyen todas las categorías con sus valores y se excluyen otras categorías, y en el que el usuario desea usar un filtro de panel para controlar de forma dinámica las categorías filtradas en un determinado momento.

Imagine que desea comparar una métrica entre segmentos filtrados y específicos con el valor de todos los segmentos, y todo ello en un solo informe. Supongamos, por ejemplo, que desea visualizar la tendencia en un gráfico de líneas con una línea que represente el segmento seleccionado y otra para la base entera.

En este escenario, el usuario debe poder seleccionar el segmento de forma dinámica mediante un filtro de panel.

Puede realizar el seguimiento, por ejemplo, de la cantidad media diaria de clientes potenciales procedentes de varias campañas de marketing, lo que se traduce, de forma natural, en el siguiente modelo lógico de datos:

Solución n.º 1: WITHOUT PARENT FILTER

Los requisitos parece que impliquen la necesidad de usar dos métricas: el promedio diario de clientes potenciales (Avg Daily Leads) filtrable por el filtro Campaña y una métrica similar que no se pueda filtrar. Definiremos las dos métricas como se indica a continuación:

Average # Leads

SELECT AVG(# Leads)

Average # Leads (All Records)

SELECT AVG(# Leads) WITHOUT PARENT FILTER

La cláusula WITHOUT PARENT FILTER bloquea de manera eficaz la métrica de todos los filtros definidos en los paneles, informes o métricas externas. Soluciona nuestro problema pero tiene un efecto secundario no deseado: nuestro panel puede incluir otros filtros (generalmente, un filtro de fecha) que está previsto que afecten tanto la métrica ‘parcial’ como la ‘entera’: si opta por efectuar el filtro para el período de los últimos 30 días, significa que le interesa conocer la contribución de la campaña para todos los clientes potenciales creados durante los últimos 30 días en lugar de para todos los clientes potenciales.

Solución n.º 2: Variables

Hay tres tipos de desplegables de filtro que se pueden colocar en un panel de GoodData: filtros de atributo, filtros de fecha y filtros de variable. Lo más habitual es utilizar solo filtros de atributos y fechas, pero los filtros de variables pueden ser muy útiles en algunas situaciones específicas.

Las variables filtradas de GoodData son en realidad duplicados de otros atributos del proyecto que se filtraron previamente para un subconjunto de los valores de los atributos. Es decir, las variables filtradas son marcadores de posición para la expresión: “Attribute IN (Value1, Value2, …).”

GoodData admite también variables numéricas, pero no vienen al caso en este ejemplo. Pero también es posible crear una variable que sirva como un duplicado de algún atributo sin que filtre realmente ninguno de sus valores. En realidad, la configuración predeterminada no es para filtrar ningún valor.

Una vez que haya creado una variable filtrada, puede utilizarla para ayudar a definir informes (mediante filtros de variable) y métricas como se indica a continuación:

SELECT AVG(# Leads) WHERE Campaign_Variable

Tenga en cuenta que cuando Campaign_Variable se define de tal manera que no se filtra ningún valor de atributo, la métrica anterior calcula los mismos resultados que la métrica SELECT AVG(# Leads). Pero con un filtro de panel Campaign_Variable, los usuarios podrán volver a definir Campaign_Variable sobre la marcha, manipulando de forma efectiva la métrica variable mientras la métrica original no sufre ningún cambio.

Si bien las variables permiten cumplir con todos nuestros objetivos originales, tienen, como mínimo, una deficiencia. Mientras que los filtros de atributos del panel se pueden interconectar en relaciones primarias/secundarias en cascada, los filtros de variable no son compatibles con esta disposición. Si para su proyecto es una prioridad disponer los filtros del panel en cascada, quizá tenga que buscar otra solución.

Solución n.º 3: Conectar campañas indirectamente

La última solución parece haber sido diseñada por un científico loco (y lo fue). Pero en realidad, es una aplicación bastante inusual del filtrado cruzado del conjunto de datos con una inserción de filtro. Se basa en la idea de insertar un filtro (enlace) utilizando una submétrica COUNT que se basa en un conjunto de datos de asociación (también conocida como una tabla de hechos anónima) que conecta el conjunto de datos principal (Clientes potenciales diarios) y el atributo Campaña.

Significa que se requiere un cambio de modelo:

Como puede ver, Clientes potenciales diarios ya no hace referencia a Campaña. Esto significa que perdemos la ventaja de que las métricas Daily Leads se filtren automáticamente por un filtro de panel Campaña: este es el comportamiento previsto.

Nuestra métrica ‘parcial’ tiene el siguiente aspecto:

SELECT AVG(# Leads)
WHERE (SELECT COUNT(Campaign Daily Leads Association)
BY Daily Leads, ALL OTHER) > 0

El truco es que el filtro Campaña afecta a la submétrica COUNT, la parte BY Daily Leads, ALL OTHER garantizará que la submétrica COUNT se calcule para cada registro de Clientes potenciales diarios y que la condición ‘mayor que cero’ seleccione los registros de clientes potenciales diarios que estén conectados a la Campaña seleccionada mediante al menos un registro en la tabla de asociación.

Si prefiere mantener la Campaña disponible para los procesos habituales de segmentación y filtro en lugar de moverlos a un conjunto de datos asociado, podemos mantener el modelo como estaba y agregar un atributo duplicado que solo utilice el filtro del panel. En ese caso, el modelo de datos sería como se indica a continuación:

La definición de la métrica “parcial” será la misma.

Conclusión

Un panel que compara una selección basada en un filtro con un valor no filtrado (o incluso múltiples selecciones de filtro entre sí) se puede realizar fácilmente con variables ya que nos permiten aplicar la regla de filtrado directamente en una parte específica de una métrica en lugar de filtrar toda la métrica.

Puede conseguir los mismos resultados si conecta indirectamente el atributo de filtro al conjunto de datos principal mediante una tabla de asociación y si aplica el filtro a una submétrica COUNT.

Lo más habitual es agregar la cláusula WITHOUT PARENT FILTER a ‘toda’ la métrica. No es, sin embargo, una solución práctica puesto que elimina todos los filtros, incluidos los filtros de fecha que generalmente deseamos aplicar a ‘toda’ la métrica también.