The ultimate Fabric, Power BI, SQL, and AI community-led learning event. Save €200 with code FABCOMM.
Get registeredEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.
Hola.
Estoy tratando de crear una columna calculada en una tabla para dar un sí/no (o 1/0) para mostrar si la diferencia entre 2 campos de fecha / hora es < = 24 horas.
Necesito excluir los fines de semana y los días festivos: tengo una tabla de fecha diminuta con los fines de semana y los días festivos marcados.
Una jornada laboral es de 24 horas.
Tengo problemas para escribir el dax para hacer esto debido al elemento time.
Este es un ejemplo de campos y salidas:
¿Alguna idea sobre cómo calcular la columna 'En escala de tiempo'? Muchas gracias
Solved! Go to Solution.
Hola @Florie
¡Buena pregunta! Calcular una columna "dentro de la escala de tiempo" que excluya los fines de semana y los días festivos (mediante una tabla de fecha dim) es un desafío clásico de DAX. Este es un método paso a paso:
Tendrás que sumar las horas de los días laborables válidos entre [Inicio] y [Finalización], ignorando los fines de semana y los días festivos.
A continuación, se muestra un ejemplo de columna calculada de DAX para la tabla (llamémosla [En escala temporal]):
In Timescale = VAR StartDateTime = [Start] VAR EndDateTime = [Completion] VAR DatesBetween = FILTER ( 'DimDate', 'DimDate'[Date] >= DATEVALUE(StartDateTime) && 'DimDate'[Date] <= DATEVALUE(EndDateTime) && 'DimDate'[IsWeekend] = FALSE() && 'DimDate'[IsBankHoliday] = FALSE() ) VAR WorkingHours = SUMX ( DatesBetween, VAR ThisDate = 'DimDate'[Date] VAR StartHour = IF ( ThisDate = DATEVALUE(StartDateTime), HOUR(StartDateTime) + MINUTE(StartDateTime)/60, 0 ) VAR EndHour = IF ( ThisDate = DATEVALUE(EndDateTime), HOUR(EndDateTime) + MINUTE(EndDateTime)/60, 24 ) RETURN EndHour - StartHour ) RETURN IF(WorkingHours <= 24, "Yes (or 1)", "No (or 0)")
¡Hágame saber si necesita el DAX para un caso extremo específico o si tiene una definición de horario de trabajo diferente!
¡Gracias!
Hola @Florie
¡Buena pregunta! Calcular una columna "dentro de la escala de tiempo" que excluya los fines de semana y los días festivos (mediante una tabla de fecha dim) es un desafío clásico de DAX. Este es un método paso a paso:
Tendrás que sumar las horas de los días laborables válidos entre [Inicio] y [Finalización], ignorando los fines de semana y los días festivos.
A continuación, se muestra un ejemplo de columna calculada de DAX para la tabla (llamémosla [En escala temporal]):
In Timescale = VAR StartDateTime = [Start] VAR EndDateTime = [Completion] VAR DatesBetween = FILTER ( 'DimDate', 'DimDate'[Date] >= DATEVALUE(StartDateTime) && 'DimDate'[Date] <= DATEVALUE(EndDateTime) && 'DimDate'[IsWeekend] = FALSE() && 'DimDate'[IsBankHoliday] = FALSE() ) VAR WorkingHours = SUMX ( DatesBetween, VAR ThisDate = 'DimDate'[Date] VAR StartHour = IF ( ThisDate = DATEVALUE(StartDateTime), HOUR(StartDateTime) + MINUTE(StartDateTime)/60, 0 ) VAR EndHour = IF ( ThisDate = DATEVALUE(EndDateTime), HOUR(EndDateTime) + MINUTE(EndDateTime)/60, 24 ) RETURN EndHour - StartHour ) RETURN IF(WorkingHours <= 24, "Yes (or 1)", "No (or 0)")
¡Hágame saber si necesita el DAX para un caso extremo específico o si tiene una definición de horario de trabajo diferente!
@Florie Cree una columna calculada para determinar si la diferencia entre el inicio y la finalización se encuentra dentro de las 24 horas, excluyendo fines de semana y días festivos.
Dax
InTimescale =
VAR StartDateTime = 'TuMesa'[Inicio]
VAR CompletionDateTime = 'TuMesa'[Finalización]
VAR StartDate = DATE(YEAR(StartDateTime), MONTH(StartDateTime), DAY(StartDateTime))
VAR CompletionDate = DATE(YEAR(CompletionDateTime), MONTH(CompletionDateTime), DAY(CompletionDateTime))
Días laborables VAR =
CALCULAR(
COUNTROWS('DimDate'),
'DimDate'[Fecha] >= FechaDeInicio,
'DimDate'[Fecha] <= FechaDeFinalización,
'DimDate'[IsWorkingDay] = TRUE()
)
Horas totales del VAR =
SI(
Días laborables = 1,
DATEDIFF(StartDateTime, CompletionDateTime, HOUR),
(Días laborables - 2) * 24 +
(24 - HOUR(StartDateTime) - MINUTE(StartDateTime) / 60) +
HOUR(CompletionDateTime) + MINUTE(CompletionDateTime) / 60
)
DEVOLUCIÓN
IF(TotalHours <= 24, 1, 0)