Skip to main content
Announcements
Do More with Qlik - Qlik Cloud Analytics Recap and Getting Started, June 19: REGISTER
cancel
Showing results for 
Search instead for 
Did you mean: 
jorge_redondo
Contributor III
Contributor III

Comparar acumulado anual al día de la fecha.

Hola!

Necesito comparar las ventas acumuladas de dos años al día de la fecha. Por ejemplo, comparar este año (del 01/ene a fecha de ayer) con el mismo tramo del año anterior (01/ene/13 al 17/ene/13). ¿Cómo podría hacerlo? Actualmente cuento con esto un escenario como el que adjunto en la imagen. Eso me resuelve el problema si comparo meses sueltos (al poder seleccionar los días del mes a comparar) pero deja de tener utilidad si lo que pretendo es comparar el acumulado anual al dia de la fecha, para ello tengo que tirar de un calendario detallado por dias.

¿Alguna idea?

Muchas gracias !!QlikView.jpg

1 Solution

Accepted Solutions
luis_pimentel
Partner - Creator III
Partner - Creator III

Hola,

ahora si he podido probarlo. Para el calculo de YTDFlag haz lo siguiente (el truco está en el desplazamiento, que depende del año)

InYearToDate(Fecha_arq,today(),year(Fecha_arq)-year(today())) as YTDFlag

Y para la expresión (parece ser que verdadero es '-1' y falso '0', entrecomillado, me equivoqué en esto):

sum ( {$ <[Año_caja]={$(=Max(Año_caja))}, YTDFlag = {'-1'} > } NETO_arq)

Revisalo y ya me dirás.

Un saludo.

View solution in original post

7 Replies
luis_pimentel
Partner - Creator III
Partner - Creator III

Ese tipo de comparación lo puedes hacer de varias formas, pero yo te aconsejo la siguiente:

En tu script de carga, cuando cargas las fechas, crea un campo adicional denominado "YTDFlag" (Year To Date, por ejemplo). A este campos, que es un flag, le pones el valor 1 si el dia/mes es menos que el dia/mes actual (sin tener en cuenta el año). Y le pones un 0 en caso contrario. Qlikview tiene una función que hace precisamente esto:

InYearToDate (fecha, fechabase, desplazamiento [, primer_mes_del_año = 1])

devuelve verdadero si fecha cae dentro de la parte del año que contiene a fechabase hasta el último e incluido milisegundo de fechabase. El año puede desplazarse mediante desplazamiento. Desplazamiento es un entero, en el que el valor 0 indica el año que contiene a fechabase. Los valores negativos de desplazamiento indican años precedentes y los valores positivos indican años futuros. Si desea trabajar con años (fiscales) que no comiencen en enero, especifique un valor entre 2 y 12 en primer_mes_del_año.

Ejemplos:

inyeartodate ( '2006-01-25', '2006-02-01', 0 ) devuelve verdadero

inyeartodate ( '2006-01-25', '2006-01-01', 0 ) devuelve falso

inyeartodate ( '25/01/2005', '2006-02-01', -1 ) devuelve verdadero

Después, en el set analysis de tus expresiones del cuadro, le pones la condición de que  YTDFlag = {1} y listo.

Si tienes alguna duda peganos aquí las expresiones que tienes en el cuadro y te podremos ayudar mejor.

Un saludo.

Luis.

jorge_redondo
Contributor III
Contributor III
Author

Muchas gracias Luis!

He modificado el script añadiendo el flag como me has indicado. Lo cierto es que ando un poco verde con la sintaxis del Set Analisys. Intento introducir el modificador YTDFlag = {1} en las expresiones que tengo pero me da error.

sum ( {$ <[Año_caja]={$(=Max(Año_caja))} > } NETO_arq)

Adjunto el QVW por si sirve de ayuda.

Gracias mil !!

luis_pimentel
Partner - Creator III
Partner - Creator III

El fichero que adjuntas no está recargado, y no puedo hacer la prueba a añadir el YTDFlag para enseñarte la sintaxis, pero algo así tiene que funcionar (tras recargar el documento, claro):

sum ( {$ <[Año_caja]={$(=Max(Año_caja))}, YTDFlag = {1} > } NETO_arq)

Esto a parte de que, por lo que veo en el script, el YTDFlag no lo estás calculando bien, debes usar la función InYearToDate() que te indiqué arriba.

un saludo.

luis_pimentel
Partner - Creator III
Partner - Creator III

Por cierto, si YTDFlag = {1} no te funciona, prueba YTDFlag = {'1'}

Deberían valer el primer caso, pero por probar que no quede.

jorge_redondo
Contributor III
Contributor III
Author

Buenas de nuevo Luis!

Me he estado peleando un rato con la función de marras y nada, doy palos de ciego. Algo (o todo) debo hacer mal.

En la carga de datos, pongo:

Inyeartodate( Fecha_arq , Today(), 1) as YTDFlag, // he probado con 1, 0, -1..) lol.

Y en la expresión de la tabla pivotante pongo lo que me indicaste

sum ( {$ <[Año_caja]={$(=Max(Año_caja))}, YTDFlag = {1} > } NETO_arq)

Pero el resultado es 0 para todas las celdas.

Esta vez, adjunto el QVW recargado, por si te sirve de ayuda.

Mil gracias!

luis_pimentel
Partner - Creator III
Partner - Creator III

Hola,

ahora si he podido probarlo. Para el calculo de YTDFlag haz lo siguiente (el truco está en el desplazamiento, que depende del año)

InYearToDate(Fecha_arq,today(),year(Fecha_arq)-year(today())) as YTDFlag

Y para la expresión (parece ser que verdadero es '-1' y falso '0', entrecomillado, me equivoqué en esto):

sum ( {$ <[Año_caja]={$(=Max(Año_caja))}, YTDFlag = {'-1'} > } NETO_arq)

Revisalo y ya me dirás.

Un saludo.

jorge_redondo
Contributor III
Contributor III
Author

Mil gracias Luis!

Funciona a la perfección! tan sólo tuve que modificar el script restando 1 a la fecha actual ya que sólo dispongo en todo momento de los cierres de caja del día anterior

InYearToDate(Fecha_arq,(today()-1),year(Fecha_arq)-year((today()-1))) as YTDFlag,

Un saludo y gracias de nuevo!