Portal web
Hola,
Mi tabla se parece a la siguiente:
Cliente No | Fecha | Ventas
111 | 20-12-2020 | 100
112 | 21-12-2020 | 500
112 | 22-12-2020 | 400
…
Quiero calcular para cada CustomerNo la suma de las Ventas de los últimos 365 días.
Nota: necesito esto en un flujo de datos, así que estoy buscando Power Query. Sin DAX por favor.
¡Muchas gracias de antemano por tu ayuda!
jimmy801
En respuesta a Portal web
Hola @webportal
Entonces, ¿realmente necesita estos datos en cada fila? Para implementar Table.Buffer puedes probar este código
TblBuffer = Table.Buffer(#"Linhas Agrupadas"),
Table.AddColumn(TblBuffer ,"RunningTotal",(i)=>List.Sum(Table.SelectRows(TblBuffer , each [CustomerNo]=i[CustomerNo] and [Data]>Date.AddDays(i[Data],-365) and [Data]<=i[Data] ) [Sales]), type number )
y, por cierto, su código no usa el criterio de 365 días a partir de ahora, sino que usa la fecha de la fila actual para calcular -365.
Si esta publicación ayuda o resuelve su problema, márquelo como solución (para ayudar a otros usuarios a encontrar contenido útil y reconocer el trabajo de los usuarios que lo ayudaron)
Los saludos también son buenos
Divertirse
Palanqueta
Portal web
@Jimmy801
Gracias, es casi perfecto.
Está calculando las ventas de los últimos 365 días tomando como referencia Ahora, y necesito por cada transacción.
Intentaré modificar el código que proporcionaste.
jimmy801
En respuesta a Portal web
Hola @webportal
para ser precisos calcula las ventas del ultimo año 🙂
bien, entonces también debe incluir la columna ta en su agrupación. Inténtalo y cuéntame. Si necesita ayuda, no dude en publicar aquí.
BR
Palanqueta
Portal web
En respuesta a jimmy801
Table.AddColumn(#»Linhas Agrupadas» ,»RunningTotal»,(i)=>List.Sum(Table.SelectRows(#»Linhas Agrupadas» , each [CustomerNo]=yo[CustomerNo] y [Data]>Fecha.AñadirDías(i[Data],-365) y [Data]<=yo[Data] ) [Sales]), teclea un número )
¡Este lo soluciona!
El único problema ahora es realmente el tiempo que lleva calcular.
jimmy801
En respuesta a Portal web
Hola @webportal
pero necesita esta información en cada fila de su conjunto de datos? Esto crearía datos redundantes. Usé la función de grupo para resumir su conjunto de datos, no para guardarlo todo. Esa es la diferencia. Básicamente, en su código tiene que filtrar todos sus datos en cada fila, y eso lo hace lento. agregue algo de Table.Buffer en Table.SelectRows para evitar volver a leer su conjunto de datos en cada fila
Si esta publicación ayuda o resuelve su problema, márquelo como solución (para ayudar a otros usuarios a encontrar contenido útil y reconocer el trabajo de los usuarios que lo ayudaron)
Los saludos también son buenos
Divertirse
Palanqueta
Portal web
En respuesta a jimmy801
@Jimmy801
Gracias, eso tiene sentido.
Table.buffer es una función de Power Query M que, lamentablemente, no está bien documentada.
¿Sabes cómo adaptarlo a este caso en particular?
jimmy801
En respuesta a Portal web
Hola @webportal
Entonces, ¿realmente necesita estos datos en cada fila? Para implementar Table.Buffer puedes probar este código
TblBuffer = Table.Buffer(#"Linhas Agrupadas"),
Table.AddColumn(TblBuffer ,"RunningTotal",(i)=>List.Sum(Table.SelectRows(TblBuffer , each [CustomerNo]=i[CustomerNo] and [Data]>Date.AddDays(i[Data],-365) and [Data]<=i[Data] ) [Sales]), type number )
y, por cierto, su código no usa el criterio de 365 días a partir de ahora, sino que usa la fecha de la fila actual para calcular -365.
Si esta publicación ayuda o resuelve su problema, márquelo como solución (para ayudar a otros usuarios a encontrar contenido útil y reconocer el trabajo de los usuarios que lo ayudaron)
Los saludos también son buenos
Divertirse
Palanqueta
Portal web
En respuesta a jimmy801
Me sale un error en el 1er paso:
Expression.Error: Não é possível converter o valor «xxx para o tipo Table.
Detalles:
Valor=BaseClienteMes1
Tipo=[Type]
No importa.
Es demasiado complicado y no vale la pena el esfuerzo, simplemente lo haré R.
Muchas gracias por su tiempo y perdón por todo este lío.
jimmy801
En respuesta a Portal web
Hola @webportal
pero solucionaste tu problema?
BR
Palanqueta
Portal web
En respuesta a jimmy801
En realidad no.
Mi intención era calcular las ventas de los últimos 365 días en un flujo de datos, pero como es tan complicado, lo haré en R, exportaré los resultados a un archivo txt y luego leeré ese archivo txt y lo combinaré con el fuente de datos.
¡Gracias por tu ayuda!
jimmy801
Hola @webportal
puede usar la función de grupo y usar esta función para sumar su tabla agrupada, pero aplicarla antes de un filtro de fecha.
each List.Sum(Table.SelectRows(_,each _[Date]>= Date.From(Date.AddYears(DateTime.FixedLocalNow(), -1)))[Sales])
aqui el codigo completo
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTK00DM00DMyADGVYnWggqZ6BiboggaGekCEJGgEEjTXM7DAEDTWM7DUM7REEQSZaQwXjAUA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Customer = _t, Date = _t, Sales = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Customer", Int64.Type}, {"Date",type date}, {"Sales", Int64.Type}}, "de-DE"),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Customer"}, {{"SalesLast365Days", each List.Sum(Table.SelectRows(_,each _[Date]>= Date.From(Date.AddYears(DateTime.FixedLocalNow(), -1)))[Sales]), type number}})
in
#"Grouped Rows"
transforma esto
dentro de esto
Copie y pegue este código en el editor avanzado en una nueva consulta en blanco para ver cómo funciona la solución.
Si esta publicación ayuda o resuelve su problema, márquelo como solución (para ayudar a otros usuarios a encontrar contenido útil y reconocer el trabajo de los usuarios que lo ayudaron)
Los saludos también son buenos
Divertirse
Palanqueta