Skip to main content
Announcements
Happy New Year! Cheers to another year of collaboration, connections and success.
cancel
Showing results for 
Search instead for 
Did you mean: 
migueldfr_23
Contributor III
Contributor III

Conseguir datos del primer dia de año hasta el dia filtrado

Buenas a todos,

Estoy intentando averiguar el codigo para conseguir el numero de repeticiones que hay para un valor desde el primer dia del año hasta el dia filtrado 

migueldfr_23_0-1734010800397.png


He utilizado este codigo 

Esto es para el dia seleccionado hasta final de año actual:

RangeSum(
    Above(
        Count(
            DISTINCT 
            {< 
                CanonicalDate = {">=$(=Only({[Canonical Date 1]} CanonicalDate)) <=$(=MakeDate(Year(Only({[Canonical Date 1]} CanonicalDate)), 12, 31))"},
                datetypeyear = {'leftyear'}
            >} 
            person_id
        ),
        0, RowNo()
    )
)

 Resultado 

migueldfr_23_1-1734010828229.png

 

Esto es desde el primer dia del año hasta la fecha seleccionada:

RangeSum(
    Above(
        Count(
            DISTINCT 
            {< 
                CanonicalDate = {">=$(=MakeDate(Year(Only({[Canonical Date 1]} CanonicalDate)), 1, 1)) <= $(=Only({[Canonical Date 1]} CanonicalDate))"},
                datetypeyear = {'leftyear'}
            >} 
            person_id
        ),
        0, RowNo()
    )
)

 

Este es el resultado: 

migueldfr_23_2-1734010894578.png

Como veis se pasa de los datos de termination, llegando a pasar el dia seleccionado 

 

 

Saludos y muchas gracias

 

 

9 Replies
rubenmarin

Hola, Podría tener que ver con el modelo de datos, habría que ver la relación entre CanonicalDate y termination_date ¿Si creas una tabla con canonicalDate y termiantion_date ¿seleccionado 10/10/2024 en canonicalDate te deja accesibles fechas superiores de termination_date?

migueldfr_23
Contributor III
Contributor III
Author

Buenos dias @rubenmarin

Si, mira esta es la lógica que he realizado para conseguir eso.



 

// Crear el mapeo para las fechas de entrada (start_date)
person_id2start_date:
MAPPING LOAD
    person_id,
    start_date
RESIDENT hcm_workers;

// Crear el mapeo para las fechas de salida (termination_date)
person_id2termination_date:
MAPPING LOAD
    person_id,
    termination_date
RESIDENT hcm_workers;

SET vSelectedDate = If(IsNull(GetFieldSelections(CanonicalDate)), Today(), Max(CanonicalDate));

DateBridge:
LOAD
    person_id & '-' & full_name as Key_person_id_full_name,
    Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalDate,
    Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalDate1st,
    Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalDate2nd,
    Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalYear,
    Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalMonth,
    MonthName(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalMonthName,
    Ceil(Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) / 3) as CanonicalQuarter, // Calcula el trimestre
    'Q' & Ceil(Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) / 3) & ' ' & Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalQuarterName, // Formato "Q1 2024",
        // Flags
    If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(Today()), 1, 0) as IsCurrentYear, // Año actual
    If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(AddYears(Today(), -1)), 1, 0) as IsPreviousYear, // Hace un año
    If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(Today()) 
        AND Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Month(Today()), 1, 0) as IsCurrentMonth, // Mes actual
    If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(AddYears(Today(), -1)) 
        AND Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Month(AddYears(Today(), -1)), 1, 0) as IsPreviousMonth, // Mismo mes hace un año
    If(Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Today() - 1, 1, 0) as IsPreviousDay, // Día anterior a hoy
    If(Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = AddYears(Today(), -1) - 1, 1, 0) as IsPreviousDayLastYear, // Día anterior hace un año

	
    // Día (hiredday o leftday)
    If(
        ApplyMap('person_id2start_date', person_id) + IterNo() - 1 = ApplyMap('person_id2start_date', person_id),
        'hiredday',
        If(
            Not IsNull(ApplyMap('person_id2termination_date', person_id))  // Verifica que no sea null
            AND ApplyMap('person_id2termination_date', person_id) < Today() // Verifica que la fecha de salida sea antes de hoy
            AND Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = ApplyMap('person_id2termination_date', person_id),
            'leftday',
            '-'
        )
    ) as datetypedia,

	// Año (hiredyear o leftyear)
    If(
        Year(ApplyMap('person_id2termination_date', person_id)) = Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1)
        AND ApplyMap('person_id2termination_date', person_id) < Today()-1,
        'leftyear',
        If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(ApplyMap('person_id2start_date', person_id)),
            'hiredyear',
            '-'
        )
		) as datetypeyear,
    If(
        // Lógica para hiredmonth
        Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(ApplyMap('person_id2start_date', person_id)) // Comprueba el año
        AND Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Month(ApplyMap('person_id2start_date', person_id)) // Comprueba el mes
        AND Day(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) >= Day(ApplyMap('person_id2start_date', person_id)), // Asegura que sea después del día de inicio
        'hiredmonth',

        // Lógica para leftmonth
        If(
            Month(ApplyMap('person_id2termination_date', person_id)) = Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1)
            AND ApplyMap('person_id2termination_date', person_id) < Today()-1
            AND YEAR(ApplyMap('person_id2termination_date', person_id)) = YEAR(ApplyMap('person_id2start_date', person_id) + IterNo() - 1),
            'leftmonth',
            '-' // Si no es ninguno de los dos, devuelve '-'
        )
    ) as datetypemonth,
    
    If(
        Year(ApplyMap('person_id2termination_date', person_id)) = Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1)
        AND ApplyMap('person_id2termination_date', person_id) < Today()-1,
        'inactive',
        //If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(ApplyMap('person_id2start_date', person_id)),
        'active'
    ) as DateType,

    'qlik'




RESIDENT hcm_workers
WHILE ApplyMap('person_id2start_date', person_id) + IterNo() - 1 <= Today()
AND ApplyMap('person_id2start_date', person_id) + IterNo() - 1 <= ApplyMap('person_id2termination_date', person_id, Today());

 


Y luego cuando hago una tabla no me muestra datos de dia anteriores a la fecha filtra, si no que todo el año para datos de DateType inactive. Y si, me deja accesibles fechas antes y despues del 10/10/2024, eso puede estar causando el fallo.

 

migueldfr_23_0-1734340616122.png

 




 

migueldfr_23
Contributor III
Contributor III
Author

Luego tambien por ejemplo creo este rango para sumar y me sigue saliendo 17 que son los datos de todo el año 

migueldfr_23_1-1734340677627.png

 

migueldfr_23
Contributor III
Contributor III
Author

Buenos dias @rubenmarin 

Creo que se ha borrado el mensaje que he puesto.

Esta es la logica del script de carga 

// Crear el mapeo para las fechas de entrada (start_date)
person_id2start_date:
MAPPING LOAD
    person_id,
    start_date
RESIDENT hcm_workers;

// Crear el mapeo para las fechas de salida (termination_date)
person_id2termination_date:
MAPPING LOAD
    person_id,
    termination_date
RESIDENT hcm_workers;

SET vSelectedDate = If(IsNull(GetFieldSelections(CanonicalDate)), Today(), Max(CanonicalDate));

DateBridge:
LOAD
    person_id & '-' & full_name as Key_person_id_full_name,
    Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalDate,
    Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalDate1st,
    Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalDate2nd,
    Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalYear,
    Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalMonth,
    MonthName(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalMonthName,
    Ceil(Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) / 3) as CanonicalQuarter, // Calcula el trimestre
    'Q' & Ceil(Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) / 3) & ' ' & Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) as CanonicalQuarterName, // Formato "Q1 2024",
        // Flags
    If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(Today()), 1, 0) as IsCurrentYear, // Año actual
    If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(AddYears(Today(), -1)), 1, 0) as IsPreviousYear, // Hace un año
    If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(Today()) 
        AND Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Month(Today()), 1, 0) as IsCurrentMonth, // Mes actual
    If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(AddYears(Today(), -1)) 
        AND Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Month(AddYears(Today(), -1)), 1, 0) as IsPreviousMonth, // Mismo mes hace un año
    If(Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Today() - 1, 1, 0) as IsPreviousDay, // Día anterior a hoy
    If(Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = AddYears(Today(), -1) - 1, 1, 0) as IsPreviousDayLastYear, // Día anterior hace un año

	
    // Día (hiredday o leftday)
    If(
        ApplyMap('person_id2start_date', person_id) + IterNo() - 1 = ApplyMap('person_id2start_date', person_id),
        'hiredday',
        If(
            Not IsNull(ApplyMap('person_id2termination_date', person_id))  // Verifica que no sea null
            AND ApplyMap('person_id2termination_date', person_id) < Today() // Verifica que la fecha de salida sea antes de hoy
            AND Date(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = ApplyMap('person_id2termination_date', person_id),
            'leftday',
            '-'
        )
    ) as datetypedia,

	// Año (hiredyear o leftyear)
    If(
        Year(ApplyMap('person_id2termination_date', person_id)) = Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1)
        AND ApplyMap('person_id2termination_date', person_id) < Today()-1,
        'leftyear',
        If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(ApplyMap('person_id2start_date', person_id)),
            'hiredyear',
            '-'
        )
		) as datetypeyear,
    If(
        // Lógica para hiredmonth
        Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(ApplyMap('person_id2start_date', person_id)) // Comprueba el año
        AND Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Month(ApplyMap('person_id2start_date', person_id)) // Comprueba el mes
        AND Day(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) >= Day(ApplyMap('person_id2start_date', person_id)), // Asegura que sea después del día de inicio
        'hiredmonth',

        // Lógica para leftmonth
        If(
            Month(ApplyMap('person_id2termination_date', person_id)) = Month(ApplyMap('person_id2start_date', person_id) + IterNo() - 1)
            AND ApplyMap('person_id2termination_date', person_id) < Today()-1
            AND YEAR(ApplyMap('person_id2termination_date', person_id)) = YEAR(ApplyMap('person_id2start_date', person_id) + IterNo() - 1),
            'leftmonth',
            '-' // Si no es ninguno de los dos, devuelve '-'
        )
    ) as datetypemonth,
    
    If(
        Year(ApplyMap('person_id2termination_date', person_id)) = Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1)
        AND ApplyMap('person_id2termination_date', person_id) < Today()-1,
        'inactive',
        //If(Year(ApplyMap('person_id2start_date', person_id) + IterNo() - 1) = Year(ApplyMap('person_id2start_date', person_id)),
        'active'
    ) as DateType,

    'qlik'




RESIDENT hcm_workers
WHILE ApplyMap('person_id2start_date', person_id) + IterNo() - 1 <= Today()
AND ApplyMap('person_id2start_date', person_id) + IterNo() - 1 <= ApplyMap('person_id2termination_date', person_id, Today());

 
Aqui genero una tabla con las tres medidas distintas, me faltaria desde el primero del mes hasta el dia filtrado 

migueldfr_23_0-1734346254153.png


Y si, contestando a tu pregunta todavía siguen saliendo valores de antes y despues del dia filtrado.

Para mas informacion, me esta filtrando bien los dias, por lo que a lo mejor es alguna lógica que no esta bien planteada en en la carga

migueldfr_23_1-1734346330581.png

Saludos y muchas gracias

rubenmarin

Hola, me va a costar verlo sin tener una app de ejemplo con la que poder probar, pero si en la tabla ya te muestra termination_date superior a la canonical_date, te va a mostrar esas fechas superiores, ya que en la expresión no estás limitando los valores de termination_date.

Me falto indicar que para hacer la prueba habría que hacer la selección de leftday en datetypedia.

Quizás a la expresión le falta otro set analysis para limitar los valores de termination_date.

migueldfr_23
Contributor III
Contributor III
Author

Buenas tardes Ruben ,

Si, muy buen acercamiento el de añadir mas set analysis a mi expresion, De hecho lo he añadido aqui pero me sigue dando todo el año en si.

Count(
    {<
        datetypedia = {'leftday'},
        CanonicalDate = {">=$(=MakeDate(Year(Max(CanonicalDate)), 1, 1)) <= $(=Only({[Canonical Date 1]} CanonicalDate))"},
        termination_date = {">=$(=MakeDate(Year(Max(CanonicalDate)), 1, 1)) <= $(=Only({[Canonical Date 1]} CanonicalDate))"}
    >} 
     distinct person_id
)


Si, por supuesto puedo compartir contigo una pieza del código ( obviando datos criticos)  para que se pueda probar, dime que necesitas, que tipo de archivo, porque todo esto viene de AWS.

Muchas gracias

rubenmarin

Buenas, con un qvf que tenga los campos usados en la expresión sería suficiente, un modelo reducido donde siga ocurriendo lo que indicas, solo será necesario los datos donde se pueda ver que te salen fechas de más para poder analizar de donde vienen.

Por probar, podrías confirmar en el editor de expresiones que los campos están devolviendo el valor esperado.

migueldfr_23
Contributor III
Contributor III
Author

Buenas te dejo aquí el qvf para que puedas probar, te he dejado todos los campos que utilizo y las tablas con la indicación de cada columna ( de lo que hace)

Te agradezco cualquier ayuda

rubenmarin

Pues al final aprece que es solo por el espacio que hay después del <= en el set analysis.

¿Puedes probar si así da el valor que esperas?:

RangeSum(
    Above(
        Count(
            DISTINCT 
            {< 
                CanonicalDate = {">=$(=MakeDate(Year(Only({[Canonical Date 1]} CanonicalDate)), 1, 1))<=$(=Only({[Canonical Date 1]} CanonicalDate))"},
                datetypedia = {'leftday'}
            >} 
            person_id
        ),
        0, RowNo()
    )
)