Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenas tardes,tengo el siguiente esquema:
Me interesa mostrar la evolución mensual del número de reclamaciones recibidas con respecto al de ventas, incluyendo todos los periodos intermedios en los que no haya ventas ni reclamaciones, para ello he creado un calendario maestro con todos los periodos.
Esto hace que en las tablas y gráficas aparezcan a 0 los meses que no tienen reclamaciones ni ventas, pero en el momento en el que aplico algún filtro (por ejemplo, quiero ver la evolución mensual en un país concreto, o para un cliente concreto) solo veo los meses que tengan algún dato en la LinkTable.
He probado marcando la opción “Mostrar todos los valores” en la dimensión mes. Esto casi me vale, el único problema es que me muestra SIEMPRE todos los meses. Incluso cuando filtro por meses veo todos los meses, pero los que no están seleccionados están a 0 y me parece que eso puede liar a los usuarios.
¿Cómo puedo hacer para ver todos los meses con independencia de los filtros que aplique, a excepción de cuando filtro por mes? Muchas gracias.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Para más detalle añado el script de creación:
Fact_Ventas:
LOAD IdVenta,
IdProducto as temp_idproducto,
UnidadesVenta,
FechaVenta,
Year(FechaVenta) * 100 + Month(FechaVenta) as temp_periodo,
Pais as temp_pais
Resident Ventas;
Fact_Reclamaciones:
LOAD IdRec,
IdProducto as temp_idproducto,
1 as UnidadesReclamacion,
FechaRec,
Year(FechaRec) * 100 + Month(FechaRec) as temp_periodo,
Motivo,
Envasadora as temp_envasadora,
Pais as temp_pais
Resident Reclamaciones;
Fact_Producciones:
LOAD IdProd,
IdProducto as temp_idproducto,
UnidadesProd,
FechaProd,
Year(FechaProd) * 100 + Month(FechaProd) as temp_periodo,
Envasadora as temp_envasadora,
Pais as temp_pais
Resident Producciones;
DROP Table Ventas;
DROP Table Reclamaciones;
DROP Table Producciones;
LinkTable:
LOAD
IdVenta,
temp_idproducto as IdProducto,
temp_periodo as Periodo,
FechaVenta as temp_fecha,
temp_pais as Pais
Resident Fact_Ventas;
Concatenate (LinkTable)
LOAD IdRec,
temp_idproducto as IdProducto,
temp_periodo as Periodo,
FechaRec as temp_fecha,
temp_envasadora as Envasadora,
temp_pais as Pais
Resident Fact_Reclamaciones;
Concatenate (LinkTable)
LOAD IdProd,
temp_idproducto as IdProducto,
temp_periodo as Periodo,
FechaProd as temp_fecha,
temp_envasadora as Envasadora,
temp_pais as Pais
Resident Fact_Producciones;
DROP Field temp_idproducto;
DROP Field temp_envasadora;
DROP Field temp_periodo;
DROP Field temp_pais;
Temp_Rango_Calendario:
LOAD
Min(temp_fecha) as FechaMinima,
Max(temp_fecha) as FechaMaxima
RESIDENT LinkTable;
LET vFechaMin = Peek('FechaMinima', 0, 'Temp_Rango_Calendario');
LET vFechaMax = Peek('FechaMaxima', 0, 'Temp_Rango_Calendario');
DROP Field temp_fecha;
DROP TABLE Temp_Rango_Calendario;
Calendario:
LOAD DISTINCT
Year(Temp_Fecha) * 100 + Month(Temp_Fecha) as Periodo,
Year(Temp_Fecha) as Año,
Month(Temp_Fecha) as Mes,
'Q' & Ceil(Month(Temp_Fecha)/3) as Trimestre;
LOAD DISTINCT
MonthStart($(vFechaMin) + IterNo() - 1) as Temp_Fecha
AUTOGENERATE (1)
WHILE $(vFechaMin) + IterNo() - 1 <= $(vFechaMax);
LET vFechaMin = Null();
LET vFechaMax = Null();
Hola Juana Mari:
Puedes añadir a la expresión del gráfico un sumando que siempre devuelva valor 0 para todos los meses seleccionados, ignorando cualquier otra selección de campo que pueda realizar el usuario. Por ejemplo, si la expresión calculada en el gráfico es:
=sum(venta)
y el usuario puede seleccionar mes, envasadora, producto, pais y cliente, la nueva expresión quedaría como sigue:
=rangesum(sum(venta),sum({<envasadora=,producto=,pais=,cliente>} 0))
El gráfico además debe estar configurado para permitir mostrar valores 0 y tener desactivada la propiedad "Mostrar todos los valores" de la dimensión.
Espero que te sea útil.
Un saludo
Hola Juana Mari.
Yo tuve el mismo problema. Tienes que crear los registros nulos en el link table, es decir, crear registros con todas las fechas para todas tus ventas, reclamaciones y producciones.
Buenos días,
gracias por la respuesta, aunque no la entiendo muy bien.
Cada una de mis ventas, reclamaciones o producciones tiene su fecha. No puedo duplicar esta información con otras fechas porque sería información incorrecta.
Podría añadir todos los periodos para todos los productos, envasadoras y países, sin asociar ningún id de reclamación, venta o producción, pero eso va a producir que mi link table crezca muchísimo, ya que manejo muchos datos, lo que llevará aparejado una pérdida de rendimiento.
Hola Juana Mari:
Puedes añadir a la expresión del gráfico un sumando que siempre devuelva valor 0 para todos los meses seleccionados, ignorando cualquier otra selección de campo que pueda realizar el usuario. Por ejemplo, si la expresión calculada en el gráfico es:
=sum(venta)
y el usuario puede seleccionar mes, envasadora, producto, pais y cliente, la nueva expresión quedaría como sigue:
=rangesum(sum(venta),sum({<envasadora=,producto=,pais=,cliente>} 0))
El gráfico además debe estar configurado para permitir mostrar valores 0 y tener desactivada la propiedad "Mostrar todos los valores" de la dimensión.
Espero que te sea útil.
Un saludo
Muchas gracias, pero no me sirve.
Creo que no me he explicado bien, igual con unas imágenes se entiende mejor
Estas son la gráfica y la link table que tengo antes de aplicar ningún filtro:
En realidad solo están en la link table registros que tienen un producto asociado, el reto de registros aparecen porque qlikview une las tablas link table y calendario a través del campo periodo.
Como veis en la gráfica puedo ver la evolución a través del tiempo, ya que aparecen todos los meses, a pesar de tener meses en los que no ha habido ninguna reclamación, ni venta, ni producción.
Pero si filtro por país (o cualquier otro campo que no esté en la tabla del calendario) tengo lo siguiente:
Me quedo solo con los registros que tienen pais = 'PAIS1', por lo que desaparecen los meses en los que no ha habido ninguna reclamación, venta o producción.
En esta gráfica no se puede ver bien la evolución a través del tiempo, porque hay un salto desde abril hasta diciembre, que debería aparecer a 0.
Necesitaría que, al filtrar por país, no me descarte los registros nulos. He pensado en añadir una acción al aplicar un filtro, que incluya también los elementos nulos, pero no me queda claro cómo puedo seleccionar registros a nulo....
Quizá el problema esté en la expresión usada. En la captura que te adjunto creo que se logra el efecto que buscas. Si te fijas los datos existentes en la tabla de hechos sólo corresponden a los meses de enero, marzo, abril y diciembre pero se muestran todos los meses incluso con la selección de pais = 'PAIS1'. Te adjunto el ejemplo.
Si te es posible, por favor, sube un fichero qvw de ejemplo para poder analizarlo con detalle.
Por otro lado la selección de registros nulos es posible usando la sentencia NullAsValue*listacampos en el script de carga pero no creo que sea una solución para el problema que planteas.
Un saludo
Buenas tardes,
tenías razón, se trataba de un error en la expresión. Una vez corregido el error tu expresión funciona perfectamente.
Muchas gracias!