Starting December 3, join live sessions with database experts and the Microsoft product team to learn just how easy it is to get started
Learn moreGet certified in Microsoft Fabric—for free! For a limited time, get a free DP-600 exam voucher to use by the end of 2024. Register now
¡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ón | Paso 1 (Inicio) | Paso 2 | Paso 3 | Paso 4 (Fin) |
1 | 10/08/2021 10:47:32 | 10/08/2021 16:03:30 | 14/08/2021 12:12:08 | 15/08/2021 17:54:02 |
2 | 21/09/2021 12:30:41 | 22/09/2021 11:02:56 | 22/09/2021 12:56:01 | 30/09/2021 11:05:34 |
3 | 01/10/2021 18:01:01 | 03/10/2021 17:03:31 | 04/10/2021 08:57:01 | 04/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.
Solved! Go to Solution.
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
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.
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.
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
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.
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.
Palmadita
Starting December 3, join live sessions with database experts and the Fabric product team to learn just how easy it is to get started.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early Bird pricing ends December 9th.