Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
alexis_garcia
Creator II
Creator II

Acumulado actual comparado con acumulado anterior

Hola,

Comento mi problema a ver si alguien puede saber cómo afrontarlo.

Tengo los siguientes datos:

Un valor por cada Año, Mes y Edificio.

Necesito hacer una gráfica de líneas con la dimensión "Mes y Año" y 2 expresiones:

Expresión 1: Acumulado del Mes actual + los 11 meses anteriores

Expresión 1: Acumulado del Mes actual del año anterior + los 11 meses anteriores.

Lo intento con Set Analysis, pero el problema es que la dimensión es Mes y Año, con lo que el Set Analysis no funciona.

En el script se podría hacer con GROUP BY´s?

Gracias.

Saludos.

1 Solution

Accepted Solutions
jmmayoral3
Creator
Creator

Para cumular el YTD (desde el inicio del año hasta el periodo actual) tienes que crearte 2 variables. Una que contenga el primer periodo del año y otra con el periodo actual. Yo siempre tomo como fecha actual la mayor de todas las seleccionadas (en caso de que se puedan seleccionar varios meses). A cada registro tendrás que añadirle un campo llamado Periodo en el formato YYYYMM. Puedes hacerlo con la fórmula (año*100 + Mes).

La primera variable SET vL.InicioAño = '=num(MAX(Año)&'01')' (si la creas en el editor de variables,debe comenzar por el signo igual '='

La variable con el periodo actual: SET vL.PeriodoActual =  '=MAX(Periodo)'  ó ((MAX(Año))*100) + MAX(Mes)

Después, para saber el acumulado de este año:

SUM ({<Año=,Mes=, Día=, Periodo={">=$(vL.InicioAño) <=$(vL.PeriodoActual)"}>} Campo_A_Sumar)

Para el acumulado del año anterior, crea estas otras 2 variables:

           SET vL.InicioAñoAnterior =  '=num(MAX(Año)-1&'01')'

           SET vL.PeriodoAñoAnterior '=((MAX(Año)-1)*100) + MAX(Mes)'

SUM ({<Año=,Mes=, Día=, Periodo={">=$(vL.InicioAñoAnterior) <=$(vL.PeriodoAñoAnterior)"}>} Campo_A_Sumar)

View solution in original post

8 Replies
Anonymous
Not applicable

Buen día

Te comento para este tipo se análisis entre fechas yo utilizo o creo un campo extra de periodo y periodoID con estos campos en particular puedo hacer comparaciones entre años y meses anteriores, que incluyen valores acumulados de forma mas sencilla,

Year(Temp_Fecha) * 100 + Month(Temp_Fecha) as [Periodo]

una ves listo este campo, se genera el Periodo_ID

AutoNumber(Periodo, 'PeriodoID') as [PeriodoID],   // esto como precedent

y mediante set Analisys

se puede hacer estos analisis

Mes Actual 

Sum({<PeriodoId = {'<=$(=Max(PeriodoId)) >=$(=Max(PeriodoId)-11)'},[Año Cartera] = ,[Mes Cartera] =,[Dia Cartera] =,[Semana Cartera] =  >}Resolución)

Mes Actual Año Anterior

Sum({<PeriodoId = {'<=$(=Max(PeriodoId)-12) >=$(=Max(PeriodoId) -23)'},[Año Cartera] = ,[Mes Cartera] =,[Dia Cartera] =,[Semana Cartera] =  >}Resolución)

Estas expresiones se usan valores acumulados, se puede aplicar en el set analisys

Espero te oriente a tu solución estimado Alexis

hector_munoz
Specialist
Specialist

Hola Alexis,

Creo que tu problema se podría solucionar con la función RangeSum() combinada con la función Above().

Para la primera expresión: RangeSum(Above(Sum(Ventas), 0, 12))

Para la segunda: RangeSum(Above(Sum(Ventas), 12, 12))

Te adjunto un ejemplo por si te sirve.

Saludos,

H

alexis_garcia
Creator II
Creator II
Author

Hola Jose Antonio,

Tengo esto en el script:

SELECT AÑO, MES , ID, SUM(CANTIDAD) OVER (PARTITION BY ID, AÑO ORDER BY AÑO *100 + MES) AS CANTIDAD_ACUMULADA

FROM MI_TABLA;

Pero necesito traducir esa sentencia de Oracle para poder hacerla sobre una tabla Resident.

Por lo que veo, podría solucionarlo con lo que comentas, porque es igual.

Voy a probar.

Muchas gracias a todos.

Saludos.

alexis_garcia
Creator II
Creator II
Author

Muchas gracias a todos,

Consigo acumular los últimos 12 meses, pero cómo lo hago para que acumule por año? es decir, que si estamos en 2017 y no está el año completo, que acumule los meses que hay. Si ha transcurrido el año completo, que acumule los 12 meses.

Gracias.

Saludos.

Anonymous
Not applicable

Que tal Alexis

Año Actual

Sum({<PeriodoId = {'<=$(=Max(PeriodoId))'},Año = {'$(=Max(Año))'},[Mes Cartera] =,[Dia Cartera] =,[Semana Cartera] =  >}Resolución)

En teoría con esta sentencia toma el año actual y solo acumula los meses de este año que están vigentes 

_k0zm0_2
Contributor III
Contributor III

Buenas, antes que nada indicar que ésto viene de Qlik Sense y usando un Calendario.

En mi caso, almaceno una variable (v_AñoActual) que defino así: year(Today()), por lo que podrías simplificarlo.

Para cualquier cálculo, uso set Análisis, así:

sum({<Año={">=$(=$(v_AñoActual)) <=$(=$(v_AñoActual)) "}>}[CAMPO])

Sería más o menos lo que pides. El rango >= y <= es heredado de otros requisitos, podrías ponerlo como = directamente.

Pero si necesito los 12 meses anteriores, aunque caiga en otro año, creo un flag en el Calendario:

If(monthstart($(vCampoFecha)) > monthstart(addmonths($(vToday),-12)) and monthstart($(vCampoFecha)) <= monthstart(Today()),1 ,0 as _R12 // Últimos 12 meses (a partir de hoy)

Edit: Con Set Análisis:

     sum({<_R12={1}>}[CAMPO]) //Últimos 12 meses desde hoy (ignora los cambios de año)



Y si necesito los 12 meses anteriores a esos 12, para comparar, evolutivos... Uso otro flag:


If( monthstart($(vCampoFecha)) > monthstart(addmonths($(vToday),-25)) and monthstart($(vCampoFecha)) <= monthstart(addmonths($(vToday),-13)) ,1 ,0 ) as _R1212// 12 meses anteriores (a partir de hace un año)

Edit: Con Set Análisis:

     sum({<_R1212={1}>}[CAMPO]) //12 Meses previos a los últimos 12 meses desde hoy


Edit: quedaría tal que así

     <--- 12 meses previos [_R1212] ---><---12 meses anteriores [_R12] ---> HOY

Con estos flags, ten en cuenta que, en una gráfica, el campo [Mes] típico de calendario no serviría ya que el mes mayor debería ser el actual.

Por ejemplo: queremos poner una gráfica de los últimos 12 meses a día de hoy (16/06/2017), el último mes sería Junio, no Diciembre. Por lo que tendremos que preparar otro campo (yo lo llamo [Mes*]) y hacer que sea la medida de nuestro gráfico

jmmayoral3
Creator
Creator

Para cumular el YTD (desde el inicio del año hasta el periodo actual) tienes que crearte 2 variables. Una que contenga el primer periodo del año y otra con el periodo actual. Yo siempre tomo como fecha actual la mayor de todas las seleccionadas (en caso de que se puedan seleccionar varios meses). A cada registro tendrás que añadirle un campo llamado Periodo en el formato YYYYMM. Puedes hacerlo con la fórmula (año*100 + Mes).

La primera variable SET vL.InicioAño = '=num(MAX(Año)&'01')' (si la creas en el editor de variables,debe comenzar por el signo igual '='

La variable con el periodo actual: SET vL.PeriodoActual =  '=MAX(Periodo)'  ó ((MAX(Año))*100) + MAX(Mes)

Después, para saber el acumulado de este año:

SUM ({<Año=,Mes=, Día=, Periodo={">=$(vL.InicioAño) <=$(vL.PeriodoActual)"}>} Campo_A_Sumar)

Para el acumulado del año anterior, crea estas otras 2 variables:

           SET vL.InicioAñoAnterior =  '=num(MAX(Año)-1&'01')'

           SET vL.PeriodoAñoAnterior '=((MAX(Año)-1)*100) + MAX(Mes)'

SUM ({<Año=,Mes=, Día=, Periodo={">=$(vL.InicioAñoAnterior) <=$(vL.PeriodoAñoAnterior)"}>} Campo_A_Sumar)

alexis_garcia
Creator II
Creator II
Author

Muchas gracias a todos.

Al final lo he podido solucionar combinando varias opciones que comentáis.

A parte, mi problema era que en el eje de las X, tenía la dimensión Mes-Año interanual y se tenía que acumular por meses que no aparecían en la dimensión.

Muchísimas gracias.

Es un placer seguir aprendiendo día a día con todos vosotros.

Saludos.