Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

¿Problemas para crear fila acumulada?

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

1 Solution

Accepted Solutions
ssanchez
Partner - Contributor III
Partner - Contributor III

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:

FilaAcumuladaExpresion.png

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]

FilaAcumuladaScript.png

// 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

View solution in original post

8 Replies
sorrakis01
Specialist
Specialist

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,

Not applicable
Author

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;

rubenmarin

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;

Not applicable
Author

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

Not applicable
Author

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.

01.JPG

Not applicable
Author

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

ssanchez
Partner - Contributor III
Partner - Contributor III

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:

FilaAcumuladaExpresion.png

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]

FilaAcumuladaScript.png

// 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

Not applicable
Author

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