2011-08-18 87 views
7

Esto debería ser una pregunta simple en JasperReports. Estoy tratando de hacer un contador simple sobre todo el informe que debería incrementarse en función de una condición. Sin embargo, sea lo que sea que intente, parece que la variable de contador siempre se está incrementando, independientemente de la expresión de la variable. propiedades de definición de mi variables son a continuación:Variable de contador JasperReports siempre incrementando

Clase: Entero
Cálculo: Conde
tipo de reset: Informe
tipo Incremento : Ninguno
expresión variable: $F{on_target}.doubleValue() >= 0.0
Valor inicial: Integer.valueOf(0)

Tengo un total de 23 filas en el conjunto de datos, y basado en el criterio, el contador debería ser igual a 18. Tengo la salida variable en el Resumen banda, con Tiempo de evaluación a Ahora. Sin embargo, independientemente del tiempo de evaluación, e incluso establecer el expresión variable a Boolean.valueOf(true == false), el valor de la variable siempre termina como 23.

Qué cosa poco sencilla me estoy olvidando?

Respuesta

4

Creo que lo tengo. Esto no tiene ningún sentido, pero ... (ojo, esta es la primera vez que trabajo con Jasper Variables, por lo que fue de prueba y error).

La expresión variable no es exactamente un booleano, donde una variable de tipo contador no se incrementa si la expresión es falsa, como se podría pensar. La variable se incrementa si hay cualquier valor evaluado en la expresión. Por lo tanto, para mí, lo que terminó de trabajo es el siguiente:

$F{on_target} >= 0 ? 1 : null

Nota el uso de nulo si la expresión debe ser falsa.

Tiene un sentido vago y retorcido. Pero de ninguna manera es intuitivo. Oh bien, así va ...

o en otras palabras:

Cuando se utiliza el cálculo : Count función de una variable definida Jasper desea que el expresión variable a:

  • determinación de no nulo valor a incremento el contador
  • determinación de un nulo valor si lo hace no quiere incrementar el contador

Es por eso que la prueba enumerados anteriormente funciona

+0

La función COUNT cuenta todos los valores no nulos, tanto ceros como unos. Entonces cualquier booleano sería contado. Esto es similar a cómo funciona la función CUENTA SQL. Por lo tanto, tiene sentido que deba devolver un NULL para no contar una fila. Otra forma en que podría haberlo hecho sería sumar los valores booleanos. De esa forma no necesitarías devolver un NULL para un falso. – Tom

2

Además de la configuración la expresión variable a:

$F{on_target} >= 0 ? 1 : null 

Pruebe también establecer el initialValueExpression de la variable a 0.

1

Esto funcionó para mí:

$F{on_target} >= 0 ? 1 : BigDecimal.ZERO 

Sin valor de la variable inicial necesaria.

Cuestiones relacionadas