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

Grow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Calcular horarios y días hábiles

¡Hola!

Tengo algunos datos con hora/fecha divididos en pasos de un proceso. Necesito calcular el horario comercial (formato de 8 a 18, 24h) y los días entre cada paso para saber cuánto tiempo tarda cada paso en completarse.

Ejemplo (dd/mm/aaaa hh:mm:ss):

IdentificaciónPaso 1 (Inicio)Paso 2Paso 3Paso 4 (Fin)
110/08/2021 10:47:3210/08/2021 16:03:3014/08/2021 12:12:0815/08/2021 17:54:02
221/09/2021 12:30:4122/09/2021 11:02:5622/09/2021 12:56:0130/09/2021 11:05:34
301/10/2021 18:01:0103/10/2021 17:03:3104/10/2021 08:57:0104/10/2021 10:14:31

He intentado encontrar posts de personas con el mismo problema de mí mismo, y aunque he encontrado algunas respuestas interesantes como esta, esta,y esta, la que se cerró a resolver mi problema (sin calcular los días hábiles todavía) es la que se muestra en esta web.

El problema es que necesito replicar esto no solo una vez, sino para cada paso del proceso (a menos que haya otra forma que desconozco). Así que necesito ayuda para encontrar una manera de calcular esto sin tener mi power bi cargado con columnas que tardan mucho tiempo en procesarse. Espero que puedan ayudarme, ¡gracias de antemano!

Saludos.

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Hay @giullianoc ,

Puede crear medidas y usar variables para almacenar cada paso de tiempo y cotizarlos cuando sea necesario. Para calcular el timediff, la medida podría ser así:

TimeDiff = 
VAR s1 =
    SELECTEDVALUE ( 'Table'[Step 1 (Start)] )
VAR s2 =
    SELECTEDVALUE ( 'Table'[Step 2] )
VAR s3 =
    SELECTEDVALUE ( 'Table'[Step 3] )
VAR s4 =
    SELECTEDVALUE ( 'Table'[Step 4 (End)] )


VAR s2_1_total_second =
    DATEDIFF ( s1, s2, SECOND )
VAR s2_1_total_day =
    ROUNDDOWN ( s2_1_total_second / 3600 / 24, 0 )
VAR s2_1_hour =
    ROUNDDOWN ( ( s2_1_total_second - s2_1_total_day * 24 * 3600 ) / 3600, 0 )
VAR s2_1_minute =
    ROUNDDOWN (
        ( s2_1_total_second - s2_1_total_day * 24 * 3600 - s2_1_hour * 3600 ) / 60,
        0
    )
VAR s2_1_second =
    ROUNDDOWN (
        ( s2_1_total_second - s2_1_total_day * 24 * 3600 - s2_1_hour * 3600 - s2_1_minute * 60 ),
        0
    )
VAR s2_1_time = s2_1_total_day & " day(s) " & s2_1_hour & ":" & s2_1_minute & ":" & s2_1_second


VAR s3_2_total_second =
    DATEDIFF ( s2, s3, SECOND )
VAR s3_2_total_day =
    ROUNDDOWN ( s3_2_total_second / 3600 / 24, 0 )
VAR s3_2_hour =
    ROUNDDOWN ( ( s3_2_total_second - s3_2_total_day * 24 * 3600 ) / 3600, 0 )
VAR s3_2_minute =
    ROUNDDOWN (
        ( s3_2_total_second - s3_2_total_day * 24 * 3600 - s3_2_hour * 3600 ) / 60,
        0
    )
VAR s3_2_second =
    ROUNDDOWN (
        ( s3_2_total_second - s3_2_total_day * 24 * 3600 - s3_2_hour * 3600 - s3_2_minute * 60 ),
        0
    )
VAR s3_2_time = s3_2_total_day & " day(s) " & s3_2_hour & ":" & s3_2_minute & ":" & s3_2_second


VAR s4_3_total_second =
    DATEDIFF ( s3, s4, SECOND )
VAR s4_3_total_day =
    ROUNDDOWN ( s4_3_total_second / 3600 / 24, 0 )
VAR s4_3_hour =
    ROUNDDOWN ( ( s4_3_total_second - s4_3_total_day * 24 * 3600 ) / 3600, 0 )
VAR s4_3_minute =
    ROUNDDOWN (
        ( s4_3_total_second - s4_3_total_day * 24 * 3600 - s4_3_hour * 3600 ) / 60,
        0
    )
VAR s4_3_second =
    ROUNDDOWN (
        ( s4_3_total_second - s4_3_total_day * 24 * 3600 - s4_3_hour * 3600 - s4_3_minute * 60 ),
        0
    )
VAR s4_3_time = s4_3_total_day & " day(s) " & s4_3_hour & ":" & s4_3_minute & ":" & s4_3_second


RETURN
    s4_3_time

vyingjl_0-1633572404502.png

Saludos
Equipo de apoyo a la comunidad _ Yingjie Li
Si esta publicación ayuda,entonces considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

View solution in original post

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Debe despivot sus datos y dividir sus columnas DateTime en columnas Date y Time, y hacer esto como una medida. Sin embargo, con los datos estructuados como se muestra, puede agregar una columna calculada con esta expresión como ejemplo de cómo abordar esto. Calcula el tiempo total (en días como decimal) entre el paso 1 y 4 y luego resta 16 horas para el número de días que abarca. Tenga en cuenta que su Paso 4 en la primera fila termina después de las 16:00 hrs, por lo que no está seguro de si contaría el tiempo completo ese día o se detendría a las 4 PM. Reemplace BusTime por el nombre real de la tabla.

Total de días hábiles =
Tiempo total del VAR =
FIJO ( BusTime[Paso 4 (Fin)] - BusTime[Paso 1 (Inicio)], 6 )
Noches de VAR =
INT ( BusTime[Paso 4 (Fin)] - BusTime[Paso 1 (Inicio)] )
Resultado VAR = tiempo total - noches * 16 / 24
DEVOLUCIÓN
RONDA ( resultado, 5 )
Palmadita
Syndicate_Admin
Administrator
Administrator

Hay @giullianoc ,

Puede crear medidas y usar variables para almacenar cada paso de tiempo y cotizarlos cuando sea necesario. Para calcular el timediff, la medida podría ser así:

TimeDiff = 
VAR s1 =
    SELECTEDVALUE ( 'Table'[Step 1 (Start)] )
VAR s2 =
    SELECTEDVALUE ( 'Table'[Step 2] )
VAR s3 =
    SELECTEDVALUE ( 'Table'[Step 3] )
VAR s4 =
    SELECTEDVALUE ( 'Table'[Step 4 (End)] )


VAR s2_1_total_second =
    DATEDIFF ( s1, s2, SECOND )
VAR s2_1_total_day =
    ROUNDDOWN ( s2_1_total_second / 3600 / 24, 0 )
VAR s2_1_hour =
    ROUNDDOWN ( ( s2_1_total_second - s2_1_total_day * 24 * 3600 ) / 3600, 0 )
VAR s2_1_minute =
    ROUNDDOWN (
        ( s2_1_total_second - s2_1_total_day * 24 * 3600 - s2_1_hour * 3600 ) / 60,
        0
    )
VAR s2_1_second =
    ROUNDDOWN (
        ( s2_1_total_second - s2_1_total_day * 24 * 3600 - s2_1_hour * 3600 - s2_1_minute * 60 ),
        0
    )
VAR s2_1_time = s2_1_total_day & " day(s) " & s2_1_hour & ":" & s2_1_minute & ":" & s2_1_second


VAR s3_2_total_second =
    DATEDIFF ( s2, s3, SECOND )
VAR s3_2_total_day =
    ROUNDDOWN ( s3_2_total_second / 3600 / 24, 0 )
VAR s3_2_hour =
    ROUNDDOWN ( ( s3_2_total_second - s3_2_total_day * 24 * 3600 ) / 3600, 0 )
VAR s3_2_minute =
    ROUNDDOWN (
        ( s3_2_total_second - s3_2_total_day * 24 * 3600 - s3_2_hour * 3600 ) / 60,
        0
    )
VAR s3_2_second =
    ROUNDDOWN (
        ( s3_2_total_second - s3_2_total_day * 24 * 3600 - s3_2_hour * 3600 - s3_2_minute * 60 ),
        0
    )
VAR s3_2_time = s3_2_total_day & " day(s) " & s3_2_hour & ":" & s3_2_minute & ":" & s3_2_second


VAR s4_3_total_second =
    DATEDIFF ( s3, s4, SECOND )
VAR s4_3_total_day =
    ROUNDDOWN ( s4_3_total_second / 3600 / 24, 0 )
VAR s4_3_hour =
    ROUNDDOWN ( ( s4_3_total_second - s4_3_total_day * 24 * 3600 ) / 3600, 0 )
VAR s4_3_minute =
    ROUNDDOWN (
        ( s4_3_total_second - s4_3_total_day * 24 * 3600 - s4_3_hour * 3600 ) / 60,
        0
    )
VAR s4_3_second =
    ROUNDDOWN (
        ( s4_3_total_second - s4_3_total_day * 24 * 3600 - s4_3_hour * 3600 - s4_3_minute * 60 ),
        0
    )
VAR s4_3_time = s4_3_total_day & " day(s) " & s4_3_hour & ":" & s4_3_minute & ":" & s4_3_second


RETURN
    s4_3_time

vyingjl_0-1633572404502.png

Saludos
Equipo de apoyo a la comunidad _ Yingjie Li
Si esta publicación ayuda,entonces considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Syndicate_Admin
Administrator
Administrator

Vea estos videos sobre cómo modelar el tiempo y luego calcule una duración total fácilmente. Debe considerar hacer un unpivot de sus datos para simplificar su análisis.

https://youtu.be/3Gy8uu3zmNI

https://youtu.be/v4DS9vHVgLE

Palmadita

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel

Power BI Monthly Update - May 2024

Check out the May 2024 Power BI update to learn about new features.