在SSRS中使用多个数据集中的字段

时间:2012-04-26 23:38:34

标签: reporting-services ssrs-2008

我理解Crystal Reports已经失去了开发社区中的一些人的支持,也许是正确的:我在大约15年内没有使用它。但是当我这样做时,我可以唱歌。

也许这就是我发现SSRS如此令人失望的原因。该软件笨拙,非直观和一维。我上周一直在和它作斗争,我作为最后的手段在这里发帖。

我被迫完全在SQL Server表中创建我的报告,我不应该这样做。

例如:为什么我不能在文本框中使用表达式;

 Fields!Foo1.Value/Fields.Foo2.Value

其中Foo1在Dataset1中,而Foo2在Dataset2中。

如果这超出了软件的能力,那就没问题。我开始认为它是。

所以也许有人可以回答这个问题:有没有人知道Crystal Reports和Reporting Services之外的任何其他报告软件更通用?

3 个答案:

答案 0 :(得分:8)

我认为您现在已经解决了,但是如果您面临同样的问题,那么您可以在表达式中使用lookup
它使您可以浏览其他数据集的值,而两个数据集中都有一个公共字段

=Lookup(value in dataset1,value in dataset2, common field in both datasets, dataset name from which we need to get data)

答案 1 :(得分:6)

Crystal和SSRS都不允许您逐行直接比较两个不同数据集中的值。

两个工具中:

  • 如果两个数据集都来自同一个关系数据库,那么比较值的最简单方法是将两个数据集合并为一个查询。
  • 如果两个数据集来自可以链接在一起的不同关系数据库(例如,通过使用SQLServer中的链接服务器或Oracle中的数据库链接),那么比较值的最简单方法是将两个数据集合并为一个访问两个链接数据库的查询。
  • 如果两个数据集都来自无法直接链接在一起的数据源,则可以通过子报表将两个数据集链接在Crystal / SSRS中。 (有关SSRS here中子报告的更多详细信息。)

有一个名为BIRT的报告工具,它具有与SSRS类似的报告范例(即,网络式布局,而不是Crystal的带状报告方法),包括与SSRS相同的功能,是开源的,并使您能够将数据集直接链接在一起以创建联合数据集。但是,使用它比Crystal或SSRS更不直观。

答案 2 :(得分:3)

坚持下去 - Reporting Services是一个非常灵活的报告平台。

您可以通过在字段名称后指定数据集来执行您想要的操作,但您必须指定所需的Foo2或您希望如何处理Foo2。

您这样做的方法是通过聚合函数。例如,假设Dataset2只有一行数据,那么你得到第一行数据:

=Fields!Foo1.Value / First(Fields!Foo2.Value, "Dataset2")

如果有很多行,你想要除以Foo2的总和,那么你可以这样做:

=Fields!Foo1.Value / Sum(Fields!Foo2.Value, "Dataset2")

关键是,您目前正在逐步完成数据集1 - 您需要让Reporting Services知道如何处理数据集2以便返回您需要的Foo2。