Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Saludos comunidad.
requiero su apoyo para resolver el siguiente problema de campos acumulados
probe algunas opciones que anexo enseguida pero no me funcionaron.
RangeSum(Peek('Acumulado'), VENTA) AS Acumulado,
numsum(VENTA,Peek(ACUMULADO)) as ACUMULADO,
una me acumula demasiada informació y la otra me muestra nulo.
necesito repressentar elsiguiente scorecard
donde Acum 2015(6) mostrará la suma acumulada de cada mes.
alguna opción con la que me apoyen.
saludos
Hola Agustín:
Se puede construir a través de expresiones en tabla pivotante, con un resultado similar al ejemplo que propones en cuanto a visualización, o creando una tabla de acumulados. Te adjunto un ejemplo con ambas soluciones.
La primera se basa en la función BEFORE de la tabla pivotante que evalúa la suma de importes en las 12 columnas anteriores, si existen. He incluido una expresión "max(Año)" en el análisis de conjuntos para que sea sensible a la selección del año actual y contemple el año anterior:
rangesum (before(sum({<Año={$(=max(Año))}>} Importe),1,12), sum({<Año={$(=max(Año))}>} Importe))
Cada fila, incluida la suma de importes, es una expresión. Tiene la desventaja que no es sensible a la selección de meses ya que el cálculo se basa en al visualización de los meses anteriores pero depende de los resultados que se quieran mostrar.
La segunda opción se basa en el cálculo de una tabla acumulada en tiempo de carga. La manera más sencilla es resolverlo con un bucle que recorra la tabla de datos 12 veces y calcule los importes acumulados para todos los años de forma separada. Ambas tablas se asociarían a través del campo común [Mes.Año]
// Calcular acumulados
for i=1 to 12
_AcumuladosMesAño:
load
MonthName(makedate(Año,$(i),1)) as Mes.Año,
sum(Importe) as Acumulado
resident _ImportesMesAño
Where Mes<=$(i)
group by Año
order by Fecha;
next
Esta opción es más eficiente, especialmente si el volumen de datos es alto. Además es sensible a la selección de meses y años, ya que se utilizan como dimensiones. Por esta misma razón la visualización debe ser ligeramente diferente a la que propones.
Espero que te sea útil.
Un saludo
Hola Agustin,
El campo que pones 'Acumulado' en el Peek de donde sale?
Esto lo quieres hacer en script si o si?
Mas que nada saber que te propones,
Saludos,
Mira a ver si te sirve de ayuda lo siguiente:
Codigo |
---|
Origen: LOAD Mes, año, Ventas FROM Book1.xlsx (ooxml, embedded labels, table is Sheet1); Final: LOAD Mes as Mes_final, año as Año_final, Ventas as Ventas_final, if( IsNull(Peek(Acumulado)) or año<>Peek(Año_final),Ventas,Peek(Acumulado) +Ventas) as Acumulado Resident Origen order By año,Mes; |
Hola Agustín, lo de que acumule de más puede ser porque no se está teniendo en cuenta que acumule solo por año:
If(Año=Peek(Año), RangeSum(Peek('Acumulado'), VENTA), VENTA) as Acumulado,
....
FROM / Resident ....
Order by Año, Mes;
Jordi.
buen día el campo acumulado lo creo en el script a travez de la expresion
en realidad son las ventas acumuladas mensualmente
saludos
Hola Agustin.
No seria mas fácil realizar 2 tablas pivotantes en la que te calcule las ventas y otra los acumulados.
Es mi forma de razonar pero al final tu decides.
Te adjunto unos pasos que espero te pueda ayudar.
Luis:
gracias si había contemplado realizar la opcion de dividirlo, pero como ultima instancia de cualquier forma, sigo haciendo
pruebas y comentaré los resultados en cuanto los tenga
saludos
Hola Agustín:
Se puede construir a través de expresiones en tabla pivotante, con un resultado similar al ejemplo que propones en cuanto a visualización, o creando una tabla de acumulados. Te adjunto un ejemplo con ambas soluciones.
La primera se basa en la función BEFORE de la tabla pivotante que evalúa la suma de importes en las 12 columnas anteriores, si existen. He incluido una expresión "max(Año)" en el análisis de conjuntos para que sea sensible a la selección del año actual y contemple el año anterior:
rangesum (before(sum({<Año={$(=max(Año))}>} Importe),1,12), sum({<Año={$(=max(Año))}>} Importe))
Cada fila, incluida la suma de importes, es una expresión. Tiene la desventaja que no es sensible a la selección de meses ya que el cálculo se basa en al visualización de los meses anteriores pero depende de los resultados que se quieran mostrar.
La segunda opción se basa en el cálculo de una tabla acumulada en tiempo de carga. La manera más sencilla es resolverlo con un bucle que recorra la tabla de datos 12 veces y calcule los importes acumulados para todos los años de forma separada. Ambas tablas se asociarían a través del campo común [Mes.Año]
// Calcular acumulados
for i=1 to 12
_AcumuladosMesAño:
load
MonthName(makedate(Año,$(i),1)) as Mes.Año,
sum(Importe) as Acumulado
resident _ImportesMesAño
Where Mes<=$(i)
group by Año
order by Fecha;
next
Esta opción es más eficiente, especialmente si el volumen de datos es alto. Además es sensible a la selección de meses y años, ya que se utilizan como dimensiones. Por esta misma razón la visualización debe ser ligeramente diferente a la que propones.
Espero que te sea útil.
Un saludo
Santiago.
buen día muchas Gracias, tu opción me funciono perfectamente, no se si con las otras opciones hacia algo mal por que no trabajaba como a los ejemplos que ponían los compañeros
saludos