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: 
jorge_redondo
Contributor III
Contributor III

Filtro en una tabla pivotante mediante deslizador (%)

Hola amigos!

Tengo una tabla pivotante tal que:

Tabla.png

La columna 'Dto.' viene dada por:

Expresión.png

Desearía implementar un deslizador que filtrara los registros en base al descuento realizado a nivel de ticket. Lo he intentado con variables, expresiones en el propio slider... pero no he conseguido los resultados esperados.

¿Alguna sugerencia?

Muchas gracias por anticipado!

1 Solution

Accepted Solutions
hector_munoz
Specialist
Specialist

Hola Jorge,

Te cuento... Como la expresión 'Dto.' es la que vamos a utilizar para filtrar las filas de la tabla, esta no puede hacer referencia a ninguna otra expresión y tiene que tener una formulación al nivel más bajo. Dicho esto, donde antes se invocaban a las expresiones 'Neto' y 'PVP' he puesto sus fórmulas originales:

Neto:

sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Importe] / 1.21)

PVP:

sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Precio Venta] * Cantidad)

, y el resultado sería:

1 - ((sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Importe] / 1.21) * 1.21) / // 1 - ((Neto * 1.21) /

          sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Precio Venta] * Cantidad))), // PVP)

Entonces, combinando esto con la funcionalidad del deslizador, la fórmula de la expresión 'Dto.' quedaría (a alto nivel):

If(Descuento >= vDtoMin AND Descuento <= vDtoMax,

   If(Descuento = 0,

      0.0001,

      Descuento))

, donde pone Descuento, sería la fórmula del apartado anterior. La lógica empleada sería:

  1. Comprobar si el descuento está dentro de los límites seleccionado por el usuario
    1. Si el descuento está dentro del límite miro su cuantía
      1. Si es cero pongo 0.0001 para que no sea 0 exacto pero sí que aparezca 0% en la tabla y no se borre al tener el Suprimir Valores Cero.
      2. Si no es cero pongo el descuento tal cual.
    2. Pongo 0 automáticamente porque quiero que este registro no se muestre (Suprimir Valores Cero)

Luego en el resto de expresiones compruebo si el descuento es 0 para poner un 0 o su valor (ejemplo de Cantidad):

If(Dto. > 0, sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} Cantidad))

Espero haberme explicado bien... no obstante te paso un ejemplo.

Saludos,
H

View solution in original post

10 Replies
jorge_redondo
Contributor III
Contributor III
Author

He utilizado la expresión en el slider:

=aggr(

  1-(sum({$ <

  [ID Operación]={'V'},

  [Fecha Operación] = {'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}

  > } ([OP Importe])/1.21)

  /

  sum({$ <

  [ID Operación]={'V'},

  [Fecha Operación] = {'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}

> } [OP Precio Venta]*Cantidad)),[ID Documento])

Pero no da los resultados esperados. Me gustaría emplear una expresión en lugar de variables, pero ya me da igual mientras funcione 🙂

hector_munoz
Specialist
Specialist

Hola Jorge,

Una solución rápida es poner una condición a cada una de las expresiones del gráfico de la forma:

If([Dto.] = vdDescuento, <expresión_actual>, 0)

, combinada con el 'Suprimir valores Cero' te haría lo que necesitas, sin necesidad de seleccionar nada.

En el deslizador, para los límites, le puedes poner como inicio el 0 y como fin el descuento máximo de cualquier ticket (con la función Aggr()).

Además puedes usar 2 variables vdDescuentoInicial y vdDescuentoFinal para emplear tramos.

Espero que te sirva.

Saludos,
H

jorge_redondo
Contributor III
Contributor III
Author

Muchas gracias, Héctor.

Estoy intentando seguir tus indicaciones pero algo debo estar haciendo mal... La expresión me da error (aunque llega a funcionar a medias ya que cuando no está dentro del rango de descuentos muestra un 0 pero no omite la línea (aún estando chequeada la opción "suprimir valores cero"

2017-03-01 18_42_02-QlikView x64 - Copia de Partner - [E__Trabajo_APP JLArenas local_jlarenas_ftp3.q.png

jorge_redondo
Contributor III
Contributor III
Author

!Adjunto el QVW por si fuera más práctico...

Gracias a todos por adelantado!

hector_munoz
Specialist
Specialist

Hola Jorge,

Te cuento... Como la expresión 'Dto.' es la que vamos a utilizar para filtrar las filas de la tabla, esta no puede hacer referencia a ninguna otra expresión y tiene que tener una formulación al nivel más bajo. Dicho esto, donde antes se invocaban a las expresiones 'Neto' y 'PVP' he puesto sus fórmulas originales:

Neto:

sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Importe] / 1.21)

PVP:

sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Precio Venta] * Cantidad)

, y el resultado sería:

1 - ((sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Importe] / 1.21) * 1.21) / // 1 - ((Neto * 1.21) /

          sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Precio Venta] * Cantidad))), // PVP)

Entonces, combinando esto con la funcionalidad del deslizador, la fórmula de la expresión 'Dto.' quedaría (a alto nivel):

If(Descuento >= vDtoMin AND Descuento <= vDtoMax,

   If(Descuento = 0,

      0.0001,

      Descuento))

, donde pone Descuento, sería la fórmula del apartado anterior. La lógica empleada sería:

  1. Comprobar si el descuento está dentro de los límites seleccionado por el usuario
    1. Si el descuento está dentro del límite miro su cuantía
      1. Si es cero pongo 0.0001 para que no sea 0 exacto pero sí que aparezca 0% en la tabla y no se borre al tener el Suprimir Valores Cero.
      2. Si no es cero pongo el descuento tal cual.
    2. Pongo 0 automáticamente porque quiero que este registro no se muestre (Suprimir Valores Cero)

Luego en el resto de expresiones compruebo si el descuento es 0 para poner un 0 o su valor (ejemplo de Cantidad):

If(Dto. > 0, sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} Cantidad))

Espero haberme explicado bien... no obstante te paso un ejemplo.

Saludos,
H

jorge_redondo
Contributor III
Contributor III
Author

Hector! sin palabras! muchísimas gracias. No sólo me has dado la solución si no que me abriste los ojos, pero bueno.. es lo que tiene cuando uno sabe lo que hace y no se dedica a reutlizar código sin saber muy bien qué pone dónde lo pone !! La clave está en tu primer párrafo, que no creas... he tenido que leerlo y releerlo varias veces.

Gracias, una vez más.

hector_munoz
Specialist
Specialist

Jajajaja, me alegro de que te sirva!

Saludos,
H

jorge_redondo
Contributor III
Contributor III
Author

Pues estamos aquí de nuevo... El escenario anterior me había quedado claro, pero resulta que al pretender que se actualice el valor un objeto de texto dependiendo del dichoso Dto., no lo consigo.

La expresión utilizada en el cuadro de texto es:

// Si el valor está dentro del rango de DESCUENTO...

= If((1 - ((sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Importe] / 1.21) * 1.21) /

        sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Precio Venta] * Cantidad))) >= vDtoMin

     

          AND

       

  (1 - ((sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Importe] / 1.21) * 1.21) /

        sum({$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>} [OP Precio Venta] * Cantidad))) <= vDtoMax,

// ENTONCES dibuja la expresión..

  num(sum({$ <

  [ID Operación]={'V'},

  [Fecha Operación] = {'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}

  > }[OP Precio Medio]*Cantidad),'#.##0,00;-#.##0,00'))

... Pero no da los resultados, dibuja alguna cifra equivocada a medida que se desplaza el slider, pero nada...

Nuevamente acudo en auxilio! alguna sugerencia?

hector_munoz
Specialist
Specialist

Hola,


Creo que el problema estaría en las agrupaciones que haces. Ahora al hacerlo en un objeto de texto y no en un gráfico, y perder las dimensiones, tienes que cambiar el enfoque y utilizar solo una función de agregación; en tu caso el Sum()...

Prueba lo siguiente:

sum(<set analysis> If((<calculo_descuento>) >= vDtoMin AND (<calculo_descuento>) <= vDtoMax, <metrica>))

, donde:

  • <set analysis> = {$<[ID Operación]={'V'},[Fecha Operación]={'>=$(=Date(vFecha))<=$(=Date(vFechaMax))'}>}
  • <calculo_descuento> = 1 - ([OP Importe] / ([OP Precio Venta] * Cantidad))
  • <metrica> = [OP Precio Medio]*Cantidad

Ánimo y espero que te sirva...

Saludos,

H