如何从ID链接的2个不同数据集中编写报告?

时间:2013-04-29 16:24:26

标签: sql-server-2008 reportbuilder3.0

我正在报表生成器中构建报表。我有2个数据集,由于它们的复杂性,它们无法合并。我想做的是做一个报告,它使用第一个数据集中的ID来查找第二个数据集中的数据。这可能吗?以下是示例,不是确切的代码,而是我需要的:

First Dataset:

select itemID from Items

第二个数据集:

select itemID, saleAmount, salePrice from Sales

我想像这样设置我的报告:

ItemID        | Sale Count                                                  | Sale Price 
--------------+-------------------------------------------------------------+------------
Items.itemID  | sum(Sales.saleAmount) where items.itemID = Sales.itemID     | sum(Sales.salePrice ) where items.itemID = Sales.itemID

所以最终结果将是这样的:

ItemID        | Sale Count                                                  | Sale Price 
--------------+-------------------------------------------------------------+------------
1             | 11223                                                       | $123123
2             | 4537                                                        | $8375

这可能吗?也许有条件查找?

1 个答案:

答案 0 :(得分:1)

在创建数据集时,您无法加入数据,这是一种遗憾。

如果做不到这一点,我可以考虑其他两个选择:

使用LookupSet和自定义代码

这个出色的答案How to combine aggregates within a group with aggregates across groups within SSRS就是如何做到这一点的完美例子。

基本上,您在函数(例如SumLookup)中添加自定义代码,该函数接受LookupSet调用的结果并返回聚合值。您的报告中包含以下表达式:

=Code.SumLookup(
    LookupSet(Fields!itemID.Value, Fields!itemID.Value, Fields!saleAmount.Value, "Sales")
)

我创建了一个快速测试,它运行得很好。

使用子报告

要执行此操作,您需要根据项目数据集创建表格,然后在详细信息行中嵌入子报表以显示销售信息。

子报表需要itemID参数来适当地过滤销售,您可以将父表设置为将=Fields!itemID.Value传递给子报表 - 然后对每个itemID行重复一次显示相关的销售数据。

对于它的价值,我会看第一个选项 - 有一些自定义代码,但它很简单,这样你就不需要部署多个报告了。对我来说似乎更干净。