Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buen día comunidad!
Tengo que calcular la columna FECHA DE BAJA a partir de una fecha de cancelacion. Dependiendo del dia que una persona cancele su prestamo, se necesita saber que dia corresponderia darle de baja en el sistema.
Para ello se usa en excel la siguiente formula: adjunto excel.
SI(DIA(G3130)>DIA(D3130);SI(FIN.MES(D3130;0)=D3130;G3130;FECHA(AÑO(G3130);MES(G3130)+1;DIA(D3130)));SI(FIN.MES(D3130;0)=D3130;FECHA(AÑO(G3130);MES(G3130)+1;0);FECHA(AÑO(G3130);MES(G3130);DIA(D3130))))
G3130= CancellationDate
D3130 = TransDate
En Qlik la arme de la siguiente manera pero toda la columna me da -1.
=If (Day(CancellationDate) > Day (TransDate),If (MonthEnd (TransDate,0) = TransDate, CancellationDate, date (YEAR(CancellationDate) , MONTH ((CancellationDate)+1) and Day(TransDate))),
If (MonthEnd (TransDate,0)=TransDate, (YEAR(CancellationDate) and MONTH(CancellationDate +1) and Day(TransDate)
TransDate | CancellationDate | FECHA BAJA |
06/04/2021 | 1/11/2021 | 6/11/2021 |
01/09/2020 | 2/11/2021 | 1/12/2021 |
20/11/2020 | 2/11/2021 | 20/11/2021 |
05/03/2021 | 2/11/2021 | 5/11/2021 |
08/06/2020 | 3/11/2021 | 8/11/2021 |
05/04/2021 | 3/11/2021 | 5/11/2021 |
14/09/2020 | 4/11/2021 | 14/11/2021 |
22/10/2020 | 4/11/2021 | 22/11/2021 |
16/11/2020 | 5/11/2021 | 16/11/2021 |
17/05/2021 | 5/11/2021 | 17/11/2021 |
Hola, paso a paso:
SI(DIA(G3130)>DIA(D3130) -> =If (Day(CancellationDate) > Day (TransDate),
SI(FIN.MES(D3130;0)=D3130 -> If (Floor(MonthEnd (TransDate)) = TransDate
G3130 -> CancellationDate
FECHA(AÑO(G3130);MES(G3130)+1;DIA(D3130)) -> MakeDate(Year(CancellationDate), Month ((CancellationDate)+1), Day(TransDate))
SI(FIN.MES(D3130;0)=D3130 -> If (Floor(MonthEnd (TransDate))=TransDate
FECHA(AÑO(G3130);MES(G3130)+1;0) -> (MakeDate(Year(CancellationDate), Month ((CancellationDate)+1))-1)
FECHA(AÑO(G3130);MES(G3130);DIA(D3130)) -> MakeDate(Year(CancellationDate), Month ((CancellationDate)+1), Day(TransDate))
Así que, en resumen:
- MonthEnd devuelve el día de fin de mes a las 23:59:59, la pate de la hora puede provocar que no coincida la comparación, se usa floor pra quitar la hora (dejarla a las 00:00:00)
- La funcion MakeDate es la que se usa para crear fechas, pasando año (obligatorio), mes y día (opcional, si no se pasa lo pone a 1).
Hola, paso a paso:
SI(DIA(G3130)>DIA(D3130) -> =If (Day(CancellationDate) > Day (TransDate),
SI(FIN.MES(D3130;0)=D3130 -> If (Floor(MonthEnd (TransDate)) = TransDate
G3130 -> CancellationDate
FECHA(AÑO(G3130);MES(G3130)+1;DIA(D3130)) -> MakeDate(Year(CancellationDate), Month ((CancellationDate)+1), Day(TransDate))
SI(FIN.MES(D3130;0)=D3130 -> If (Floor(MonthEnd (TransDate))=TransDate
FECHA(AÑO(G3130);MES(G3130)+1;0) -> (MakeDate(Year(CancellationDate), Month ((CancellationDate)+1))-1)
FECHA(AÑO(G3130);MES(G3130);DIA(D3130)) -> MakeDate(Year(CancellationDate), Month ((CancellationDate)+1), Day(TransDate))
Así que, en resumen:
- MonthEnd devuelve el día de fin de mes a las 23:59:59, la pate de la hora puede provocar que no coincida la comparación, se usa floor pra quitar la hora (dejarla a las 00:00:00)
- La funcion MakeDate es la que se usa para crear fechas, pasando año (obligatorio), mes y día (opcional, si no se pasa lo pone a 1).
Mil gracias Ruben, excelente tu explicacion. Me funciono perfecto.