在 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.
如果有帮助请告诉我。
我在 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.
如果有帮助请告诉我。