在 SSRS 中加入数据集

Joining datasets in SSRS

我在 SSRS 中有两个数据集。我想加入他们的一份报告。

第一个是以产品编号为键和构建日期的产品列表。

productnumber builddate
123           6/1/2005 
123           6/1/2015 

第二个是具有有效日期的辅助标识符。

table 看起来像这样:

productnumber secondarynumber effectivedate obsoletedate
123           999             1/1/2000      12/31/2009
123           999A            1/1/2010      1/1/2030

我希望报告看起来像这样:

productnumber builddate secondarynumber
123           6/1/2005  999
123           6/1/2015  999A

这可能吗?我尝试使用 Lookup 和 LookupSet 来 return secondarynumber,但我不知道如何传递过滤器参数或如何使用记录集输出。我觉得我错过了什么。

T-SQL解决方案(如果您的数据源是数据库并且您不限于使用不可修改的存储过程,则最简单)

如果您的数据源是数据库,您可以通过 T-SQL 查询轻松处理它,方法是在两个表之间执行 JOIN 并指定 WHERE 子句 select 只有匹配的行条件:有效日期 <= buildDate =< obsoletedate.

SELECT a.Productnumber, 
       a.Builddate, 
       b.Secondarynumber 
FROM   Dataset1table a 
       INNER JOIN Dataset2table b 
               ON a.Productnumber = b.Productnumber 
WHERE  a.Builddate BETWEEN b.Effectivedate AND b.Obsoletedate  

SSRS解决方案:

转到 Report 菜单 / Report properties... 在“代码”选项卡下添加以下 VB 函数。

Public Function GetSecondaryNumber(buildDate As Date ,
effectiveDate As Object, obsoleteDate As Object, secondaryNumber As Object) As String

Dim i As Integer    

For i = 0  To effectiveDate.Length -1 
  if buildDate >= effectiveDate(i) and buildDate <= obsoleteDate(i) then
     Return secondaryNumber(i)
   End If
Next 

Return ""

End Function

然后在 Tablix 的 secondarynumber 列中使用:

=Code.GetSecondaryNumber(
Fields!builddate.Value,
LookupSet(Fields!productnumber.Value,Fields!productnumber.Value,Fields!effectivedate.Value,"DataSet2"),
LookupSet(Fields!productnumber.Value,Fields!productnumber.Value,Fields!obsoletedate.Value,"DataSet2"),
LookupSet(Fields!productnumber.Value,Fields!productnumber.Value,Fields!secondarynumber.Value,"DataSet2")
)

It will work if you don't have Nulls in effectiveDate and obsoleteDate columns. Otherwise you will have to handle null validation in the VB function or SSRS.

如果有帮助请告诉我。