This is best Fabric, Power BI, SQL and AI community event. How do we know? The last event sold out! Save €200 with code FABCMTY200.
Register nowA 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.
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: -
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.
Solved! Go to Solution.
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
saludos
Phil
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?
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?
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
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.
Esta es la columna calculada DAX:
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.
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"
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: -
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: -
*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.
Sign up to receive a private message when registration opens and key events begin.
If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.