Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Operaciones con valores calculados en text box

Buenos días a tod@s,

Tengo un informe de diseño bastante complejo basado en text box con cálculos, porcentajes, costes unitarios... Me pareció buena idea crearlo así, ya que visualmente es muy potente para la cantidad de datos que contiene, pero ahora me piden a menudo bastantes modificaciones o variaciones de algunos elementos, y me ayudaría mucho poder utilizar los valores calculados en las text box digamos "madre" para los cálculos de % y costes unitarios, en lugar de tener que cargar todas las fórmulas en todas las text box, ya que en algunos casos son bastante complejas, pero sobre todo porque cuando me piden algún cambio tengo que modificar "a mano" todas las fórmulas.

¿Es posible tomar el resultado calculado en una text box y usarlo para un cálculo (% o coste unitario) en otra?

Para que se entienda algo mejor:

Tengo la Text box "TX3636", con este cálculo :

=Money(sum ({<Código_Mapeo={'D_SS_SP'},Año={$(vG.AñoActual)}>} (EURODEBE-EUROHABER))+ (sum ({<[Informe de Reporte]={'Gastos Estructura'},Año={$(vG.AñoActual)}>} (EURODEBE-EUROHABER))))     

es igual a XXXX Eur.

Y la Text Box "TX3637", con este otro:

=num((sum({<Año={$(vG.AñoActual)}>} Jornadas_ETT)+sum({<Año={$(vG.AñoActual)}>} jornales)),'#.000')

igual a YYYY jornadas.

Por ahora me veo obligado a repetir las fórmulas, para calcular el coste por jornada, (que tengo calculadas en  TX3638) :

=Money(sum ({<Código_Mapeo={'D_SS_SP'},Año={$(vG.AñoActual)}>} (EURODEBE-EUROHABER))+ (sum ({<[Informe de Reporte]={'Gastos Estructura'},Año={$(vG.AñoActual)}>} (EURODEBE-EUROHABER)))

/ (sum({<Año={$(vG.AñoActual)}>} Jornadas_ETT)+sum({<Año={$(vG.AñoActual)}>} jornales)),'#.000'))

Si ahora me piden una modificación en TX3636, tengo que modificar la fórmula en TX3636 y en TX3638 (en la realidad tengo que cambiar la fórmula hasta 40 text box, lo que es insufrible).

Si tomamos como ejemplo el primero, si pudiera usar una expresion tipo TX3636(value)/TX3637(Value) simplificaría enormente el mantenimiento ante cualquier cambio en los cálculos principales.

Supongo que si es posible no será muy complicado, pero no encuentro nada al respecto en la Community o los manuales...

🙂

Gracias anticipadas!

5 Replies
rubenmarin

Hola Juan, creo que no puedes hacer referencia tal como lo explicas, igual con macros se podría hacer pero, si se puede hacer, también sería muy engorroso. Cuando me encuentro algo así suelo intentar crearme variables para centralizar las modificaciones, en las expresiones solo uso las variables, por ejemplo:

LET vexSaldo = Replace(Replace('sum ({<Código_Mapeo={|D_SS_SP|},Año={#(vG.AñoActual)}>} (EURODEBE-EUROHABER))+ (sum ({<[Informe de Reporte]={|Gastos Estructura|},Año={#(vG.AñoActual)}>} (EURODEBE-EUROHABER)))'

, '|', Chr(39)), '#', '$');

// Al no poder usar apóstrofes (cortarían la cadena) ni $ (trataría de evaluar la expresión), se utilizan otros caracteres y luego se sustituyen. en este caso uso | en vez del apóstrofe y # en vez del $.

Así la expresión del TX3636 sería:

Money($(vexSaldo))

Y la del TX3638 podría ser:

Money($(vexSaldo)/$(vexJornales),'#.000')


De esta forma solo tienes que modificar la variable para que se aplique en todos los objetos donde se utilice.

Anonymous
Not applicable
Author

Tiene sentido, lo pruebo y te comento.

Muchas gracias Ruben !

rubenmarin

Una cosa que se me había olvidado, por ejemplo en el caso de la expresión de ejemplo vexSaldo sería recomendable tenerla entre paréntesis, tal como la he credao antes el TX3638 no se calcularía bien, ya que se quedaría:

Sum( ) + Sum ( ) / Sum( ) // al hacerlo así solo estaría diviendo por el 2º Sum() de vExSaldo

Lo correcto sería:

Money(($(vexSaldo))/$(vexJornales),'#.000')


Para evitar olvidos con esto de los paréntesis mejor crear la variable entre paréntesis cuando incluye más de una operación:

LET vexSaldo = Replace(Replace('(sum ({<Código_Mapeo={|D_SS_SP|},Año={#(vG.AñoActual)}>} (EURODEBE-EUROHABER))+ (sum ({<[Informe de Reporte]={|Gastos Estructura|},Año={#(vG.AñoActual)}>} (EURODEBE-EUROHABER))))'

, '|', Chr(39)), '#', '$');

Anonymous
Not applicable
Author

Correcto, ya me he dado cuenta. Funciona perfecto, lo he probado para al año actual y el anterior, muchas gracias, ya estoy con el rediseño completo.

Miguel_Angel_Baeyens

Aparte de la solución ofrecida por Rubén, puedes hacer cambios globales a una expresión o a todas las expresiones usando la Vista Previa de Expresión en la pantalla de Settings dentro de QlikView Desktop.

Si la expresión es idéntica, es decir, en todos y cada uno de los textboxes, ya sea numerador o denominador, la expresión es la misma, usaría esta opción antes de usar variables que igualmente requieren de mantenimiento y sobre todo, pueden afectar al rendimiento.