是否有某种方式可以回收Crystal Reports数据集?

问题描述:

我正在尝试编写一个Crystal报表,其总计以主报表的不同方式分组。到目前为止,我能做到这一点的唯一方法是使用总报告的子报告,但这意味着必须再次击中数据源才能检索相同的数据,这看起来像是无稽之谈。下面是一个简化的例子:是否有某种方式可以回收Crystal Reports数据集?

 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 

在这个例子中,主报告由“日期”分组,但总计由“源”附加分组。我查了一些使用运行总数的例子,但他们并没有真正做我需要的。是不是有一些存储结果集的方法,并且主报表和子报表引用都是相同的数据?

嗯......就像从报告中调用存储过程并将其全部包含在一个位置一样好,但是我们发现(像您一样)您最终达到了无法获取晶体的点做你想做的甚至是数据就在那里。

我们最后介绍了一个位于报表下的业务层,而不是从报表中“拉”数据,我们将数据集“推”到其中,并将数据绑定到报表。优点是您可以在数据集或对象中的代码中处理数据,然后到达报告,然后将数据简单地绑定到报告。

This article关于如何设置将数据推送到报告有一个很好的介绍。我了解您的时间/业务限制可能不会允许您这样做,但如果完全可能,我会强烈建议您这样做,因为这意味着我们可以将所有“编码”从我们的报告中删除并转换为托管代码一件好事。

我可以想到做到这一点的唯一方法是在没有第二次运行数据的情况下,通过创建一些公式来执行每组运行总计。我假设你遇到的问题是现有运行总数,他们打算跟随他们总计的每个组。由于您似乎希望在所有“原始”数据之后遵循小计,因此这种方式无效。

如果您为每个组创建了自己的公式,只需将这些公式添加到与组匹配的行中,那么您应该能够将它们放在报表的末尾。这种方法的不利之处在于,由此产生的小计与团体之间的关系不会动态。换句话说,如果你有一个新的“源”,它将不会显示在小计中,直到你添加它,或者如果你没有“走狗”数据,你仍然会有一个小计。