0

我正在编写一份 BIRT 报告,这就是我的情况。我有一个文本元素,让我们这样说:

blue square: 111
blue triangle: 222
red circle: 333

目前是静态的,并且始终显示您看到的数字。我想让数字动态化,所以我创建了一个 SQL 查询并将其嵌入到数据集中。假设这是输出:

color        shape     count
blue         square    123
red          circle    456
blue         triangle  789

我想以这样一种方式设置它,使每个数据集行与文本文件中的正确行匹配,所以它会变成:

blue square: 123
blue triangle: 456
red circle: 789

并且会自动更新。

我已将文本元素与数据集绑定,并将其编写为测试:

blue square: <VALUE-OF>if (row["color"].toUpperCase() == "BLUE") { row["count"] }</VALUE-OF>
blue triangle: 222
red circle: 333

但是当我运行报告时它不起作用并且值为空白。我究竟做错了什么?

谢谢大家的帮助,如果您需要更多信息,请告诉我。

4

1 回答 1

0

您现在有一个带有row[color],的数据集row[shape]row[count]为了简化您想要的输出,我将在您的数据集中添加一个“计算列”。
例如row[output] = row[color] + ' ' + row[shape] + ': ' row[count]

添加计算列后,只需将数据集拖放到报告中(您现在有文本元素)并删除未使用的列。

提示:如果不知道“计算列”:
  使用谷歌图片搜索“鸟计算列示例”
  ,谷歌文本搜索可能会让你迷失在 birt 论坛列表中。

更新:您的脚本中可能有一些错字。在 BIRT 中,scriptlet 解析为自身内部的最后一个表达式。您的 scrptlet<VALUE-OF>if (foo) { bar }</VALUE-OF>没有最后一个表达式。
(这没有错,但 BIRT 可能无法以这种方式“理解”它)
尝试将 scriptlet 格式化为最后一行<VALUE-OF>var result = ''; if (foo) { result = bar }; result;</VALUE-OF>的几行代码。result;这就像我们将 scriptlet 视为某种编程语言中的函数并且函数的最后一行是return result.

于 2020-11-22T23:10:04.413 回答