Решение T-SQL (проще всего, если источником данных является база данных и вы не ограничены в использовании неизменяемых хранимых процедур)
Если ваш источник данных представляет собой базу данных, вы можете легко справиться с ним из запроса T-SQL, выполнив СОЕДИНЕНИЕ между обеими таблицами и указав предложение WHERE, чтобы выбрать только строки, соответствующие условию: 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:
Перейдите в меню 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
Затем в столбце 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")
)
Это будет работать, если у вас нет нулей в столбцах EffectiveDate и obsoleteDate. В противном случае вам придется обрабатывать нулевую проверку в функции VB или SSRS.
Позвольте мне знать, если это помогает.
person
alejandro zuleta
schedule
15.10.2016
=Lookup(Fields!productnumber.Value,Fields!productnumber.Value,Fields!secondarynumber.Value,"Table2DataSet")
? - person alejandro zuleta   schedule 15.10.2016999
какsecondarynumber
для обеих строк. Как вы связываете дату сборки во втором наборе данных, чтобы получить соответствующий вторичный номер? - person alejandro zuleta   schedule 15.10.2016