【发布时间】:2013-03-01 17:30:42
【问题描述】:
我创建了一个变量来为我的报告保留一个位置中所有机械零件 ID 的计数。这很好用,现在我想添加一个过滤器,其中仅当机械零件 ID 的数量 > 0 时才计算它们。
这是我必须开始的:
变量名称:PART_COUNT
变量类类型:Java.lang.Integer
计算类型:计数
重置类型:组
重置组:LOCATION_ID
增量类型:无
变量表达式:$F{MACHINERY_PART_ID}
我的报告中的一个字段设置如下:
文本字段表达式类:Java.lang.Integer
评估时间:分组
评估组:LOCATION_ID
文本字段表达式:$V{PART_COUNT}
新条件是 count(machinery_part_id) group by location_id 数量 >0
$F{MACHINERY_PART_ID} 和 $F{QUANTITY_SENT} 都是 java.lang.double 字段,我尝试在变量表达式中输入以下内容:
New Double($F{QUANTITY_SENT} > 0.00 ? $F{QUANTITY_SENT}.doubleValue() : 0d)
但它会出错:
Syntax error, insert ";" to complete BlockStatements
我正在使用 iReport 3.0.0
请帮忙, 谢谢!
【问题讨论】:
-
也许我的解释不正确,但看起来你的变量和字段是整数,而你的变量表达式“New Double($F{QUANTITY_SENT...) 正在寻找创建一个双精度数?您的表达式语言是设置为 Java 还是 Groovy?
-
表达式语言是Java。
-
我尝试将变量表达式更改为:'($F{QUANTITY_SENT} > 0.00 ? $F{QUANTITY_SENT} : 0d)' 并且错误为'The operator > is undefined for the argument type (s) 双倍,双倍'
-
我将变量类类型和文本字段表达式类切换到 java.lang.double 并尝试
New Double($F{QUANTITY_SENT}.doubleValue() > 0.00 ? $F{QUANTITY_SENT}.doubleValue() : 0d)它不再出错,但它只排除了 $F{QUANTITY_SENT} 为空的记录。 $F{QUANTITY_SENT}=0.00 的记录仍在统计中。