Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Se ha creado una columna calculada con 2 campos de fecha y hora

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:

Florie_0-1750078544750.png

¿Alguna idea sobre cómo calcular la columna 'En escala de tiempo'? Muchas gracias

2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

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:


Paso 1: Prepara tu tabla DimDate

  • Asegúrese de que su tabla DimDate cubra todas las fechas posibles e incluya:
    • Columna [IsWeekend] (VERDADERO/FALSO)
    • Columna [IsBankHoliday] (VERDADERO/FALSO)

Paso 2: Columna calculada para la diferencia de horas de trabajo

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]):

Dax
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)")

Paso 3: Manejo de casos extremos

  • Si [Inicio] y [Finalización] son el mismo día, simplemente reste las horas.
  • Si abarcan varios días, el primer y el último día utilizan horas parciales; Los días completos intermedios cuentan como 24 horas cada uno.

Notas

  • Ajusta la fórmula si tu jornada laboral no es de 24 horas (por ejemplo, turnos de 8 horas).
  • Para la salida de "fin de semana", puede agregar una verificación:
    Si todos los días entre el inicio y la finalización se marcan como fines de semana en DimDate, genere "fin de semana".

¡Hágame saber si necesita el DAX para un caso extremo específico o si tiene una definición de horario de trabajo diferente!

Syndicate_Admin
Administrator
Administrator

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

Helpful resources

Announcements
June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors