我在SSRS中有两个数据集。我想在一份报告中加入他们。
第一个是产品列表,其中productnumber为密钥和builddate。
productnumber builddate
123 6/1/2005
123 6/1/2015
第二个是具有有效日期的辅助标识符。
表格如下:
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
这可能吗?我尝试使用查找和LookupSet返回secondarynumber但我' m,在关于如何通过过滤器PARAMS中或如何使用一个记录集输出的损失。我觉得我错过了什么。
答案 0 :(得分:2)
T-SQL Solution (Easiest if your datasource is a database and you are not restricted to use unmodifiable stored procedures)
If your datasource is a database you can handle it easily from a T-SQL query, by performing a JOIN between both tables and specify a WHERE clause to select only the rows matching the condition: effectivedate <= 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 Solution:
Go to Report
menu / Report properties...
under the Code tab add the following VB function.
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
Then in the secondarynumber
column in your tablix use:
=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.
Let me know if this helps.