(我在我的答案的底部部分(标记为: 1 )中添加了基本的问题解决方案和基本理解,下面两个例子报告图形!)
DISTINCT COUNT
列字段上我真正喜欢的是 String
,但似乎对我来说所有聚合函数的行为就像模拟 FIRST(...)
一样。
我无法相信这种情况已经破裂,我似乎更有可能在这里遗漏一些非常奇怪的东西。
(我对JasperReports已经非常有经验,并且之前也在使用BIRT和其他报告框架。)
查看文档,我无法查看问题所在:http://www.jasperassistant.com/docs/guide/ch06s08.html
最后,我创建了附加 simple sample report(现在 another test-report-ext.jrxml ,它通过更好的结构,标记和sql生成的比较数据来增强这一点)基于示例数据库并更新到最新的5.5.1.final版本而没有任何进展。
请有人告诉我我失踪的秘密,或者我的大惊喜确保它确实是一个错误。 : - (
THX
Andreas: - )
正如您在报告中看到的,只有一些page header
和summary bands
,包含product id/name/cost
标签,name count
,cost count
,{{ 1}}以及名称的所有变体cost sum
(increment types
)。 report/column/page/none
拥有summary band
。 cost sum
仅包含detail band
。
但是没有一个聚合函数显示聚合数据,但只显示detail fields
结果。 (如果first(xxx)
显示第一行count(name)
列值而不是name
:-(),那就太奇怪了。
(我也在Jasper论坛上发布了这个问题,并会在重要的帖子上保持最新:http://community.jaspersoft.com/questions/824152/aggregate-functions-count-sum-broken-jaspersoft-studio-550final-and-551final)
solution for summary and header bands by user12...解决了这些问题,同时显示了设置的混乱 1 (显示test-report-ext-fixed.jrxml的结果):
我想为像我这样的人添加一些信息,(或者也许是为了我自己,如果我不得不在一段时间后再做一次,忘了特色;-))这可能会混淆和误导通过提供的设置选项,底层逻辑,(Eclipse)Jasper Studio工具提示和docus在我的答案的第一部分中提到...
正确理解/设置(据我所知):
number
,可以在某些生成步骤进行(重新)评估可以有 variables
(可以基于这些变量),可以在某些生成步骤中更新
使用汇总功能 ...
text fields
来声明 variables
! Reset Type
(例如 NONE
(默认情况下,如果未提供(使用XML格式)),Report
,Column
)
Page
必须与 Value Class Name
匹配
type of the final, aggregated result
=> Calculation = Count
Value Class Name = java.lang.Integer
也适用的情况下可能会混淆 2 : - /
java.lang.String
设置为Reset Type
,生成的报告会将None
显示为Title Band
,则可能类似于String
聚合函数的行为First
设置为Reset Type
(例如在玩游戏时将其修复),因此更加混乱和误导 2 None
字段上的Count
String
以前(正确)的设置,如果未调整为(通常)错误Value Class Name = java.lang.Integer
<,则会导致java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
/ LI>
Value Class Name = java.lang.Integer
=&gt; Calculation=Sum
Value Class Name = java.lang.Float
值Float
=&gt; Calculation=Sum
Value Class Name = java.lang.Integer
Integer
=&gt; Calculation=Sum
Value Class Name = java.lang.BigDecimal
设置为 text fields
以外的 Evaluation Time
,例如 Now
,如果他们在报告中的位置不在Report
之前,或者在他们的值是/之前可以计算查看基础数据处理步骤(我会说Summary Band
迭代)。
ResultSet
自动发生
Variables
已正确设置,但在Count
中使用了一些Title Band
Variable
仅相关,如果提供了 Increment Type
2 :应该通过更严格的Jasper Studio输入验证,提到的文档和Jasper Studio工具提示来解决这个问题!
答案 0 :(得分:1)
将resetType设置为“None”可能是您的问题(至少对于IdSum而言)。不知道为什么它最终会变成38。将resetType设置为“Report”或将其设置为空(默认为Report)以使其工作:
<variable name="IdSum" class="java.lang.Integer" calculation="Sum">
<variableExpression>$F{ID}</variableExpression>
</variable>
变量CostCnt也是如此,虽然它将是一个正常的总和,而不是一个独特的总和。
如果最终解决您的问题,请将解决方案发布到论坛中。
只需将TextFields评估时间从“立即”更改为“报告”,即可修复标题中的计算字段 变化
<textField>
<reportElement uuid="d30afc9a-40bc-4d5a-a4eb-15bf4f881acd" x="100" y="18" width="50" height="20" forecolor="#FF0000"/>
<textElement/>
<textFieldExpression><![CDATA[$V{NameCntNone}]]></textFieldExpression>
</textField>
到
<textField evaluationTime="Report">
<reportElement uuid="d30afc9a-40bc-4d5a-a4eb-15bf4f881acd" x="100" y="18" width="50" height="20" forecolor="#FF0000"/>
<textElement/>
<textFieldExpression><![CDATA[$V{NameCntNone}]]></textFieldExpression>
</textField>
为每个TextField执行此操作,您应该看到计算值。
答案 1 :(得分:0)
我忘了提一些简单的解决方案,以防有人遇到类似“破坏”,奇怪或不充分的聚合功能的问题,至少如果你有一些Oracle数据库或类似的聚合功能:
可以聚合查询级别的数据(当然与报告页面等无关),这可能有优点或缺点(内存占用,网络/流量,专业知识,等等)。 ..),例如:
select
x.*,
sum(distinct name) over () as name_cnt_distinct, -- of all results
count(distinct cost) over () as cost_cnt_distinct, -- of all results
count(*) over () as row_cnt, -- of all results
sum(cost) over (partition by trunc(cost/10)) as cost_sum_per_cost_range_10 -- per cost range 0..10, 10..20, 20...
from product
where id < 20
(在我看来也很好)
此外,如果您在报告和基于过滤数据(与我一样)的计算中使用某些过滤功能,则上述数据库视图可能没有帮助(因为它不知道过滤器)手前设置)。
Oracle为这个名为table functions
的{{3}}提供了一些非常方便的 parameterized view
(想到这里的“可过滤视图”)功能这样的情况可以帮助从显示/布局/图形/国际化逻辑中分离信息生成逻辑(数据库引擎很擅长)(报告引擎很擅长)