BIRT,如何使用 Javascript 获取数据集行数

问题描述 投票:0回答:5

如何从 BIRT 中的 Javascript 函数获取数据集行计数。我尝试在 BIRT 交换中搜索此内容,但那里提供的唯一解决方案是让新数据集获取所需数据集的值的计数。这不适合我的需要。 有没有办法使用数据集事件来获取它。

report birt
5个回答
11
投票

一种简单的方法是对报表变量中的数据集项目进行计数。

  • 在报告大纲中声明一个新变量: enter image description here

  • 在数据集的beforeOpen脚本中重置它(以防在报告执行过程中多次调用该数据集):

    vars["items"]=0;

  • 增加数据集的onFetch脚本中的变量:

    vars["items"]++;

  • 在任何表达式中使用变量。 例如,在报告正文中添加动态文本元素,例如:

    “项目数=”+vars[“项目”]

重要事项 1:当且仅当数据集绑定到至少一个报表元素(表格、图表、数据元素等)时,此方法才有效。例如,如果仅调用数据集来填充报表参数的选择列表,则它将不起作用。

重要2:在报表正文中,此变量只能在使用相关数据集的第一个报表元素之后使用,否则不会被初始化


1
投票

多米尼克有一个很好的答案;从您的问题中我不清楚这个更简单的解决方案是否也可以满足您的需求。

在您的数据集中使用值为“1”的计算列,然后对这些值求和。

您可以编写仅在满足特定条件时才添加值的 JS。

或者您可以在报告上使用聚合来对值进行求和,这将在放置任何过滤器或组之后进行。


1
投票

如果您在表页脚中使用行号,则有一种更简单的方法:

Row number

在“动态文本”元素中,您可以选择:

Avilable Column Bindings
>
Table
>
RowNum

添加 1,因为索引以 0 开头。


0
投票

您还可以创建一个变量,然后为表中创建的每一行添加该变量。

例如,在 Table-Detail 脚本中,设置一个 onCreate 事件来检查每一行中是否有值,如果有则增加行数。以下 onCreate 脚本将检查该行是否为空。如果该行不为空,脚本会增加计数器并转到下一行。

var checker = this.getRowData().getExpressionCount();
if( checker > 0 ) vars["Counter"]++;

然后您可以使用以下表达式在表格后添加动态文本: “行数=”+vars[“计数器”]


0
投票

向数据集中添加一个新的计算列,这是基于任何特定列的 COUNT 的聚合(id 最有意义) Add computed column to Data Set

然后您可以在报告的其他部分引用变量

row["numRows"]
,例如更改表的可见性。在此示例中,我只想在数据集中恰好有 1 个结果时显示表格

Set visibility based on number of rows in the result

© www.soinside.com 2019 - 2024. All rights reserved.