【问题标题】:BIRT - How to insert different data set rows in different places in a single text elementBIRT - 如何在单个文本元素的不同位置插入不同的数据集行
【发布时间】:2021-03-02 16:53:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: birt expressionbuilder


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 不幸的是,这不是一个选项。我在这里的例子只是一个更好地理解问题的例子,但在我的真实情况下,我无法使用数据集重现整行。我需要在一段文本中插入数据集的特定部分
    • @jackscorrow:关键是计算的列是你想要的。它仅与此处基本示例中的整行相同。使用计算列,您可以在数据集中创建一个(或多个)附加列,其中包含您想要的子集数据
    • 但我可以通过编辑下面的 SQL 查询来实现相同的目的。我想了解是否可以同时使用行标识符和列标识符来访问数据集,而不仅仅是列。这将使事情变得更容易,而不是计算额外的列或使下面的 SQL 查询复杂化。不知道我的解释是否正确......
    • 是的,“复杂化”SQL 也是可能的。我也不认为这是最佳做法。
    猜你喜欢
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2019-06-21
    • 1970-01-01
    相关资源
    最近更新 更多