2012-12-17 4 views
-3

이전에이 질문을했지만 해결책이 없습니다. 다음 데이터 세트를 사용하여 다중 값 필터를 만들었습니다. 내 accessVar의 값이 와일드 카드를 사용하지 않습니다하지만 난 그것을 필요한 경우SSRS 2005에서 와일드 카드를 사용하는 다중 값 옵션 필터

SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, ACCESS_LOCATION_X, IC_N, COMPANY_M, CONSECUTIVE_D 
FROM TEMP_TARGET 
WHERE (CONSECUTIVE_D >= @consecDays) AND (ENTRY_DT BETWEEN @startDate AND @endDate)    AND 
(ACCESS_LOCATION_X LIKE @accessVar) AND 
(IC_N LIKE @icVAr) 

이 상대적으로 쉬울 것이다. 그래서 accessVar 5 개 값을 수있을 것입니다 : 나는 와일드 카드 연산자에서 사용할 수 없습니다입니다

%(means all), 'At%', 'Bet%', 'Co%' and 'Dea%' 

. 둘째, 이러한 종류의 드롭 다운 필터를 선택적으로 만들 수 있습니까? n 번째가 선택되면, 단지 쿼리하십시오.

내가 가지고있는 다른 옵션에는 어떤 것이 있습니까?

+0

[필터 매개 변수를 선택적으로 만들기] 가능한 복제본 (http://stackoverflow.com/questions/13871372/making-a-filter-parameter-optional). 3 번째 * 시간을 재 게시하지 마십시오. –

+0

확인하십시오. 그러나 나는 나의 이전 게시물을 부딪히기 위해 무엇을해야하는지에 관해서 dk를한다. 이전 게시물에 대한 해결책이 없습니다. 중도에서 나를 도운 걸 도와 준 사람이 답장을 그만 두었고 그래서 나는 두 번째로 행운을 시험해 보았다. 비슷한 qns를 다시 게시하지 않을 것을 약속드립니다. Sry – 10e5x

+0

힌트 : 응답에서 녹색 체크를 클릭하면 그 대답에 만족한다는 것을 나타냅니다. 그것은 자연스럽게 추가 답변을 금지합니다. 자신의 문제가 해결 될 때까지 답변을 수락하지 마십시오. –

답변

1

LIKE 및 다중 값 매개 변수를 함께 사용하려는 경우 작동하지 않습니다. 그러나 Reporting Services는 우리가 원하는 거의 모든 것을 수행 할 수있는 능력을 제공합니다. 솔루션은 사용자 정의 코드 및 표현식을 사용하는 것입니다. 첫째, 우리는 그렇게 같은 식으로 SQL 문을 변경 :

="SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, ACCESS_LOCATION_X, IC_N, " 
&"COMPANY_M, CONSECUTIVE_D " 
&"FROM TEMP_TARGET " 
&"WHERE (CONSECUTIVE_D >= @consecDays) " 
&"AND (ENTRY_DT BETWEEN @startDate AND @endDate) " 
&"AND ((@accessvar IS NULL) OR (ACCESS_LOCATION_X LIKE @accessVar)) " 
&"AND ((@icVar IS NULL) OR (IC_N LIKE @icVAr)) " 

그래서 이제 SQL 문이 실제로 실행하는 SQL 표현식으로 평가하는 문자열 식입니다.

다음으로 우리는 다중 값 매개 변수를 사용자 정의 코드로 수행 할 수있는 일련의 LIKE 문으로 변환해야합니다. 보고서에 다음과 같은 사용자 지정 코드를 추가합니다 (마우스 오른쪽 단추로 클릭하고 보고서 속성을 선택하고 클릭 코드 탭) : 그래서

Code.AccessLocations(Parameters!accessvar) 

:

Function AccessLocations (ByVal parameter As Parameter) AS String 
    Dim Result As String 
    If parameter.IsMultiValue then 
    Result = "AND (" 
    For i as integer = 0 to parameter.Count-1 
     Result = Result + "(ACCESS_LOCATION LIKE '" + CStr(parameter.Value(i)) + "') OR " 
    Next 
    Result = Left(Result, Result.Length - 3) +") " 
    Else 
    Result = "AND (ACCESS_LOCATION LIKE '" + CStr(parameter.Value) + "') " 
    End If 

    Return Result 
End Function 

그런 다음 우리는 SQL 문의 일부로이 함수를 호출 전체 SQL은 다음과 같습니다 당신의 매개 변수는에 % 와일드 카드를 가지고

="SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, ACCESS_LOCATION_X, IC_N, " 
&"COMPANY_M, CONSECUTIVE_D " 
&"FROM TEMP_TARGET " 
&"WHERE (CONSECUTIVE_D >= @consecDays) " 
&"AND (ENTRY_DT BETWEEN @startDate AND @endDate) " 
& Code.AccessLocations(Parameters!accessvar) 
&"AND ((@icVar IS NULL) OR (IC_N LIKE @icVAr)) " 

경우,이 작동합니다; 그렇지 않으면 와일드 카드를 함수에 추가하십시오.

+0

묻기도 전에 솔루션을 적용 해 보았습니다. "로컬 보고서 처리 중에 오류가 발생했습니다. 데이터 집합 'DataSource1'에 대한 쿼리 실행이 실패했습니다. ','근처의 구문이 잘못되었습니다." 그리고 나는 다른 변이를 시도했다. – 10e5x

+0

나는 내가 이미 잘못 가고있는 uds라고 생각한다. 그러나 그것에 대한 해결책은 없다. 나는이 오류를 아마 becuz 내가 하나 이상의 전자 선택했을 때.g At 및 Bet의 경우 프로그램은 At %, Bet %를 쿼리합니다. 따라서 오류가 있습니까? – 10e5x

+0

Chris가 무엇을 할 수 있는지보십시오. – 10e5x

관련 문제