我正在尝试编写一个水晶报告,其总计以与主报告不同的方式分组。到目前为止,我能够做到这一点的唯一方法是使用总计的子报表,但这意味着必须再次访问数据源才能检索相同的数据,这似乎是无稽之谈。这是一个简化的示例:

       date   name   earnings   source          location
-----------------------------------------------------------
12-AUG-2008   Tom      $50.00   washing cars    uptown
12-AUG-2008   Dick    $100.00   washing cars    downtown     { main report }
12-AUG-2008   Harry    $75.00   mowing lawns    around town

                    total earnings for washing cars: $150.00 { subreport }
                    total earnings for mowing lawns:  $75.00

       date   name   earnings   source          location
-----------------------------------------------------------
13-AUG-2008   John     $95.00   dog walking     downtown
13-AUG-2008   Jane    $105.00   washing cars    around town  { main report }
13-AUG-2008   Dave     $65.00   mowing lawns    around town

                    total earnings for dog walking:   $95.00
                    total earnings for washing cars: $105.00 { subreport }
                    total earnings for mowing lawns:  $65.00

在此示例中,主报告按“日期”分组,但总计还按“来源”分组。我查找了使用运行总计的示例,但它们并没有真正满足我的需要。是否有某种方法可以存储结果集并使主报表和子报表引用相同的数据?

有帮助吗?

解决方案

唔...从报告中调用存储过程并将其全部包含在一个位置中固然很好,但是我们发现(像您一样)您最终会达到一个点,即使在数据就在那里。

我们最终引入了一个位于报告下方的业务层,我们不是从报告中“提取”数据,而是将数据集“推送”到其中并将数据绑定到报告。优点是您可以在数据集或对象中的代码到达报表之前操作数据,然后只需将数据绑定到报表即可。

本文 关于如何设置将数据推送到报告有一个很好的介绍。我知道您的时间/业务限制可能不允许您这样做,但如果可能的话,我强烈推荐它,因为这意味着我们可以从报告中删除所有“编码”并放入托管代码中,这些代码始终是一件好事。

其他提示

我能想到的在不第二次运行数据的情况下执行此操作的唯一方法是创建一些公式来计算每组的运行总计。我假设您在现有运行总计中遇到的问题是,它们旨在遵循它们总计的每个组。由于您似乎希望在所有“原始”数据之后进行小计,因此这是行不通的。

如果您为每个组创建自己的公式,只需将与该组匹配的行的总数相加,您应该能够将它们放在报告的末尾。这种方法的缺点是所得小计与组的关系不是动态的。换句话说,如果您有一个新的“来源”,在您添加它之前它不会显示在小计中,或者如果您没有“遛狗”数据,您仍然会有它的小计。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top