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