Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola amigos!
Tengo una tabla pivotante tal que:
La columna 'Dto.' viene dada por:
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!
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:
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
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 🙂
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
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"
!Adjunto el QVW por si fuera más práctico...
Gracias a todos por adelantado!
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:
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
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.
Jajajaja, me alegro de que te sirva!
Saludos,
H
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?
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:
Ánimo y espero que te sirva...
Saludos,
H