3

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

       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

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

4

2 回答 2

2

嗯......就像从报告中调用存储的过程并将其全部包含在一个位置一样好,但是我们发现(像您一样)您最终达到了无法获得水晶来做您想做的事情的地步即使数据就在那里。

我们最终引入了位于报表下方的业务层,而不是从报表中“拉”数据,而是将数据集“推送”到它并将数据绑定到报表。优点是您可以在数据到达报表之前在数据集或对象的代码中对其进行操作,然后简单地将数据绑定到报表。

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

于 2008-08-12T23:29:57.007 回答
1

我能想到的唯一方法是在没有第二次遍历数据的情况下这样做,那就是创建一些公式来计算每组的运行总数。我假设您在使用现有运行总计时遇到的问题是它们旨在跟踪它们总计的每个组。由于您似乎希望在所有“原始”数据之后跟随小计,因此这是行不通的。

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

于 2008-08-12T12:28:06.280 回答