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

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

Reply
Syndicate_Admin
Administrator
Administrator

¿Cómo calcular las horas entre DateTimes y mostrar las horas por día en el eje x?

Hola a todos -

Una situación un poco complicada aquí: tengo una columna de hora de inicio y hora de finalización, y muchas de esas transacciones ocurren alrededor de la medianoche.

Necesito mostrar el total de horas por día, pero debido a que a veces la hora de la fecha de finalización es el día siguiente, el total de horas por día está desordenado. No importa si uso la hora de inicio o la hora de finalización para el eje X, los números siguen siendo incorrectos.

¿Qué puedo hacer para solucionar esto? ¿Hay alguna manera de diferenciar entre los dos días en que eso sucede? Aprecia cualquier aporte.

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Allí, @rzavgazaryan;

Si el intervalo implica dos días, puede usar if()y luego usar el día siguiente (0:00:00) como hora de finalización y el día siguiente (0:00:00) como hora de finalización como hora de inicio, de modo que pueda crear dos medidas, una para calcular el intervalo diario de hora de inicio y otra para calcular el intervalo diario de hora de finalización, y luego resumirlos de la siguiente manera:

1.crear una base de fechaiff en la hora de inicio.

Processing Time (start) = var _maxstart=MAX([StartTime])
return  
IF (
    _maxstart = BLANK (),BLANK (),
    IF (
        MAX ( [EndTime] ) = BLANK (),
        DATEDIFF ( _maxstart , MAX ( [queryTime]), MINUTE ) / 60,
        IF(
            DATEDIFF(_maxstart,MAX([EndTime]),DAY)>=1,DATEDIFF(_maxstart,DATE(YEAR(_maxstart),MONTH(_maxstart),DAY(_maxstart)+1),MINUTE)/60,
        DATEDIFF (_maxstart, MAX ( [EndTime] ), MINUTE ) / 60
)))

2.crear una base de fechaiff en el tiempo de finalización.

Processing Time (end) =
VAR _end =
    MAX ( [EndTime] )
RETURN
    IF (
        MAX ( [StartTime] ) = BLANK (), BLANK (),
        IF ( _end = BLANK (),0,
            IF (
                DATEDIFF ( MAX ( [StartTime] ), _end, DAY ) >= 1,
                DATEDIFF ( DATE ( YEAR ( _end ), MONTH ( _end ), DAY ( _end ) ), _end, MINUTE ) / 60,0)))

El resultado final se muestra a continuación:

vyalanwumsft_0-1634612108831.png

3.crear una tabla.

Table = SUMMARIZE('JobsDB',[ID],[StartTime], [EndTime],[queryTime],"Srart",FORMAT([StartTime],"yyyy-mm-dd"),"end",FORMAT([EndTime],"yyyy-mm-dd"),"process-s",[Processing Time (start)],"process-e",[Processing Time (end)])

4.crear una medida de suma.

total =
CALCULATE (
    SUM ( [process-s] ),
    FILTER ( ALL ( 'Table' ), [Srart] = MAX ( [end] ) )
)
    + CALCULATE ( SUM ( [process-e] ), ALLEXCEPT ( 'Table', 'Table'[end] ) )

El resultado final se muestra a continuación:

vyalanwumsft_1-1634612319141.png

Saludos
Apoyo a la comunidad Team_ Yalan Wu
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

Lo que @AllisonKennedy propone es la forma de hacerlo con DAX. No es un cálculo fácil. Si puede transformar aún más sus datos, puede simplificar las cosas. Por ejemplo, cree una consulta en blanco, abra el editor avanzado y reemplace el código M con esto.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUTI00Dc01TcyMDJUsLAyNFBw9EUVNDS0MgKLxuogNJghaQiAaTCHCJpYGcPVO6GZZYCiAWqKEdRaZA1QKXOo3RBBC4igMdSQ2FgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Line = _t, StartTime = _t, EndTime = _t]),
    #"Split Column by Delimiter" = Table.SplitColumn(Source, "StartTime", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"StartDate", "StartTime"}),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Split Column by Delimiter", "EndTime", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"EndDate", "EndTime"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"StartDate", type date}, {"EndDate", type date}, {"StartTime", type time}, {"EndTime", type time}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Date", each List.Dates([StartDate], Duration.TotalDays([EndDate]-[StartDate])+1, #duration(1,0,0,0))),
    #"Expanded DateRange" = Table.ExpandListColumn(#"Added Custom", "Date"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Expanded DateRange",{{"Date", type date}}),
    #"Added Custom1" = Table.AddColumn(#"Changed Type1", "NewStartTime", each if [StartDate] = [Date] then [StartTime] else #time(0,0,0), type time),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "NewEndTime", each if [EndDate] = [Date] then [EndTime] else #time(23,59,59), type time),
    #"Removed Other Columns" = Table.SelectColumns(#"Added Custom2",{"Line", "Date", "NewStartTime", "NewEndTime"})
in
    #"Removed Other Columns"

Muestra cómo convertir una tabla como esta

mahoneypat_0-1634381723705.png

en una tabla como esta

mahoneypat_1-1634381775367.png

donde hay una fila para cada fecha en que una línea está en funcionamiento. Funciona incluso si la operación abarca más de 3 días. A continuación, puede relacionar la columna de una fecha con la tabla Fecha. Un modelo como este también debería simplificar otros cálculos (por ejemplo, días en funcionamiento). Este es un caso de uso bastante común y un buen tema para un video. Gracias por la idea.

Además, consulte este artículo para obtener una manera fácil de calcular su duración total a partir de una tabla como esta (sin agregar una columna de duración que reste las dos columnas de tiempo).

Calcular y formatear duraciones en DAX – Hoosier BI

Palmadita

Syndicate_Admin
Administrator
Administrator

@rzavgazaryan Creo que te respondí en una publicación anterior - ACTUALIZACIÓN: He fusionado tu publicación anterior con esta y también veo que también has publicado en el foro dax: https://community.powerbi.com/t5/DAX-Commands-and-Tips/Processing-Utilization-Hours-per-Day-How-to-c... Es mejor publicar solo una vez para que todos podamos ver cuándo se responde y obtener inspiración de las otras respuestas y también tener toda la información necesaria. Mantendré el DAX publicado, pero agregaré una nota de que está publicado de forma cruzada. Cuando resuelva uno, asegúrese de marcar TODAS las publicaciones como resueltas.

¡Gracias!

¿Obtuviste mi archivo de muestra? Creo que hace lo que estás pidiendo:

AllisonKennedy_0-1634361326739.png

De lo contrario, proporcione capturas de pantalla e indique lo que está mal / necesita cambiar.

Si lo hace, y no puede replicar, vuelva a proporcionar capturas de pantalla y detalles de lo que no entiende / necesita más ayuda.

¡Bien!

El archivo se adjunta debajo de la firma.

Helpful resources

Announcements
July 2024 Power BI Update

Power BI Monthly Update - July 2024

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

PBI_Carousel_NL_June

Fabric Community Update - June 2024

Get the latest Fabric updates from Build 2024, key Skills Challenge voucher deadlines, top blogs, forum posts, and product ideas.

Top Solution Authors