BIRT:对齐列表元素中的行

时间:2016-10-31 10:10:32

标签: list birt

我使用Birt列表元素从左到右显示我的数据。 (参见this question作为参考)。例如。列出具有网格的元素,并将网格设置为内联。

我现在面临的问题是,网格中的不同行没有从左到右对齐(可能是由于某些行在某些字段中具有空值)。如何强制BIRT正确对齐?

编辑:

对于包含超过1行的较长文本,这尤其是一个问题。包装/多行应该由输出"中的所有列表元素反映。

1 个答案:

答案 0 :(得分:0)

不幸的是,我没有看到任何机会在通用案例中轻松完成 - 也就是说,如果事先知道记录数量,那么您需要不止一行:

student1 student2 student3
student4 student5

让我们称这些线"主线"。一条主线最多可包含3条记录。在您的情况下,数字3可能会有所不同,但我们可以假设它是一个常数,因为(至少对于PDF报告)纸张宽度是受限制的。

可能的解决方案可以这样工作:

在您的数据集中,为每行添加两列:MAIN_LINE_NUM和COLUMN_NUM,其含义很明显。例如,这可以使用分析函数(未经测试)使用纯SQL来完成:

select ...,
       trunc((row_number() over (order by ...whatever...) - 1) / 3) + 1 as MAIN_LINE_NUM,
       mod(row_number() over (order by ...whatever...) - 1), 3) +1 as COLUMN_NUM
from ...
order by ...whatever... -- The order must be the same as above.

现在你知道每条记录应该去哪里了。

接下来的任务是将结果集转换为每个记录看起来像这样的表单(例如,假设每个学生有3个属性STUDENT_ID,NAME,ADDRESS):

MAIN_LINE
STUDENT_ID_1
NAME_1
ADDRESS_1
STUDENT_ID_2
NAME_2
ADDRESS_2
STUDENT_ID_3
NAME_3
ADDRESS_3

你得到了照片......

实现这一目标的SQL技巧是人们应该知道的。

我将以STUDENT_ID_1,STUDENT_ID_2和NAME_1列为例展示此内容:

with my_data as
( ... the query shown above including MAIN_LINE_NUM and COLUMN_NUM ...
)
select MAIN_LINE_NUM,
       max(case when COLUMN_NUM=1 then STUDENT_ID else null end) as STUDENT_ID_1,
       max(case when COLUMN_NUM=2 then STUDENT_ID else null end) as STUDENT_ID_2,
       ...
       max(case when COLUMN_NUM=1 then NAME else null end) as NAME_1,
       ...
from my_data
group by MAIN_LINE_NUM
order by MAIN_LINE_NUM

如你所见,如果你需要很多不同的列,这是非常笨拙的。

另一方面,这使输出更容易。

  • 为数据集创建一个表项,包含3列(1,2,3)。最好不要将数据集拖到布局中。相反,使用" Insert元素"上下文菜单。

  • 每个列都需要一个明细行(STUDENT_ID,NAME,ADDRESS)。因此,再添加两个细节行(默认为一个细节行)。

  • 如果您愿意,可以手动添加标题标签,如果您不需要,也可以删除标题行(这是我假设的)。

  • 删除页脚行,因为您可能不需要它。

  • 将列拖动到表格中的相应位置。

表项现在应该如下所示(数据项):

+--------------+--------------+-------------+
+ STUDENT_ID_1 | STUDENT_ID_2 | STUDENT_ID3 | 
+--------------+--------------+-------------+
+ NAME_1       | NAME_2       | NAME_3      | 
+--------------+--------------+-------------+
+ ADDRESS_1    | ADDRESS_2    | ADDRESS_3   | 
+--------------+--------------+-------------+

那就是它!

与其他工具相比,这是BIRT吮吸恕我直言的少数几个例子之一。 Oracle Reports - 原谅我的Klatchian。