BIRT 4.4.0参数在运行时变得圆滑

时间:2014-11-12 08:24:53

标签: sql-server stored-procedures birt

我们有BIRT 4.4.0报告,其中包含十进制数据类型的报告参数。 报表参数在数据集预览结果中向上/向下舍入到最接近的10(当报表运行时,我们已将问题缩小到数据集)。 例如。如果参数是 0-4,向下舍入为0 5-9,最多10个 10-14轮到10轮 15-20轮到20 : : 90-94轮到90 95-100轮到100

数据库是SQLServer 2012.该问题尚未针对其他数据库进行测试。

.rptdesign未包含在内,因为下面的各种测试会更改它,您可以使用空白报告。 问题出在DataSet中,您不需要运行报表,而是预览DataSet中的结果。

重现的步骤 1)使用BIRT 4.4.0设计器,Java 1.7 u25(jdk-7u25-windows-i586.exe),SQLServer 2012

2)

Create a database (AlbumsDB) with a table (Albums) with the following columns
Title   varchar(50)  not null
Cost    decimal(18,0) not null
Type    char(10) not null

3)

Populate with the following 3 rows
   Title         Cost          Type
   APPLE          0               D
   ABBEY ROAD     1               D
   BEATLES        2               D

4)创建一个空白报告 5)为SQLServer创建数据源 6)创建数据集

BIRT中的数据集查询是使用表中的列选择(而不是键入)创建的。 请保持格式如图所示,仅使用光标定位并双击列/表名称进行选择。

select dbo.Albums.Title,
dbo.Albums.Cost,
dbo.Albums.type
from dbo.Albums
where dbo.Albums.Cost = ?

查询参数:

Name: param_1
Native Name: greyed out and not enterable
Data Type: Decimal
Direction: Input
Default Value: 2
Linked to Report Parameter: None

默认参数设置为2,因此测试将生成正确的Cost = 2行,或者向下舍入并生成不正确的Cost = 0行。

测试

1)当以这种格式设置SQL语句时, - "预览结果'在数据集中产生了错误的结果(向下舍入的Cost = 0行) - .rptdesign文件没有nativeDataType属性

2)编辑sql并将表名提升到与选择的最后一列相同的行时:

select dbo.Albums.Title,
dbo.Albums.Cost,
dbo.Albums.type from dbo.Albums
where dbo.Albums.Cost = ?
  • " Peview结果"在数据集中生成了正确的结果(Cost = 2行)
  • .rptdesign文件没有nativeDataType属性

3)当sql的格式为

select dbo.Albums.Title, dbo.Albums.Cost,
dbo.Albums.type 
from dbo.Albums
where dbo.Albums.Cost = ?

select dbo.Albums.Title,.Albums.Cost,.Albums.type 
from dbo.Albums
where dbo.Albums.Cost = ?

也就是说,选中的部分或全部列与"选择",保持"来自"在另一条线上 - "预览结果'在数据集中产生了错误的结果(向下舍入的Cost = 0行) - .rptdesign文件没有nativeDataType属性

4)当整个SQL放在一行

select dbo.Albums.Title,.Albums.Cost,.Albums.type from dbo.Albums where dbo.Albums.Cost = ?
- the "Peview Results " in the Data Set produced the correct result  (the Cost=2 row)
- the .rptdesign file now had the correct  nativeDataType attribute `<propert name="nativeDataType">3</property>`

5)在语句中引入任何空格(空格)时:

select                dbo.Albums.Title,
dbo.Albums.Cost,
dbo.Albums.type
from dbo.Albums
where dbo.Albums.Cost = ?
- the "Preview Results' in the Data Set produced the wrong result  (the rounded down Cost=0 row)
- the .rptdesign file had an incorrect nativeDataType attribute `<property name="nativeDataType">0</property>`

在上面的所有测试中,如果还原了SQL格式,则nativeDataType属性保留在.rptdesign文件中。 它改变了&#34; 0&#34;到&#34; 3&#34;当&#34;来自dbo.Albums&#34;被带到和#34;选择&#34;。

的同一行

6)将nativeDataType行添加到.rptdesign没有任何效果,直到步骤6d) a)编辑了初始的.rptdesign(没有nativeDataType)和#1中创建的sql格式,并添加了<property name="nativeDataType">3</property> - &#34;预览结果&#39;在数据集中产生了错误的结果(向下舍入的Cost = 0行) b)然后添加<property name="nativeName"></property> - &#34;预览结果&#39;在数据集中产生了错误的结果(向下舍入的Cost = 0行)

c)然后添加<property name="isOptional">false</property> - &#34;预览结果&#39;在数据集中产生了错误的结果(向下舍入的Cost = 0行)

d)当对SQL语句的格式稍有改动时(从db.Albums&#34;到最后一列选定行),CDReport.rptdesign产生正确的结果

1 个答案:

答案 0 :(得分:0)

如果结果取决于SQL语句的格式(尽管语句的语义相同,但结果不同),正如您在d)中提到的那样,这绝对是一个错误,无论是在BIRT 4.4.1还是在JDBC驱动程序(或在SQL Server中,但我不这么认为)。

要查看错误实际发生的位置,您应该

  • 使用BIRT 4.2.1

  • 测试相同的报告
  • 在某些SQL-JDBC IDE中测试SQL语句(完全相同的语句,使用bind vars!)(对于Oracle,这将是SQL Developer,我不知道是否有类似的东西可用于MS SQL服务器)或缺少这样的IDE,在一个独立的Java程序中。

  • 使用不同的JDBC驱动程序测试相同的报告