Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
1 year ago

DateDiff con segundos

Hola a todos,

Estoy tratando de calcular la diferencia entre las dos fechas usando la función DATEDIFF() y quiero omitir los fines de semana. a continuación se muestra el DAX que estoy usando actualmente:

Diferencia =
VAR _d = DATEDIFF([StartDate], [EndDate], SECOND)
VAR _min = DIVIDIR(_d,60)
VAR _hour = DIVIDIR(_min,60)
VAR _day = DIVIDIR(_hour,24)
VAR _weekend = CALCULAR(CONTAR(Fechas[Fecha]),TODO(Fechas),FILTRO(Fechas, Fechas[NombreDeDía] en {"Sábado", "Domingo"} && Fechas[Fecha]>=SELECTEDVALUE('2C_Table'[FechaDeInicio]) &&Fechas[Fecha]<=SELECTEDVALUE('2C_Table'[EndDate])))
Var _check = _day - _weekend
devolución
SI(_check< 0, 0, _check)

El DAX anterior devuelve el valor, sin embargo, no omite los fines de semana del cálculo.

¡Cualquier ayuda en esto sería apreciada!

Saludos
Mahesh

4 Replies

  • Hola @Maheshguptaz - Tu enfoque va por buen camino, pero el problema proviene de cómo filtras los fines de semana en tu _weekend variable. La función ALL(Dates) quita el contexto de filtro aplicado, pero debe asegurarse de que el recuento se alinea correctamente con el intervalo StartDate y EndDate.

    Compruebe la medida modificada:

    Diferencia =
    VAR _TotalDays = DATEDIFF(SELECTEDVALUE('2C_Table'[StartDate]), SELECTEDVALUE('2C_Table'[EndDate]), DAY)

    -- Cuente los fines de semana entre StartDate y EndDate
    VAR _WeekendCount =
    CALCULAR(
    COUNTROWS(Fechas),
    Dates[Date] >= SELECTEDVALUE('2C_Table'[StartDate]) &&
    Dates[Date] <= SELECTEDVALUE('2C_Table'[EndDate]) &&
    Dates[DayName] IN {"Sábado", "Domingo"}
    )

    -- Restar el conteo de fin de semana del total de días
    VAR _WorkDays = _TotalDays - _WeekendCount

    -- Asegúrese de que no haya valores negativos
    RETORNO MAX(0, _WorkDays)

    Espero que ayude

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      Hola @rajendraongole1 ,

      Gracias por compartir el DAX y su explicación. Sin embargo, da un valor en blanco cuando usé el DAX dado.

      Saludos
      Mahesh

  • Hola

    Según nuestro entendimiento, está intentando calcular la diferencia entre las dos fechas utilizando la función DATEDIFF(). Para omitir los fines de semana del cálculo de la diferencia de fechas en Power BI mediante DAX, debe ajustar la lógica para excluir correctamente los sábados y domingos. El problema con el DAX actual es que calcula la diferencia total en días y, a continuación, resta el recuento de días de fin de semana, pero este enfoque no tiene en cuenta el hecho de que los fines de semana ya están incluidos en el recuento total de días.

    Esta es una versión revisada de la fórmula del DAX que excluye correctamente los fines de semana:

    Diferencia =

    VAR StartDate = SELECTEDVALUE('2C_Table'[StartDate])

    VAR EndDate = SELECTEDVALUE('2C_Table'[EndDate])

    VAR TotalDays = DATEDIFF(StartDate, EndDate, DAY)

    VAR WeekendDays =

    CALCULAR(

    COUNTROWS(Fechas),

    FILTRO(

    Fechas

    Fechas[Fecha] >= FechaDeInicio &&

    Fechas[Fecha] <= FechaFin &&

    (DÍA LABORABLE (Fechas[Fecha], 2) >= 6) // 6 = Sábado, 7 = Domingo

    )

    )

    VAR Días Hábiles = TotalDías - Fines de SemanaDías

    DEVOLUCIÓN

    IF(Días laborables < 0, 0, Días laborables)


    Explicación:

    StartDate y EndDate: estas variables almacenan las fechas de inicio y finalización de la tabla.

    TotalDays: calcula el número total de días entre las fechas de inicio y finalización mediante DATEDIFF.

    WeekendDays: Calcula el número de días de fin de semana (sábados y domingos) entre las fechas de inicio y finalización. La función WEEKDAY se utiliza para identificar los fines de semana (6 = sábado, 7 = domingo).

    Días laborables: resta el número de días de fin de semana del total de días para obtener el número de días laborables.

    RETURN: Se devuelve el resultado final, asegurando que si el cálculo da como resultado un valor negativo, devuelve 0.

    ¡Gracias!

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      Hola @SamInogic ,

      Gracias por compartir el DAX y su explicación. Sin embargo, da un valor en blanco cuando usé el DAX dado.

      Saludos
      Mahesh