Skip to main content
Announcements
NEW Customer Portal: Initial launch will improve how you submit Support Cases. FIND OUT MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
santimatiz
Contributor II
Contributor II

Comparativo de ventas día a día vs mes anterior

Compañeros les envio un cordial saludo

Necesito realizar un gráfico en donde se compare las ventas el mes actual con las ventas del mes anterior, teniendo en cuenta que se debe comparar cada dia por igual, es decir lunes con lunes y martes con martes etc. y Esto es por que se quiere comparar las ventas con días que tienen comportamientos iguales

Esta es la gráfica realizada en excel de como deberia ser:

En un comienzo se me ocurrio crear una dimensión con el nombre del día de la semana , pero me quede ahí.....

Alguien tiene alguna idea?

Quedo gratamente agredecido con ideas.

Att

Santiago Matiz

1 Solution

Accepted Solutions
santimatiz
Contributor II
Contributor II
Author

Muchas gracias a todos !

La propuesta de Joaquin es lógica , quede con la duda de enero y la presentación de la dimensión.

Finalmente lo resolví agregando en la recarga el mes anterior y el año anterior de acuerdo a una hoja de excel con las correspondencias de días (lunes con lunes....) :

equivalencias_f:

LOAD dia_mes,

     fecha1,

     fecha2,

     fecha3

FROM

[ventas_doc\equivalencias_fecha.xlsx]

(ooxml, embedded labels, table is Hoja1);

Ejemplo del archivo de excel:

dia_mesfecha1dia1dia_mes2fecha2dia2fecha3dia2
101/01/2014miercoles404/12/2013miércoles02/01/2013miércoles
202/01/2014jueves505/12/2013jueves03/01/2013jueves
303/01/2014viernes606/12/2013viernes04/01/2013viernes
404/01/2014sábado707/12/2013sábado05/01/2013sábado
505/01/2014domingo808/12/2013domingo06/01/2013domingo

Utilice la función FieldValue para buscar de la tabla correspondencias de fechas:

let vfecha1=date(Date#(FieldValue('fecha1',1),'DD/MM/YYYY')); // fecha mes anterior

let vfecha3=date(Date#(FieldValue('fecha3',1),'DD/MM/YYYY')); // fecha año anterior

  let vi = 1;

    DO WHILE isnull(vfecha1)=0

          hechos2:

          LOAD

            Cventas as Cventas_ano_ant

            ,'$(vfecha1)' as fecha

            ,codTienda

            ,tip_nombre

             FROM  'qvds_ventas_diarias/hechos0.qvd' (qvd)

          WHERE

            fecha = '$(vfecha3)';

        

          LET vi=vi + 1;

        

          let vfecha1=date(Date#(FieldValue('fecha1',vi),'DD/MM/YYYY')); // Primer valor

             let vfecha3=date(Date#(FieldValue('fecha3',vi),'DD/MM/YYYY')); // Primer valor

    LOOP

View solution in original post

9 Replies
jolivares
Specialist
Specialist

Entiendo que aqui tu debes asignar un numero de dia creado por ti para poder comprar un mes contra el otro.

En este caso si queremos comparar los meses de marzo y abril de 2014, marzo inicio un sabado y abril un martes, segun lo que veo quieres que se compare entonces el 1/mar/2014 con 5/abr/2014... si es asi debes asignar un dia para iniciar la comparacion.

santimatiz
Contributor II
Contributor II
Author

Juan efectivamente esa es la idea

Creé una tabla de excel con las fechas equivalentes (equivalencias) :

01/04/2014martes04/03/2014martes
02/04/2014miércoles05/03/2014miércoles
03/04/2014jueves06/03/2014jueves
04/04/2014viernes07/03/2014viernes
05/04/2014sábado08/03/2014sábado
06/04/2014domingo09/03/2014domingo
07/04/2014lunes10/03/2014lunes
08/04/2014martes11/03/2014martes
09/04/2014miércoles12/03/2014miércoles
10/04/2014jueves13/03/2014jueves
11/04/2014viernes14/03/2014viernes
12/04/2014sábado15/03/2014sábado

Ahora al hacer la expresión del més anterior :

=sum({$< fecha = P(fecha2) , tip_nombre={'1.HC'}, Año={2014}  >} vd_valor_neto_C+vd_valor_neto_R)

No me dá

Ayuda please!!!!

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Santiago:

Analiza esta propuesta a ver que te parece:

Añade en tu calendario el campo Num(Fecha) as FechaOrdinal.

La fecha del mes anterior, Fecha2 = FechaOrdinal - 28 (4 semanas + 7 días) ... si tus meses son de 5 semanas - 35

Para el año anterior 7 x 52 o 53 ... tu decides cuantas semanas tiene tu año.

Te adjunto dos documentos de HIC sobre la gestión de semanas / fechas en QV

Espero que te sirva de ayuda.

Joaquín

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Santiago:

Mira estas funciones en la ayuda

Week

WeekDay

WeekYear

WeekEnd

WeekStart

Te ayudarán a enlazar las fechas por semanas completas.

Saludos

Joaquín

male_carrasco
Creator
Creator

Hola!!

Puedes utilizar set analisys:

Ejemplos:

Año corriente

Sum({$<Año={$(=Max(Año))}>}Sales)

Año anterior

Sum({$<Año={$(=Max(Año)-1)}>}sales)

Selecionando un mes puedes calcular 12 meses para atras.

sum({$<Año = {$(=max(Año) - 1)}, Mes= {"<=$(=max({<Año={$(=max(Año))}>} Mes))>$(=max({<Año={$(=max(Año))}>} Mes)-1)"}>} Sales)

Puede hacer algo similar para meses

Revisa el link:

Tiene varios tips.

http://community.qlik.com/blogs/qlikviewdesignblog/2014/03/03/ytd

Espero te sea de ayuda.

Slds,

Ale

santimatiz
Contributor II
Contributor II
Author

Juaquin muchas gracias,

Como podría crear el mes anterior dado caso creo la dimensión como la FechaOrdinal

Mes Anterior:

=sum({1< tip_nombre={'1.HC'}, Año={2014},FechaOrdinal={"=$(FechaOrdinal-28)"} >} vd_valor_neto_C+vd_valor_neto_R)

Como se podría hacer algo parecido?

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Te contesto el lunes ... el camino a seguir es el que has empezado, pero cuidado con la mezcla de SET ANALYSIS que puede fallar en enero!!!

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Santiago:

No puedo probarlo, pero el -28 lo sacaría fuera del paréntesis y el tema del año se puede complicar cuando selecciones enero ... el -28 te llevará a diciembre del año anterior.

Usando la propuesta de Alejandra: Sum({$<Año={$(=Max(Año)-1)}>}sales)

Mes Anterior:

=sum({1< tip_nombre={'1.HC'}, Año={$(>=Max(Año)-1)}, FechaOrdinal={"=$(FechaOrdinal)-28"} >} vd_valor_neto_C+vd_valor_neto_R)

Espero que sea suficiente.

Saludos

Joaquín

santimatiz
Contributor II
Contributor II
Author

Muchas gracias a todos !

La propuesta de Joaquin es lógica , quede con la duda de enero y la presentación de la dimensión.

Finalmente lo resolví agregando en la recarga el mes anterior y el año anterior de acuerdo a una hoja de excel con las correspondencias de días (lunes con lunes....) :

equivalencias_f:

LOAD dia_mes,

     fecha1,

     fecha2,

     fecha3

FROM

[ventas_doc\equivalencias_fecha.xlsx]

(ooxml, embedded labels, table is Hoja1);

Ejemplo del archivo de excel:

dia_mesfecha1dia1dia_mes2fecha2dia2fecha3dia2
101/01/2014miercoles404/12/2013miércoles02/01/2013miércoles
202/01/2014jueves505/12/2013jueves03/01/2013jueves
303/01/2014viernes606/12/2013viernes04/01/2013viernes
404/01/2014sábado707/12/2013sábado05/01/2013sábado
505/01/2014domingo808/12/2013domingo06/01/2013domingo

Utilice la función FieldValue para buscar de la tabla correspondencias de fechas:

let vfecha1=date(Date#(FieldValue('fecha1',1),'DD/MM/YYYY')); // fecha mes anterior

let vfecha3=date(Date#(FieldValue('fecha3',1),'DD/MM/YYYY')); // fecha año anterior

  let vi = 1;

    DO WHILE isnull(vfecha1)=0

          hechos2:

          LOAD

            Cventas as Cventas_ano_ant

            ,'$(vfecha1)' as fecha

            ,codTienda

            ,tip_nombre

             FROM  'qvds_ventas_diarias/hechos0.qvd' (qvd)

          WHERE

            fecha = '$(vfecha3)';

        

          LET vi=vi + 1;

        

          let vfecha1=date(Date#(FieldValue('fecha1',vi),'DD/MM/YYYY')); // Primer valor

             let vfecha3=date(Date#(FieldValue('fecha3',vi),'DD/MM/YYYY')); // Primer valor

    LOOP