2011-08-18 38 views
7

這應該是一個簡單的問題JasperReports。我試圖對整個報告做一個簡單的計數器,這個計數器應該基於一個條件來增加。然而,無論我嘗試什麼,似乎計數器變量總是被遞增,而不管變量表達式如何。我的變量的定義屬性如下:JasperReports計數器變量總是遞增的

整數
計算計數
復位型報告
增量型
變量表達式$F{on_target}.doubleValue() >= 0.0
初值Integer.valueOf(0)

我在數據集總共23行,以及基於準則,計數器應該最終等於18.我有變量輸出在概要樂隊,與評價時間現在。然而,不論評價時間,甚至設置變量表達式Boolean.valueOf(true == false),變量的值總是最終成爲23

我忘記了是什麼簡單的小東西?

回答

4

我想我已經明白了。這使得隱約沒有意義,但是......(請注意,這是我第一次使用Jasper Variables,所以這是試錯)。

變量表達式不是一個完全布爾型,其中如果表達式爲假,計數器類型變量不會增加,就像您想的那樣。如果表達式中有任何值被評估,則該變量增加。因此,對我來說,什麼結束了工作如下:

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

注意空的使用如果表達式應該是假的。

它使模糊,扭曲的感覺。但絕不是直覺。哦,好吧,那麼...

或者換句話說:

當您使用計算:計算一個碧玉定義的變量的功能你想要的變量表達式到:

  • 決心非空值到增量櫃檯
  • 解析爲值,如果你不想增加計數器

這就是爲什麼上面列出的測試工作

+0

COUNT函數計算所有非零值,包括零和1。所以任何布爾值都會被計數。這與SQL COUNT函數的工作原理類似。因此,您需要返回一個NULL來不計數行是有意義的。你可以做的另一種方法是彙總布爾值。這樣你就不需要爲NULL返回NULL。 – Tom

2

除了設置變量表達爲:

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

也嘗試變量的initialValueExpression設置爲0

1

這爲我工作:

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

沒有初始變量值必要。