domingo, 18 de noviembre de 2018

► Variables con fechas (YTD, MTD, AñoAnterior…. Etc)


Lo primero que debemos hacer es crear un campo llamado Periodo asociado a cada fecha. Este campo tiene el formato YYYYMM y se puede crear con la fórmula (Año*100 + Mes).

Para los ejemplos vamos a tomar como “fecha actual” la mayor de todas las seleccionadas (en caso de que se puedan seleccionar varios meses). 

Partimos de que tenemos un calendario maestro con los campos Año, Mes y Día

Las expresiones a utilizar son del tipo:

SUM ({<Año=,Mes=, Día=, Periodo={">=$(vL.InicioAño) <=$(vL.PeriodoActual)"}>} Campo_A_Sumar)  //esto calcula el acumulado YTD

=SUM({<Año={"<=$(vL.AñoActual) >=$(=$(vL.AñoActual)-1)"}, Mes={"$(=$(vL.MesActual))"} >} Campo_A_Sumar//Calcula el acumulado YTD también pero de este año y de los mismos meses del año anterior. Del año anterior sólo toma los mismos meses que hayan transcurrido del año actual.


Type
Variable Name
Value
Comment
SET
vL.AñoActual
=Max(Año)
Año Actual
SET
vL.AñoAnterior
=Max(Año)-1
Año Anterior
SET
vL.InicioAño
=num(MAX(Año)&'0101')
Día de Inicio Año Actual
SET
vL.InicioAñoAnterior
=num((MAX(Año)-1)&'0101')
Día de Inicio año Anterior
SET
vL.MesActual
=num(Month(MAX([fecha_referencia])))
Mes actual en número. No es Max(Mes) porque el año más grande puede pertenecer al año anterior.

SET
vL.PeriodoActual
=MAX(Periodo)
El periodo actual es el mayor de los seleccionados
SET
vL.PeriodoAnterior
=IF(MAX(Mes)=1 , num((MAX(Año)-1)&'12')  ,  num(MAX(Periodo)-1))
AñoMes anterior al PeriodoActual
SET
vL.PeriodoAñoAnterior
=((MAX(Año)-1)*100) + MAX(Mes)
Mismo periodo que el actual pero del año anterior
SET
vL.InicioMes
=num(MAX(Periodo)&'01')
Día de inicio del PeriodoActual
SET
vL.InicioMesAnterior
=IF(MAX(Mes)=1 , num((MAX(Año)-1)&'1201')  ,  num(MAX(Periodo)-1&'01'))
Día de inicio del periodo anterior a PeriodoActual
SET
vL.TrimAnterior
=if(MAX(Mes)>3, (MAX(Año)*100)+num((MAX(Mes)-3),'00'), (MAX(Año)-1)&pick(MAX(Mes),'10','11','12'))
3 periodos antes al PeriodoActual
SET
vL.DiaMesActual
=MAX(PeriodoDia)
Día mayor de los seleccionados. Formato YYYYMMDD
SET
vL.DiaMesAnterior
=If(MAX(PeriodoDia)=text(date(monthend(date#(MAX(PeriodoDia),'YYYYMMDD')),'YYYYMMDD')),
text(date(monthend(date#(IF(MAX(Mes)=1 , num((MAX(Año)-1)&'1201')  ,  num(MAX(Periodo)-1)&'01'),'YYYYMMDD')),'YYYYMMDD')),
IF(MAX(Mes)=1 , num((MAX(Año)-1)&'12'&num(MAX(Día),'00'))  ,  num(MAX(Periodo)-1)&num(MAX(Día),'00'))
 )
Mismo día del mes anterior. Si el día actual es el último del mes, se calcula el último día del mes anterior. Este mes puede tener 31 días y el anterior 28, 29 ó 30
SET
vL.DiaAñoAnterior
=((MAX(Año)-1)*10000) + (MAX(Mes)*100) + num(MAX(Día),'00')
Mismo día del Año anterior. Puede haber un problema con el 29 de Febrero.
SET
vL.MesesTranscurridos
floor((MonthStart("Fecha Reciente") - monthStart("Fecha Antigua"))/30)
Meses transcurridos entre dos fechas.

No hay comentarios:

Publicar un comentario