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.
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 cliente | Fecha de inicio planificada | Hora de inicio planificada | Duración planificada |
1 | 20/07/2020 | 09:00 | 30 |
1 | 21/07/2020 | 09:00 | 30 |
1 | 22/07/2020 | 09:00 | 30 |
1 | 23/07/2020 | 09:00 | 30 |
1 | 24/07/2020 | 09:00 | 30 |
1 | 25/07/2020 | 08:45 | 30 |
1 | 26/07/2020 | 09:15 | 30 |
1 | 20/07/2020 | 12:00 | 30 |
1 | 21/07/2020 | 12:00 | 30 |
1 | 22/07/2020 | 12:00 | 30 |
1 | 23/07/2020 | 12:00 | 30 |
1 | 24/07/2020 | 11:30 | 30 |
1 | 25/07/2020 | 12:30 | 30 |
1 | 26/07/2020 | 12:30 | 30 |
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 cliente | Hora de inicio planificada | Duración planificada | Datos | Contar | Mediana de la hora de inicio |
1 | 09:00:00 | 30 | Mesa | 5 | 09:00:00 |
1 | 08:45:00 | 30 | Mesa | 1 | 08:45:00 |
1 | 09:15:00 | 30 | Mesa | 1 | 09:15:00 |
1 | 12:00:00 | 30 | Mesa | 4 | 12:00:00 |
1 | 11:30:00 | 30 | Mesa | 1 | 11:30:00 |
1 | 12:30:00 | 30 | Mesa | 2 | 12: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
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
To learn more about Power BI, follow me on Twitter or subscribe 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
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |