Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
ShirSandoval
Creator
Creator

CIERRE DE MES

Buenas tardes,

EL cierre de mes en la empresa donde trabajo son los 25 de cada mes. Estoy mostrando las ventas de cada mes pero muestro el mes completo. 

He intentado con algunos calendarios maestros pero no me funciona.

Como podría hacer para que por ejemplo si seleccionas:

Junio 2020 sea = 26/05/2020 al 25/06/2020.

Julio 2020 sea = 26/06/2020 al 25/07/2020.

Labels (3)
2 Solutions

Accepted Solutions
ArnadoSandoval
Specialist II
Specialist II

Hola @ShirSandoval 

Quizas te falta un poco de practica con calendarios; simule el problema que tienes con un archivo de ventas con datos para los años: 2012, 2013 y mediados del 2014; el archivo contiene informacion transaccional, lo cual me ayuda en ilustrar el procedimientos; aqui la informacion general de los archivos que tengo:

  • Archivo de Ventas: Sales.qvd con las siguientes columnas importantes: [Invoice Date]; Sales Qty y Sales; lo cual es suficiente:
  • Luego creo un qvd Calendario (Calendar.Qvd), con 3 columnas:  Record (un numero sequencial, podrian interpretarse como una fecha juliana, pero es irrelevante para este problema); [Invoice Date] esta columna de fecha es similar a la columna de fecha del QVD de ventas (Sales.qvd) porque quiero que el calendario sea automaticamente asociado con el archivo de ventas en esta columna; la tercera columna, la llame Sales_Date; que representa la fecha requeridad para el reporte; el script que genera este Calendario lo coloco a continuacion:
Calendar_Temp:     
Load 
     RowNo() As Record,
     Date(MakeDate(2011, 12, 31) + RowNo(), 'YYYY/MM/DD')     As [Invoice Date],
     MakeDate(2011, 12, 31) + 6 + RowNo() As Sales_Date
AutoGenerate (1200);

NoConcatenate

Calendar:
Load *,
	 Year(Sales_Date)     As Sales_Year,
     Month(Sales_Date)    As Sales_Month
Resident Calendar_Temp;

Drop Table Calendar_Temp;

El calendarion contiene 1200 records, comenzando el: 31.Dec.2011 + 1 (es decir: 01.Jan.2012) y se extiende por dos años y medio (esto es debido a que la data que encontre es por 2 años y medio, en tu caso sera algo diferente).

El Data Model de mi application:

Sales-Standard-Calendars.png

El Diagrama muestra que mis ventas fueron asociadas con el Calendario en la columna [Invoice Date], lo cual es perfecto; pero para efectos de reportes debo utilizar la columna Sales_Date, porque esta es la fecha que cumple con el requerimiento de tu reporte.

Anexo el QVF sin data, porque era demasiado grande, tambien agrego otra imagen que compara el sumario de ventas entre los dos calendarios; el de la izquierda muestra el calendario standard, mientras que a la derecha los resultados con el calendario especial.

Standard-Sales-Calendars-Summary.png

Por favor, si tienes dudas pregunta !!!

 

Arnaldo Sandoval
A journey of a thousand miles begins with a single step.

View solution in original post

ArnadoSandoval
Specialist II
Specialist II

@ShirSandoval 

Es bien simple, utiliza la siguiente expresion para determinar el numero de dias que se nececitan!

Let TargetDays = Today() - MakeDate(2011, 12, 31) + 1;

Ignoro si tu fecha inicial sigue siendo 13.Dec.2011, si la cambiastes ajusta la expresion para que emplee las fecha que utilizas, y luego, cambian el AutoGenerate de esta forma

AutoGenerate ($(TargetDays))

 Tambien puedes colocar la expresion directamente en el AutoGenerate()

AutoGenerate (Today() - MakeDate(2011, 12, 31) + 1)

Saludos,

Arnaldo Sandoval
A journey of a thousand miles begins with a single step.

View solution in original post

8 Replies
ArnadoSandoval
Specialist II
Specialist II

Hi @ShirSandoval 

Yo creo que seria mejor introducir un "Calendario basado en periodos" (No quiero escribir Calendario Financiero, pero es realmente el nombre con el cual se conocen). Cualquiera de los Calendarios Maestros que Usted tiene, pueden ser utilizados, asi que no tiene que preocuparse y el impacto en la solucion sera menor; basicamente introduzca una nueva columna, la cual puede llamar "Periodo", la cual contendra el mes actual cuando el dia sea menor o igual que 25, y el proximo mes cuando el dia sea mayor que 25; claro, tendra que ajustar esta formula cuando llegue al 26 de Diciembre, porque alli, el periodo se re-inicializar en 1 (Siempre y cuando los resultados de los dias finales del año correspondan al proximo año - para aclarar esta duda hable con las personas de Finanzas que ellos son especialistas en este tipo de calendarios y le podran informar a cual año corresponden los resultados de los ultimos dias del año.

Espero que ayude, y buena suerte. 

 

Arnaldo Sandoval
A journey of a thousand miles begins with a single step.
ShirSandoval
Creator
Creator
Author

Hola sorry he intentado lo que me dices  y no me funciona. Soy nueva en esto. @ArnadoSandoval 

ShirSandoval
Creator
Creator
Author

Shir2806_0-1595610659096.png

Esto es lo que tengo actualmente, pero no funciona ya que eso es mes calendario es decir en julio debo incluir las ventas de 26/06 en adelante. 

ArnadoSandoval
Specialist II
Specialist II

Hola @ShirSandoval 

Quizas te falta un poco de practica con calendarios; simule el problema que tienes con un archivo de ventas con datos para los años: 2012, 2013 y mediados del 2014; el archivo contiene informacion transaccional, lo cual me ayuda en ilustrar el procedimientos; aqui la informacion general de los archivos que tengo:

  • Archivo de Ventas: Sales.qvd con las siguientes columnas importantes: [Invoice Date]; Sales Qty y Sales; lo cual es suficiente:
  • Luego creo un qvd Calendario (Calendar.Qvd), con 3 columnas:  Record (un numero sequencial, podrian interpretarse como una fecha juliana, pero es irrelevante para este problema); [Invoice Date] esta columna de fecha es similar a la columna de fecha del QVD de ventas (Sales.qvd) porque quiero que el calendario sea automaticamente asociado con el archivo de ventas en esta columna; la tercera columna, la llame Sales_Date; que representa la fecha requeridad para el reporte; el script que genera este Calendario lo coloco a continuacion:
Calendar_Temp:     
Load 
     RowNo() As Record,
     Date(MakeDate(2011, 12, 31) + RowNo(), 'YYYY/MM/DD')     As [Invoice Date],
     MakeDate(2011, 12, 31) + 6 + RowNo() As Sales_Date
AutoGenerate (1200);

NoConcatenate

Calendar:
Load *,
	 Year(Sales_Date)     As Sales_Year,
     Month(Sales_Date)    As Sales_Month
Resident Calendar_Temp;

Drop Table Calendar_Temp;

El calendarion contiene 1200 records, comenzando el: 31.Dec.2011 + 1 (es decir: 01.Jan.2012) y se extiende por dos años y medio (esto es debido a que la data que encontre es por 2 años y medio, en tu caso sera algo diferente).

El Data Model de mi application:

Sales-Standard-Calendars.png

El Diagrama muestra que mis ventas fueron asociadas con el Calendario en la columna [Invoice Date], lo cual es perfecto; pero para efectos de reportes debo utilizar la columna Sales_Date, porque esta es la fecha que cumple con el requerimiento de tu reporte.

Anexo el QVF sin data, porque era demasiado grande, tambien agrego otra imagen que compara el sumario de ventas entre los dos calendarios; el de la izquierda muestra el calendario standard, mientras que a la derecha los resultados con el calendario especial.

Standard-Sales-Calendars-Summary.png

Por favor, si tienes dudas pregunta !!!

 

Arnaldo Sandoval
A journey of a thousand miles begins with a single step.
ShirSandoval
Creator
Creator
Author

@ArnadoSandoval excelente todo funciono como me lo explicas. De hecho las ventas de hoy ya me figuran como Agosto

mil gracias por tu tiempo y dedicación.

Shir2806_0-1595892423082.png

 

 

ShirSandoval
Creator
Creator
Author

@ArnadoSandoval una consulta mas:

con el AutoGenerate (7000); me crea la cantidad de registros que le estoy indicando obvio, pero como puedo modificarlo para que genere hasta el día de hoy y todos los días se actualice, es decir que muestre la fecha máxima que hay en mi base de datos?

Gracias.

ShirSandoval_1-1595957351440.png

 

 

ArnadoSandoval
Specialist II
Specialist II

@ShirSandoval 

Es bien simple, utiliza la siguiente expresion para determinar el numero de dias que se nececitan!

Let TargetDays = Today() - MakeDate(2011, 12, 31) + 1;

Ignoro si tu fecha inicial sigue siendo 13.Dec.2011, si la cambiastes ajusta la expresion para que emplee las fecha que utilizas, y luego, cambian el AutoGenerate de esta forma

AutoGenerate ($(TargetDays))

 Tambien puedes colocar la expresion directamente en el AutoGenerate()

AutoGenerate (Today() - MakeDate(2011, 12, 31) + 1)

Saludos,

Arnaldo Sandoval
A journey of a thousand miles begins with a single step.
ShirSandoval
Creator
Creator
Author

Perfecto! Gracias una vez mas.