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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
MarkRS
Helper I
Helper I

Agrupar filas con valores con cierto rango de unos de otros

Hola a todos

Estoy haciendo algunos datos de preparación/limpieza y como parte de eso necesito agrupar filas donde los valores de tiempo están dentro de los 30 minutos uno del otro. Para ayudar a explicar más a continuación, he añadido algunos datos de entrada simplificados:

ID de clienteFecha de inicio planificadaHora de inicio planificadaDuración planificada
120/07/202009:0030
121/07/202009:0030
122/07/202009:0030
123/07/202009:0030
124/07/202009:0030
125/07/202008:4530
126/07/202009:1530
120/07/202012:0030
121/07/202012:0030
122/07/202012:0030
123/07/202012:0030
124/07/202011:3030
125/07/202012:3030
126/07/202012:3030

Puedo usar Table.Group para agrupar todas las filas que tienen el mismo ID de cliente, hora de inicio planificada y duración planificada:

= Table.Group(#"Changed Type", {"Client ID", "Planned Start Time", "Planned Duration"}, {{"data", each _, type table [Client ID=nullable number, Planned Start Date=nullable date, Planned Start Time=nullable time, Planned Duration=nullable number]}, {"Count", each Table.RowCount(_), Int64.Type}, {"Median Start Time", each List.Median([Planned Start Time]), type nullable time}})

Lo que da esta salida:

ID de clienteHora de inicio planificadaDuración planificadaDatosContarMediana de la hora de inicio
109:00:0030Mesa509:00:00
108:45:0030Mesa108:45:00
109:15:0030Mesa109:15:00
112:00:0030Mesa412:00:00
111:30:0030Mesa111:30:00
112:30:0030Mesa212:30:00

Esto funciona según lo esperado, pero me gustaría agrupar filas donde las horas de inicio planificadas están dentro de los 30 minutos uno del otro.

Esto daría como resultado que las tres primeras filas se agruparan en una: Hora de inicio planificada 09:00, 08:45, 09:15.

A continuación, la agregación Media Start Time mostraría la mediana de estos tiempos.

Las últimas tres filas son un poco más complicadas ya que las horas de inicio son 12:00, 11:30 y 12:30.

Las dos primeras filas (12:00, 11:30) están dentro de los 30 minutos entre sí, por lo que podrían agruparse para formar un grupo de 5 filas.

Sin embargo, si las filas 12:00 y 12:30 se pudieran agrupar, sería aún mejor, ya que formaría un grupo de 6 filas.

Probablemente necesite agregar una columna auxiliar para identificar qué filas combinar. Cualquier ayuda sería muy apreciada.

Aunque he estado haciendo esto en consulta de energía, estaría bien hacerlo en DAX si fuera más fácil.

He subido un psíquido de muestra aquí: https://ufile.io/xyd0n3u9

Muchas gracias

2 REPLIES 2
mahoneypat
Employee
Employee

FYI que Edge marcó su descarga, así que hice datos ficticios similares. No estoy seguro de que esto satisfaga exactamente su necesidad, pero básicamente redondea a la media hora más cercana antes de la agrupación. Para ver cómo funciona, simplemente cree una consulta en blanco, vaya a Editor avanzado y reemplace el texto allí con el código M a continuación.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUbK0MjawMjAAsowNlGJ1YIImphiChobYlBoa4RA1QBKNBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Client = _t, #"Planned Start Time" = _t, Duration = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Client", Int64.Type}, {"Planned Start Time", type time}, {"Duration", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Round30Minutes", each #time(Time.Hour([Planned Start Time]), if Time.Minute([Planned Start Time])>30 then 30 else 0, 0)),
    #"Grouped Rows" = Table.Group(#"Added Custom", {"Round30Minutes", "Client", "Duration"}, {{"AllRows", each _, type table [Client=nullable number, Planned Start Time=nullable time, Duration=nullable number, Round30Minutes=time]}})
in
    #"Grouped Rows"

Si esto funciona para usted, márquelo como la solución. Los elogios también son apreciados. Por favor, avísame si no.

saludos

palmadita





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


Hola

Gracias por esto - Agregué código similar a mi consulta. Agrupa más valores, pero no agrupa los valores que cruzan los límites de media hora- por ejemplo 11:55 y 12:05 no se agruparán, aunque solo están separados por 10 minutos. ¿Alguna sugerencia sobre cómo podría agruparlos también?

Muchas gracias

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.