Hacer un Rolling 12 (o 13) que afecte a todo el modelo de datos

En este post voy a describir uno de los modos para generar reportes del tipo R12 (Rolling 12), es decir de los últimos 12 meses o mejor aún últimos 13 para poder comparar los extremos.

Si uno realiza una búsqueda con Google sobre como generar un R12 en QV se va a encontrar con muchas preguntas y ejemplos basados en el uso de funciones de fechas del tipo “MonthStart”, “MonthEnd” y otras similares, pero en general lo que se explica es como generar 1 (un) gráfico R12. Pero aquí  voy a mostrar como generar un CALENDARIO R12 (o Rxx) lo que permitirá que cuando el usuario seleccione una fecha dada, internamente se seleccionarán todas las filas correspondientes a los últimos 12 meses sobre TODO el modelo, y no solo para un gráfico o una tabla en particular.

Para que se entienda claramente la historia  de usuario (requerimiento) podría ser algo como: “… quiero seleccionar un (y solo 1) periodo (mes-año) y que todos los gráficos y tablas del tablero muestren desde ese mes hacia atrás 13 meses y no quiero tener que seleccionar (pintar) los 12 meses manualmente”.

Desde luego un tablero de este tipo va a tener un calendario que segmenta el resto del modelo y lo que vamos a hacer es aprovechar ese calendario para lograr el efecto deseado.

En un típico calendario cuando un usuario clickea sobre un mes y año QV selecciona los valores posibles que corresponden con dicho periodo. Lo que nosotros buscamos es que cuando el usuario seleccione un periodo QV seleccione como valores posibles los 12 periodos previos.

Para lograr esto vamos a crear un calendario “intermedio” donde cada periodo se repita 12 veces para contener los 12 meses previos. Por ejemplo:

 

Y lo vamos a “insertar” en el modelo de este modo:

insert_in_Model2 

De este modo cuando el usuario seleccione R12_Period=”Dic/2013” quedarán seleccionados como valores posibles los 12 (o 13) meses previos en el campo Period que es el que linkea con el calendario y éste con el resto del modelo.

A continuación la pantalla del tablero y el script:

dashboard
Sales:
Load * inline [
Period, Sales
01/01/2011, 4000
01/02/2011, 3500
01/03/2011, 6000
01/04/2011, 6000
01/05/2011, 6500
01/06/2011, 4000
01/07/2011, 4500
01/08/2011, 5500
01/09/2011, 5000
01/10/2011, 8000
01/11/2011, 8500
01/12/2011, 9000
01/01/2012, 10000
01/02/2012, 10500
01/03/2012, 8000
01/04/2012, 7500
01/05/2012, 9000
01/06/2012, 9200
01/07/2012, 10000
01/08/2012, 12000
];

Comissions:
Load * inline [
Period, Wages
01/01/2011, 2000
01/02/2011, 2500
01/03/2011, 4000
01/04/2011, 1500
01/05/2011, 500
01/06/2011, 3000
01/07/2011, 3500
01/08/2011, 3500
01/09/2011, 2000
01/10/2011, 8000
01/11/2011, 8000
01/12/2011, 8000
01/01/2012, 11000
01/02/2012, 5000
01/03/2012, 7000
01/04/2012, 7000
01/05/2012, 7000
01/06/2012, 9000
01/07/2012, 9000
01/08/2012, 11000
];

MAX_MIN:
LOAD
 Min(Period) as First,
 Max(Period) as Last
Resident Sales;

Let V_StartPeriod = Peek(‘First’,0);
Let V_EndPeriod   = Peek(‘Last’,0);

Drop Table MAX_MIN;

Let V_Period_to_Select = num(V_StartPeriod);

DO WHILE V_Period_to_Select <= V_EndPeriod //generate all data’s periods

     Calendar_to_Select:
     LOAD
     $(V_Period_to_Select) as R12_Period
     AUTOGENERATE 1;
    
     LET V_Selected_Period = num(V_Period_to_Select);
// Generate 13 previous month for each one
     DO WHILE V_Selected_Period >= AddMonths(V_Period_to_Select,-12)
    
           Calendar_to_Link:
           LOAD
           $(V_Period_to_Select) as R12_Period,
           $(V_Selected_Period) as Period
           AUTOGENERATE 1;
           LET V_Selected_Period =  num(AddMonths(  V_Selected_Period, -1 ));  
          
     LOOP
    
    
     LET V_Period_to_Select =  num(AddMonths(  V_Period_to_Select, 1 ));
    
LOOP

Acerca de pparnisari
Casi 44 vueltas al sol. Licenciado en sistemas. Curioso, investigador, excelente para resolver problemas prácticos. Casado, 2 hijos, cada vez con mas preguntas y respuestas mas en duda. Almost 44 laps to the sun. System engineer. Curious, researcher, great for solving practical problems. Married, 2 children, each time with more questions and more answers in doubt.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: