是否有某种回收Crystal Reports数据集的方法?

时间:2020-03-05 18:39:08  来源:igfitidea点击:

我正在尝试编写一个Crystal Report,该报告的汇总方式与主报表的分组方式不同。到目前为止,我唯一能够做到这一点的方法是对总计使用子报表,但这意味着必须再次击中数据源才能检索相同的数据,这似乎是胡说八道。这是一个简化的示例:

date   name   earnings   source          location
-----------------------------------------------------------
12-AUG-2008   Tom      .00   washing cars    uptown
12-AUG-2008   Dick    0.00   washing cars    downtown     { main report }
12-AUG-2008   Harry    .00   mowing lawns    around town

                    total earnings for washing cars: 0.00 { subreport }
                    total earnings for mowing lawns:  .00

       date   name   earnings   source          location
-----------------------------------------------------------
13-AUG-2008   John     .00   dog walking     downtown
13-AUG-2008   Jane    5.00   washing cars    around town  { main report }
13-AUG-2008   Dave     .00   mowing lawns    around town

                    total earnings for dog walking:   .00
                    total earnings for washing cars: 5.00 { subreport }
                    total earnings for mowing lawns:  .00

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

解决方案

回答

我可以想到的而没有第二次遍历数据的唯一方法就是通过创建一些公式来计算每组的总计。我认为我们正在遇到现有的运行总计的问题是,它们打算遵循它们总计的每个组。由于我们似乎希望小计跟随所有"原始"数据,因此此方法将无效。

如果我们为每个组创建自己的公式,而这些公式只是简单地将与该组匹配的行的总数相加,那么我们应该可以将其放在报表的末尾。这种方法的缺点是,所得小计与组的关系不会动态变化。换句话说,如果我们有一个新的"源",则在添加之前它不会显示在小计中;或者,如果我们没有"狗走路"的数据,那么我们仍然会有一个小计。

回答

嗯...从报表中调用存储的proc并将其全部包含在一个位置是一样的好,但是我们(像我们一样)发现,我们最终遇到了无法让Crystal来做我们自己的事情甚至希望数据在那里。

我们最终引入了一个位于报表下的业务层,而不是从报表中"推"数据,而是将数据集"推"到报表中,并将数据绑定到报表。好处是我们可以在数据或者对象中的代码到达报表之前对其进行操作,然后将数据绑定到报表。

本文很好地介绍了如何设置将数据推送到报表。我了解时间/业务限制可能不允许我们这样做,但是如果有可能,我强烈建议我们这样做,因为这意味着我们可以将所有"编码"从报告中删除,并移至托管代码中,一件好事。