代码之家  ›  专栏  ›  技术社区  ›  jackscorrow

BIRT-如何在单个文本元素的不同位置插入不同的数据集行

  •  0
  • jackscorrow  · 技术社区  · 4 年前

    我正在编写一份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
    

    但当我运行报告时,它不起作用,值为空。 我做错了什么?

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

    0 回复  |  直到 4 年前
        1
  •  0
  •   bw_üezi    4 年前

    您现在有一个数据集 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可能不会这样“理解”它)
    请尝试 <VALUE-OF>var result = ''; if (foo) { result = bar }; result;</VALUE-OF> 并使用以下命令将scriptlet格式化为多行代码 result; 最后一行。这就像我们将scriptlet视为某种编程语言中的函数,函数的最后一行是 return result .

    推荐文章