2011-08-18 16 views
7

To powinno być proste pytanie na JasperReports. Próbuję wykonać prosty licznik w całym raporcie, który powinien być zwiększany na podstawie warunku. Jednak niezależnie od tego, co próbuję, wydaje się, że zmienna licznika jest zawsze inkrementowana, niezależnie od wyrażenia zmiennej. Właściwości mojego zmiennej rozdzielczości są poniżej:Zmienna licznika JasperReports zawsze rosnąca

Klasa: Integer
Obliczanie: Hrabia
Wyczyść Typ: Zgłoś
typ Przyrost : Brak
zróżnicowaną ekspresję: $F{on_target}.doubleValue() >= 0.0
Wartość początkowa: Integer.valueOf(0)

że w sumie 23 rzędów w zbiorze danych, a na podstawie kryteria, licznik powinien ostatecznie równać 18. Mam zmienną wydajność w Podsumowanie zespół, z Czas oceny do Teraz. Jednakże, niezależnie od czasu oceny, a nawet ustawienie zróżnicowaną ekspresję do Boolean.valueOf(true == false), wartość zmiennej zawsze kończy jako 23.

Co prosty drobiazg jestem zapominając?

Odpowiedz

4

Myślę, że mam to. To nie ma większego sensu, ale ... (chodzi mi o to, że po raz pierwszy pracuję z Jasper Variables, więc to była próba i błąd).

Wyrażenie zmienne nie jest w pełni wartością logiczną, w której zmienna licznika nie jest zwiększana, jeśli wyrażenie jest fałszywe, jak mogłoby się wydawać. Zmienna jest zwiększana, jeśli wartośćzostała obliczona w wyrażeniu. Tak więc, dla mnie, co skończyło się pracy jest poniżej:

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

Uwaga wykorzystanie null jeśli wyrażenie powinno być fałszywe.

Ma niejasny, zakręcony sens. Ale w żaden sposób nie jest intuicyjny. No cóż, więc idzie ...

lub innymi słowy:

Kiedy używasz Obliczenie: Hrabia funkcję Jasper zdefiniowanej zmiennej chcesz Zmienna Expression do:

  • postanowienie niezerowa wartość do przyrost licznik
  • resolve do zerowej wartości jeśli nie nie chcą zwiększyć licznik

Dlatego testy wymienione powyżej działa

+0

Funkcja COUNT zlicza wszystkie wartości inne niż zerowe, zer i jedynek. Więc policzymy każdą wartość boolowską. Jest to podobne do działania funkcji SQL COUNT. Więc ma sens, że musisz zwrócić wartość NULL, aby nie liczyć wiersza. Innym sposobem, w jaki mógłbyś to zrobić, byłoby SUM wartości logiczne. W ten sposób nie musiałbyś zwracać wartości NULL dla fałszu. – Tom

2

Jak również ustawienie zmienna wyrażenie:

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

Spróbuj również ustawienie initialValueExpression zmiennej 0.

1

ten pracował dla mnie:

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

Nie początkowa wartość zmiennej konieczne.

Powiązane problemy