根据 BIRT 中的下一行计算值

Compute value based on next row in BIRT

我正在创建一个 BIRT 报告,其中每一行都是与采购订单匹配的收据。每个采购订单通常有不止一张收据。我的客户希望采购订单上的 qty_remaining 仅显示在每个采购订单的最后一张收据上。我无法在 BIRT 获取数据之前更改数据。我看到了两种可能的解决方案,但我无法找到实现方法。这个问题将涉及第一个可能的解决方案。

如果我可以将采购订单编号 (po_number) 与下一行进行比较,那么我可以将当​​前行的 qty_remaining 设置为 0 如果 po_number 匹配 else show实际 qty_remaining。是否可以访问下一行?

编辑

所需的外观与此类似:

| date | receipt_number | po_number | qty_remaining | qty_received | |------|----------------|-----------|---------------|--------------| | 4/9 | 723 | 6026 | 0 | 985 | | 4/9 | 758 | 6026 | 2 | 1 | | 4/20 | 790 | 7070 | 58 | 0 | | 4/21 | 801 | 833 | 600 | 0 |

但我目前得到这个:

| date | receipt_number | po_number | qty_remaining | qty_received | |------|----------------|-----------|---------------|--------------| | 4/9 | 723 | 6026 | 2 | 985 | | 4/9 | 758 | 6026 | 2 | 1 | | 4/20 | 790 | 7070 | 58 | 0 | | 4/21 | 801 | 833 | 600 | 0 |

我认为你看错了。如果您想要类似于 for 循环的行为,您应该使用分组和聚合函数。您可以通过使用(或不使用)组页眉和页脚来构建非常复杂的内容。

在你的情况下,我会尝试将收据分组到 po_number。按 receipt_number 排序,然后在 receipts_number 上有一个像 MAX 或 LAST 这样的聚合函数,并将其命名为 'last_receipt'。它应该聚集在组上,而不是整个 table。此 'total' 可用于组内的每一行。 然后,您可以使用 visibitly 设置仅在 row['receipt_number'] == row['last_receipt']

时显示 qty_remaining