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

A new Data Days event is coming soon! This time we’re going bigger than ever. Fabric, Power BI, SQL, AI and more. Don't miss out.

Reply
Syndicate_Admin
Administrator
Administrator

Conversión de horas decimales a formato amigable (D:H:M) - Duración, no tiempo.

Hola, espero que estés bien.

En primer lugar, disculpas si estoy publicando en el foro incorrecto aquí... Soy bastante nuevo en publicar en ellos.

Tengo una columna dentro de una tabla llamada "transabrhrs",que esencialmente detalla un tiempo o duración transcurrido para un proceso. Los valores de la columna son actualmente de un formato "Decimal" y son reflejos de horas.

Por ejemplo: -

  • 0.0727777777
  • 4.5165023660
  • 65.123049596

Lo siguiente es lo que me gustaría que los valores anteriores se convirtieran en, si es posible, o cualquier cosa incluso remotamente similar sería increíble: -

Elapsedhrs

Tiempo transcurrido

0.0727777777

0 días : 0 horas : 4 minutos : 22 Segundos

4.5165023660

0 días : 4 horas : 30 minutos : 59 Segundos

65.123049596

2 días : 17 horas : 7 minutos : 23 Segundos


Las etiquetas como días / horas, etc. no son necesarias y están puramente allí para fines ilustrativos.

... Y para hacer las cosas aún más difíciles, también hay un requisito para obtener promedios de esta conversión, por lo que los valores finales tendrían que ser formateados de tal manera que esto sería compatible y funcionaría.

He estado tratando... y fracasar durante varias horas ahora, y parece haber agotado mi propio conjunto de habilidades y habilidades de investigación, así que apreciaría enormemente cualquier ayuda en absoluto.

Pensé que me las arreglé para llegar a algún lugar cerca en un momento, pero pronto me di cuenta de que el formato "Time" no era adecuado debido a sus limitaciones de 24 horas.

Gracias de antemano. Realmente apreciar cualquier orientación en absoluto.

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

No @ChrisH94

Descargue este PBIX con el siguiente código.

Ok, así que lo que haces es mantener las Horas transcurridas como decimal y luego hacer la conversión a una cadena que muestra d.h.m.s en Medidas.

Para el tiempo transcurrido con esto

_Elapsed = 

VAR days = INT(SUM('Table'[ElapsedHrs])/24)
VAR hrs = INT(SUM('Table'[ElapsedHrs]) - days*24)
VAR mins = INT((SUM('Table'[ElapsedHrs])- days*24 - hrs)*60)
VAR secs = ROUND( MOD((SUM('Table'[ElapsedHrs]) * 60 - INT(SUM('Table'[ElapsedHrs])*60))*60,60),0)
RETURN
days & " d " & hrs & " h " & mins & " m " & secs & " s"

y para el tiempo transcurrido promedio con este

_Avg Elapsed = 

VAR days = INT(AVERAGE('Table'[ElapsedHrs])/24)
VAR hrs = INT(AVERAGE('Table'[ElapsedHrs]) - days*24)
VAR mins = INT((AVERAGE('Table'[ElapsedHrs])- days*24 - hrs)*60)
VAR secs = ROUND( MOD((AVERAGE('Table'[ElapsedHrs]) * 60 - INT(AVERAGE('Table'[ElapsedHrs])*60))*60,60),0)
RETURN
days & " d " & hrs & " h " & mins & " m " & secs & " s"

Esto responde a los filtros seleccionados

avgtime.png

saludos

Phil

View solution in original post

10 REPLIES 10
Syndicate_Admin
Administrator
Administrator

@PhilipTreacy

Esto también me ha ayudado... Gracias

Pero necesito que se resuma en horas como en formato Excel '[hh] : mm'

En mis datos, tengo una lista de empleados que trabajan durante 9,5 horas al día, que son 09:30 horas.

Entonces, si tengo 20 empleados, mi total para ese día es 9.5 x 20 = 190 horas. que en Excel se muestra como 190:00 para ese día y una semana de 5 días se convierte en 950 Horas = 950:00 en Excel...

¿Cómo puedo producir esto en Power BI para que me muestre datos similares a los siguientes?Shrinkage.png

Syndicate_Admin
Administrator
Administrator

Hola Felipe. ¿Qué sucede si mi tabla contiene varias columnas y quiero aplicar el código en una columna específica? Su ejemplo tiene solo una columna... Supongo que tendría que especificar la 'Tabla' [My_table] pero ¿cómo agregar una columna específica en el código que proporcionaste?

Syndicate_Admin
Administrator
Administrator

No @ChrisH94

Descargue este PBIX con el siguiente código.

Ok, así que lo que haces es mantener las Horas transcurridas como decimal y luego hacer la conversión a una cadena que muestra d.h.m.s en Medidas.

Para el tiempo transcurrido con esto

_Elapsed = 

VAR days = INT(SUM('Table'[ElapsedHrs])/24)
VAR hrs = INT(SUM('Table'[ElapsedHrs]) - days*24)
VAR mins = INT((SUM('Table'[ElapsedHrs])- days*24 - hrs)*60)
VAR secs = ROUND( MOD((SUM('Table'[ElapsedHrs]) * 60 - INT(SUM('Table'[ElapsedHrs])*60))*60,60),0)
RETURN
days & " d " & hrs & " h " & mins & " m " & secs & " s"

y para el tiempo transcurrido promedio con este

_Avg Elapsed = 

VAR days = INT(AVERAGE('Table'[ElapsedHrs])/24)
VAR hrs = INT(AVERAGE('Table'[ElapsedHrs]) - days*24)
VAR mins = INT((AVERAGE('Table'[ElapsedHrs])- days*24 - hrs)*60)
VAR secs = ROUND( MOD((AVERAGE('Table'[ElapsedHrs]) * 60 - INT(AVERAGE('Table'[ElapsedHrs])*60))*60,60),0)
RETURN
days & " d " & hrs & " h " & mins & " m " & secs & " s"

Esto responde a los filtros seleccionados

avgtime.png

saludos

Phil

Hola Phil,

¡Hace un sueño! Esto es algo increíble, muchas gracias por su tiempo y esfuerzo en esto, no puedo decirle cuánto lo aprecio. Me he estado arrancando el pelo por esto.

Una vez más, tu ayuda ha sido invaluable para mí. Gracias.

No te preocupes @ChrisH94 🙂

Syndicate_Admin
Administrator
Administrator

@ChrisH94

Esta es la columna calculada DAX:

Vera_33_0-1613705090252.png

Column = 
VAR days = INT([Column1]/24)
VAR hr =INT([Column1]-days*24)
VAR mins = INT(([Column1]-days*24-hr)*60)
VAR secs = ROUND( MOD(([Column1]*60-INT([Column1]*60))*60,60),0)
RETURN
days &" days: "& hr & " hours: " & mins &" minutes: "&secs&" seconds"

Muchas gracias por su respuesta, esto sin duda ha conseguido que mis datos se ven más presentables y amigables, particularmente para los valores más estáticos.

Me lo quitaré y empezaré a ver cómo puedo hacer uso de esto mientras calculo promedios.

Gracias de nuevo, realmente aprecio su orientación y ayuda.

Syndicate_Admin
Administrator
Administrator

No @ChrisH94

Descargue este archivo PBIX de ejemplo con código

Este código power query hace el trabajo, convirtiendo los decimales en duraciones

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtAzMDcyBwELpVidaCUTPVNDM1MDI2MzMzDfzFTP0MjYwMQSyI0FAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Decimal Durations" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Decimal Durations", type number}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Days", each ([Decimal Durations] / 24)),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Hours", each Number.Mod([Days],1)*24),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Minutes", each Number.Mod([Hours],1) * 60),
    #"Added Custom3" = Table.AddColumn(#"Added Custom2", "Seconds", each Number.Round(Number.Mod([Minutes],1) * 60)),
    #"Added Custom4" = Table.AddColumn(#"Added Custom3", "Duration", each #duration(Number.RoundDown([Days]), Number.RoundDown([Hours]), Number.RoundDown([Minutes]), [Seconds])),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom4",{"Days", "Hours", "Minutes", "Seconds"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Removed Columns",{{"Duration", type duration}})
in
    #"Changed Type1"

decdur.png

Si quieres las "horas", "mins", etc añadido que es bastante fácil de hacer mediante la conversión de todo a una cadena.

No estoy seguro de cómo piensa obtener la duración media, pero puede calcularlo así durante toda la columna

= List.Average(Table[Duration])

Si proporcionas ejemplos de lo que quieres, veré qué puedo hacer para ayudar.

En el archivo vinculado anteriormente he creado una consulta que calcula las duraciones Promedio y Total solo para que pueda ver cómo se puede hacer.

saludos

Phil

Gracias Phil, realmente aprecio esta respuesta completa.

Sin embargo, estoy teniendo un poco de dificultad para conseguir que los valores del campo Duración se muestren correctamente en un objeto visual. De forma predeterminada, presenta los valores como decimales todavía, a menos que cambie el formato a TIME HH:MM:SS, que luego elimina el valor de días - ¿Alguna idea?

Sólo un poco más de antecedentes para el requisito de cálculo promedio: - El informe está esencialmente mirando los tickets registrados en un sistema de soporte técnico de TI, y el objetivo principal en este momento es obtener la duración que tomó para que un boleto se resolviera, a través de la columna Elapsedhrs.

Esto es esencialmente un fragmento de algunos de los datos que estoy mirando: -

Capture.PNG

Si es posible, el cálculo medio tendría que realizarse dinámicamente, ya que hay varios filtros disponibles en el informe que tendrían que influir en él.

Por ejemplo, la columna Assignedtoint detalla qué agente trató con el vale, estos valores se usan como filtros en el informe. Debido a esto, hay un requisito para que el cálculo promedio se peforme junto con el filtro elegido, que podría ser una matriz de cosas diferentes, incluyendo transcurridos promedio durante el número 'x' de días.

Calcular el promedio como este, sería perfecto, si pudiéramos obtener los valores en la versión formateada amigable de horas transcurridas capaces de realizarlo: -

Capture2.PNG

*Me doy cuenta de que el cálculo/opción anterior requeriría que la columna se estableciera en un formato NUMBER, lo cual creo que no es factible con el formato amigable en el que quiero presentar los valores. El comportamiento general del cálculo anterior, sin embargo, es esencialmente lo que estoy necesitando, ya que parece reaccionar bien a varios filtros. Este promedio obviamente funciona bien con mi versión decimal de transajustes,simplemente no es muy amable de leer por desgracia !

Entiendo que esto bien podría estar convirtiéndose en algo bastante intensivo, y si lo es, No esperaría que nadie ponga tiempo sustancial en ayudarme, así que por favor no dude en decirme que despeje !

Una vez más, muchas gracias por la orientación hasta ahora, ha sido invaluable para mí !!

Hola, tuve el mismo problema que intenté conevert este taime a secunds luego cambié a dd hh mm ss, pero no puedo obtener el promedio de ese tiempo, tengo el mismo caso son los datos de la mesa de ayuda, si tienes una nueva idea escríbeme.

Helpful resources

Announcements
Fabric SQL PBI Data Days

Data Days 2026 coming soon!

Sign up to receive a private message when registration opens and key events begin.

New to Fabric survey Carousel

New to Fabric Survey

If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.