Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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
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:
Como veis se pasa de los datos de termination, llegando a pasar el dia seleccionado
Saludos y muchas gracias
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?
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.
Luego tambien por ejemplo creo este rango para sumar y me sigue saliendo 17 que son los datos de todo el año
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
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
Saludos y muchas gracias
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.
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
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.
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
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()
)
)