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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Datos dinámicos y agregados

hola

Tengo el siguiente conjunto de datos: Fecha, Sistema, Valores de estado:

PowerBI88_0-1624347936577.png

Necesito transformarlo en un conjunto de datos con las siguientes columnas: Día, Fecha de inicio, Fecha de finalización, Estado agregado.

¿Puede darme una pista sobre cómo lograrlo?

Tahnk usted,

Atentamente

Marta

12 REPLIES 12
Syndicate_Admin
Administrator
Administrator

Hay @PowerBI88 ,

Por favor, compruebe si esto es lo que desea:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Xc1LCsAgDEXRrZSMBfOxHzJrtyHZ/zaqYNA4eKPD49YKjExZMh2ohJDgbSOwtAipuHAU1uIim8g8lZXYQ1/bGWWEulxRRqjLvYnM0wNmPw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, System = _t, #"Health Values" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type datetime}, {"System", type text}, {"Health Values", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Day", each Date.Day([Date])),
    #"Grouped Rows" = Table.Group(#"Added Custom", {"Day", "System"}, {{"Date start", each List.Min([Date]), type nullable datetime}, {"Date end", each List.Max([Date]), type nullable datetime}, {"Health", each List.Sum([Health Values]), type nullable number}}),
    #"Reordered Columns" = Table.ReorderColumns(#"Grouped Rows",{"Day", "Date start", "Date end", "System", "Health"})
in
    #"Reordered Columns"

Pivot and aggregate data.gif

Saludos

Icey

Si este post ayuda,entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Por desgracia, no es exaclty lo que estoy buscando. Trato de explicarme mejor: en cuanto a la agrupación de las fechas no está bien calcular la fecha mínima y la fecha máxima en 1 día, porque dentro de un día estoy buscando agrupar todas las ocurrencias del rango de fechas donde la salud no es igual al 100%. Eg:

si tengo

1/1/2021 8:00 - 1/1/2021 9:30 Salud = 80%

1/1/2021 11:30 - 1/1/2021 12:00 salud = 90%

1/1/2021 12:00 - 1/1/2021 13:00 salud = 100%

1/1/2021 13:00 - 1/1(2021 13:30 salud = 70%

En mi tabla desidered necesitaré dos agrupaciones dentro del día 1/1/2021, respectivamente:

1/1/2021 11:30 - 1/1/2021 12:00 healt = promedio(80, 90)

1/1/2021 1/1/2021 13:00 - 1/1(2021 13:30 salud = 70%

Déjame saber si necesitas más aclaraciones

Gracias

Hay @PowerBI88 ,

Soy un poco confuso acerca de la lógica de cálculo aquí:

data.PNG

¿Quiere decir que todos los intervalos de fechas anteriores al 100% se calcularán como "valor promedio"? ¿Y solo mantener el último intervalo de fechas?

Además, ¿cómo juzgar un intervalo de fechas en su estructura de datos original, todos los registros datetime en una columna?

Saludos

Icey

Lo siento mi error, el primer intervalo de fechas comienza con la hora 8:00 hasta las 12:00.

¿Quiere decir que todos los intervalos de fechas anteriores al 100% se calcularán como "valor promedio"? Y sólo mantener el último rango de fechas?--> sí, th econdition para buscar es la salud no es igual a 100%

Además, ¿cómo juzgar un intervalo de fechas en su estructura de datos original, todos los registros datetime en una columna? --> sí están todos en una columna

Hay @PowerBI88 ,

Lo siento, no lo declaré. Para mi última pregunta, lo que quiero confirmar es que el valor de estado es para un intervalo de fechas, pero en su estructura de datos original, todos los registros datetime están en una columna. Entonces, ¿cómo se define un intervalo de fechas? ¿Y cómo se define el valor de salud?

PowerBI88_0-1624347936577.png

Saludos

Icey

No se define directamente en los datos. Puede inferirlo iterando sobre la mesa hasta que cumpla con el valor de estado del 100%. Debe buscar la fecha de finalización antes de cumplir con la fila con el valor de estado del 100%.

Déjame saber si está claro.

Hay @PowerBI88 ,

Por favor, compruebe si esto podría satisfacer sus necesidades:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("fZBBCsQwCEWvUgKzK1QNdjLZ1WuU3v8a04Emism4cPXQ/33nmQgIt7zhghUgrem4h+CVrtUwqtQYe5Zrbqx4xhX5YQge7ho4LCIr/AywKPRn6e7a+7w9y/pH8az8TaQFzZNjoi076Hm0SqBVAq0SaJVI63SxNZVI6+xs1yqB1klk1zpJVK3zRFuWB2je3H/w+gI=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, System = _t, Health = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type datetime}, {"System", type text}, {"Health", Percentage.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Dates", each Date.From([Date])),
    #"Sorted Rows" = Table.Sort(#"Added Custom",{{"System", Order.Ascending}, {"Date", Order.Ascending}}),
    #"Added Index" = Table.AddIndexColumn(#"Sorted Rows", "Index", 0, 1, Int64.Type),
    #"Added Custom1" = Table.AddColumn(#"Added Index", "Date End", each let System_ = [System], Date_ = [Dates] in let t_ = Table.SelectRows(#"Added Index",each [System]=System_ and [Dates] = Date_) in 
if [System] = System_ and [Dates] = Date_ then if [Date]=List.Max(t_[Date]) then List.Max(t_[Date]) else if [Health]=1 then #"Added Index"[Date]{[Index]-1} else null else null),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Date Start", each let System_ = [System], Date_ = [Dates] in let t_ = Table.SelectRows(#"Added Index",each [System]=System_ and [Dates] = Date_) in 
if [System] = System_ and [Dates] = Date_ then if [Date]=List.Min(t_[Date]) then List.Min(t_[Date]) else if [Health]=1 then #"Added Index"[Date]{[Index]+1} else null else null),
    #"Filled Up" = Table.FillUp(#"Added Custom2",{"Date End"}),
    #"Filled Down" = Table.FillDown(#"Filled Up",{"Date Start"}),
    #"Filtered Rows" = Table.SelectRows(#"Filled Down", each ([Health] <> 1)),
    #"Grouped Rows" = Table.Group(#"Filtered Rows", {"System", "Dates", "Date Start", "Date End"}, {{"Average", each List.Average([Health]), type nullable number}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Grouped Rows",{{"Average", Percentage.Type}})
in
    #"Changed Type1"

original.PNG

all.PNG

Saludos

Icey

Si este post ayuda,entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Estoy reproduciendo sus pasos, pero parece que Power BI tiene problemas de memoria al realizar las iteraciones. Lo he lanzado hace 15 minutos 😞

Syndicate_Admin
Administrator
Administrator

¿Alguna actualización?

Syndicate_Admin
Administrator
Administrator

@Fowmy Aquí está el enlace a la salida deseada: Enlace

Hay @PowerBI88 ,

día Fecha de inicio Fin de la fecha sistema Salud
1 3/1/2021 0:10 3/1/2021 23:30 A 80%
2 3/2/2021 0:10 3/2/2021 23:30 b 90%

¿Cuáles son los datos de muestra correspondientes del resultado deseado anterior? ¿Y cuál es la lógica para calcular las columnas Date start, Date end y Health?

Saludos

Icey

Si este post ayuda,entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Syndicate_Admin
Administrator
Administrator

@PowerBI88

¿Puede proporcionar datos utilizables en Excel o CSV con los resultados esperados?
Adjuntar el vínculo a los archivos después de guardarlos en OneDrive o cualquier otra ubicación.

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel

Power BI Monthly Update - May 2024

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