2011-08-18 16 views
7

Questa dovrebbe essere una semplice domanda su JasperReports. Sto provando a fare un semplice contatore sull'intero rapporto che dovrebbe incrementare in base a una condizione. Comunque, qualunque cosa provi, sembra che la variabile contatore sia sempre incrementata, indipendentemente dall'espressione della variabile. proprietà della definizione del mio variabili sono al di sotto:Variabile contatore JasperReport sempre incrementata

Classe: Integer
Calcolo: Conte
reset Tipo: Rapporto
tipo Incremento : Nessuno
espressione variabile: $F{on_target}.doubleValue() >= 0.0
Valore Iniziale: Integer.valueOf(0)

Ho un totale di 23 righe nel set di dati, e sulla base di i criteri, il contatore dovrebbe alla fine essere uguale a 18. Ho l'output variabile nel Riepilogo banda, con Tempo di valutazione a Ora. Tuttavia, indipendentemente dal tempo di valutazione, e anche l'impostazione del espressione variabile a Boolean.valueOf(true == false), il valore della variabile finisce sempre come 23.

cosa semplice piccola cosa sto dimenticando?

risposta

4

Penso di averlo capito. Questo non ha assolutamente senso, ma ... (badate bene, è la prima volta che lavoro con Jasper Variables, quindi è stato un tentativo ed un errore).

L'espressione variabile non è un valore booleano, in cui una variabile del tipo di contatore non viene incrementata se l'espressione è falsa, come si penserebbe. La variabile viene incrementata se c'è qualsiasi valore valutato nell'espressione. Così, per me, quello che ha finito per lavoro è al di sotto:

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

nota l'utilizzo di null se l'espressione dovrebbe essere falsa.

Rende un senso vago e contorto. Ma non è in alcun modo intuitivo. Oh bene, così va ...

o in altre parole:

Quando si utilizza il Calcolo: Contare funzione di una variabile Jasper definita si desidera che il Variabile Espressione a:

  • volontà di non-null valore a incremento il contatore
  • volontà di un nulla valore se non vogliono incrementare il contatore

Ecco perché il test di cui sopra funziona

+0

La funzione COUNT conta tutti i valori non Null, entrambi zero e uno. Quindi qualsiasi booleano sarebbe contato. Questo è simile a come funziona la funzione COUNT SQL. Quindi ha senso che devi restituire un valore NULL per non contare una riga. Un altro modo in cui avresti potuto farlo sarebbe SUM i valori booleani. In questo modo non avrai bisogno di restituire un NULL per un falso. – Tom

2

Così come l'impostazione la variabile espressione a:

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

Prova anche l'impostazione del initialValueExpression della variabile a 0.

1

Questo ha funzionato per me:

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

Nessun valore variabile iniziale necessaria.