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: 
ShirSandoval
Creator
Creator

CONSULTA IF

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

 

ShirSandoval_0-1640276934239.png

 

 

 

 

1 Solution

Accepted Solutions
rubenmarin

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).

View solution in original post

2 Replies
rubenmarin

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).

ShirSandoval
Creator
Creator
Author

Mil gracias Ruben, excelente tu explicacion. Me funciono perfecto.