Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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)
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
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
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.
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.
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
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
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)
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.