Объединение наборов данных в SSRS

У меня есть два набора данных в SSRS. Я хотел бы присоединиться к ним в одном отчете.

Первый — это список продуктов с номером продукта в качестве ключа и датой сборки.

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

Это возможно? Я попытался использовать Lookup и LookupSet, чтобы вернуть вторичный номер, но я не понимаю, как передать параметры фильтра или как использовать вывод набора записей. Я чувствую, что что-то упускаю.


person tzerb    schedule 14.10.2016    source источник
comment
Вы пробовали это =Lookup(Fields!productnumber.Value,Fields!productnumber.Value,Fields!secondarynumber.Value,"Table2DataSet")?   -  person alejandro zuleta    schedule 15.10.2016
comment
Возврат вторичного номера зависит от даты сборки, которая не включена в ваш поиск. Если я использую LookupSet, я получаю две записи, по одной для каждой даты сборки. На данный момент у меня есть только вторичные номера, у меня нет даты сборки.   -  person tzerb    schedule 15.10.2016
comment
Поиск возвращает первое найденное значение, поэтому в вашем случае он вернет 999 как secondarynumber для обеих строк. Как вы связываете дату сборки во втором наборе данных, чтобы получить соответствующий вторичный номер?   -  person alejandro zuleta    schedule 15.10.2016
comment
Лол... вот о чем я спрашиваю :-)   -  person tzerb    schedule 15.10.2016
comment
Если бы вы включили в свой вопрос, что вам нужна строка, дата сборки которой находится между датами вступления в силу и устаревшими датами, это было бы более ясно. Также нелегко догадаться, если одна из ваших дат 1/6/ 1015 , действительна ли она вообще?   -  person alejandro zuleta    schedule 15.10.2016
comment
Моя ошибка. Я подумал, что это можно понять из вопроса.   -  person tzerb    schedule 15.10.2016


Ответы (1)


Решение 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
comment
Я думаю, это единственный способ для решения OP. Красиво объяснил. - person p2k; 15.10.2016
comment
Спасибо за вашу помощь! Я думаю, что могу сделать решение SSRS, и, похоже, оно сработает. (Я попробую завтра.) Еще одна деталь, которую я должен был указать в вопросе, заключается в том, что наборы данных поступают из двух разных баз данных. (DB2/Нет связи.) Возможен ли в этом случае T-SQL? - person tzerb; 16.10.2016
comment
@tzerb, если каждая база данных находится на другом сервере, и вы можете связать на обоих серверах вам может помочь решение T-SQL. В противном случае внедрите решение SSRS. - person alejandro zuleta; 17.10.2016
comment
@alejandrozuleta не может связать их, и решение SSRS работает, если немного многословно. Спасибо за помощь. - person tzerb; 17.10.2016