按顺序过滤 Birt 表

Filter in serial order for Birt tables

我在 Birt 报告中有一个 table,我想在其中显示客户流程的最后 10 个处理时间。一个简单的 "Bottom n" 过滤器就可以很好地解决问题 - 但我的客户来了。他说他想要像我创建的底部 10 table,但没有由单一进程产生的不一致的值,运行 每月只喜欢一次。

所以 table 应该显示最后的 10 个处理时间,但它应该只包含特定进程在一个月内超过总 运行 进程的 0.01% 的进程.

我尝试了一个额外的过滤器,它只显示 运行 频率超过总进程 0.01% 的进程 - 但现在我的结果 table 是空的。

是否有可能实现Birt 首先过滤掉所有处理少于进程总数0.01%的进程,然后然后 构建预过滤结果集的后 10 列表?我无法更改 SQL 数据集,因为它也在其他一些 table 中使用。

这是我的过滤器,如果我只应用其中一个过滤器,它们工作正常 - 两者一起我收到一个空结果集。

<list-property name="filter">
  <structure>
    <property name="operator">ge</property>
    <expression name="expr" type="javascript">row["TOTAL"]/row["Ov_TOTAL"]</expression>
    <simple-property-list name="value1">
      <value>0,01</value>
    </simple-property-list>
    <property name="updateAggregation">true</property>
  </structure>
  <structure>
    <property name="operator">bottom-n</property>
    <expression name="expr" type="javascript">row["AVG_DURATION"]</expression>
    <simple-property-list name="value1">
      <value>10</value>
    </simple-property-list>
    <property name="updateAggregation">true</property>
  </structure>
</list-property>

我试了一下,它对我有用。与您的示例的唯一区别是,在我的例子中,在应用过滤器时已经计算了比率:请参阅下面的 "shareVolume" 列。

<list-property name="filter">
    <structure>
        <property name="operator">ge</property>
        <expression name="expr" type="javascript">row["shareVolume"]</expression>
        <simple-property-list name="value1">
            <value>0.01</value>
        </simple-property-list>
        <property name="updateAggregation">true</property>
    </structure>
    <structure>
        <property name="operator">bottom-n</property>
        <expression name="expr" type="javascript">row["value2"]</expression>
        <simple-property-list name="value1">
            <value>3</value>
        </simple-property-list>
        <property name="updateAggregation">true</property>
    </structure>
</list-property>

为了实现这一点,我计算了数据集中的比率。我刚刚添加了两个计算列:SQL 没有变化,使用相同数据集的其他现有报表组件仍然可以正常工作。