2016-10-14 4 views
0

SSRS에는 두 개의 데이터 세트가 있습니다. 나는 그것들을 하나의 보고서에 포함시키고 싶다.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 

I는 다음과 같이하는 보고서를 싶습니다

productnumber builddate secondarynumber 
123   6/1/2005 999 
123   6/1/2015 999A 

이 가능합니까? Lookup과 LookupSet을 사용하여 secondarynumber를 반환하려고 시도했지만 필터 매개 변수를 전달하는 방법이나 레코드 세트 출력을 사용하는 방법이 손실되었습니다. 나는 뭔가를 놓친 것 같은 기분이 든다.

+0

이'= Lookup (Fields! productnumber.Value, Fields! productnumber.Value, Fields! secondarynumber.Value, "Table2DataSet")'을 시도 했습니까? –

+0

보조 번호의 반환은 조회에 포함되지 않은 builddate에 따라 다릅니다. LookupSet을 사용하면 각 builddate에 대해 하나씩 두 개의 레코드가 생성됩니다. 그 시점에서 저는 2 차 번호 만 가지고 있습니다, 나는 builddate가 없습니다. – tzerb

+0

Lookup은 찾은 첫 번째 값을 반환하므로 두 행 모두에 대해 '999'를 'secondarynumber'로 반환합니다. 두 번째 데이터 세트에서 builddate를 어떻게 관련 이차 번호를 얻으려고합니까? –

답변

2

T-SQL 솔루션 (가장 쉬운 당신의 데이터 소스는 데이터베이스이고 당신은 불가능한 저장 프로 시저를 사용하도록 제한되지 않은 경우) 데이터 소스 당신이 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...

이동은 다음과 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 열에 : 당신이 EFFECTIVEDATE에 널 (null)과 obsoleteDate 열이없는 경우

=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") 
) 

그것은 작동합니다. 그렇지 않으면 VB 함수 또는 SSRS에서 null 유효성 검증을 처리해야합니다.

이 정보가 도움이되는지 알려주십시오.

+1

이것이 OP 솔루션을위한 유일한 방법이라고 생각합니다. 멋지게 설명했다. – p2k

+0

도움 주셔서 감사합니다.나는 SSRS 솔루션을 할 수 있다고 생각하고 그것이 효과가있는 것처럼 보인다. (나는 내일 노력할 것이다.) 질문에 넣어야 할 또 다른 세부 사항은 두 개의 다른 데이터베이스에서 나온 데이터 세트이다. (DB2/링크되지 않음)이 경우 T-SQL이 가능합니까? – tzerb

+1

@tzerb, 각 데이터베이스가 다른 서버에 있고 둘 다 T-SQL 솔루션이 도움이 될 수있는 [link] (https://msdn.microsoft.com/en-us/library/ff772782.aspx#Anchor_2) 당신. 그렇지 않으면 SSRS 솔루션을 구현하십시오. –

관련 문제