2016-10-14 3 views
0

У меня есть два набора данных в 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 для возврата вторичного номера, но я не понимаю, как передать параметры фильтра или как использовать вывод набора записей. Я чувствую, что что-то упускаю.

+0

Вы пробовали этот '= Lookup (Fields! Productnumber.Value, Fields! Productnumber.Value, Fields! Secondarynumber.Value," Table2DataSet ")'? –

+0

Возврат вторичного номера зависит от сборки, которая не включена в ваш поиск. Если я использую LookupSet, я получаю две записи, по одной для каждой сборки. В этот момент у меня есть только вторичные числа, у меня нет сборки. – tzerb

+0

Lookup возвращает первое найденное значение, поэтому в вашем случае оно вернет '999' как' secondnumber' для обеих строк. Как вы связываете builddate во втором наборе данных, чтобы получить соответствующий вторичный номер? –

ответ

2

T-SQL Solution (Самый простой, если ваш источник данных представляет собой базу данных, и вы не ограничены в использовании нередактируемым хранимых процедур)

Если источник данных представляет собой базу данных, вы можете обрабатывать его легко из запроса T-SQL , выполнив JOIN между обеими таблицами и указывая предложение 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... на вкладке Code добавить следующую функцию 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.

Дайте мне знать, если это поможет.

+1

Я думаю, это единственный способ для решения OP. Красиво объяснено. – p2k

+0

Спасибо за вашу помощь!Я думаю, что смогу сделать решение SSRS, и похоже, что он сработает. (Я попробую завтра.) Еще одна деталь, которую я должен был задать, состоит в том, что наборы данных поступают из двух разных баз данных. (DB2/Not connected.) Возможна ли T-SQL в этом случае? – tzerb

+1

@tzerb, если каждая база данных находится на другом сервере, и вы можете [link] (https://msdn.microsoft.com/en-us/library/ff772782.aspx#Anchor_2) на обоих серверах решение T-SQL могло бы помочь вы. В противном случае реализуйте решение SSRS. –

 Смежные вопросы

  • Нет связанных вопросов^_^