2016-06-02 4 views
0

개인의 ID 또는 이름을 입력 할 수있는 texbox가있는 SSRS 보고서를 만듭니다. 이 필터를 MDX 쿼리에 적용하고 싶습니다. 데이터 집합에 필터를 적용해도 효과가 있었지만 보고서를 실행하는 데 너무 오래 걸립니다.쿼리에 필터를 여러 개 추가하는 방법은 무엇입니까?

다음은 MDX 쿼리 디자이너가 나를 위해 생성의 :

SELECT NON EMPTY { [Measures].[Employee Count] } ON COLUMNS 
, NON EMPTY { ([Person].[Emplid].[Emplid].ALLMEMBERS 
* [Person].[First Name].[First Name].ALLMEMBERS 
* [Person].[Last Name].[Last Name].ALLMEMBERS) } 
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
FROM [Model] 

의도 된 필터의 논리는 다음과 같이 될 것이다 :

WHERE SearchParameter = [Emplid] OR [First Name] + [Last Name] like SearchParameter 

나는, 내가 '어떻게 미세 조정 알아낼 수 그냥 필터에 대한 적절한 MDX 구문 예를 찾고 있습니다.

답변

0

알레한드로가 FILTER 기능으로 올바른 방향으로 나를 가리켜 주었기 때문에 나는 해결책을 찾을 수있었습니다. 또한 INSTR 함수를 사용하여 값을 매개 변수와 비교하는 방법을 배워야했습니다.

select {[Measures].[Passed] , [Measures].[Did not pass]} on 0 
    , filter(
     {[Person].[Emplid].Children * [Person].[First Name].Children * [Person].[Last Name].Children * [Training List].[Training Display Name].Children}, 
     instr([Person].[Emplid].currentmember.member_caption, @SearchParameter) > 0 
      or instr([Person].[First Name].currentmember.member_caption + ' ' + [Person].[Last Name].currentmember.member_caption, @SearchParameter) > 0) on 1 
from [Model] 

나는 비슷한 문제에 직면 한 모든 사람들을 도울 수 있기를 바랍니다.

1

MDX에서 WHERE 절이 작동하는 방식을 이해하는 것이 중요합니다. WHERE 절은 행 축을 필터링하지 않고 WHERE 절에 지정된 멤버와 교차하는 축의 차원 멤버를 필터링합니다.

REFERENCE

는 튜플을 지정해야하거나 WHERE 절에 회원으로 설정했다 가졌 :

:

WHERE (STRTOMEMBER(@Year)) 

STRTOMEMBER()가 포함 된 SSRS 텍스트 매개 변수 (@Year를) 변환 [Date].[Year].&[2016] 값이 유효한 MDX 멤버입니다. 이 경우 WHERE 절은 날짜 차원에서 2016 년과 교차하는 구성원 축을 필터링합니다.

또한 STRTOSET을 사용하면 필터에 여러 멤버를 전달할 수 있습니다.

WHERE StrToSet (@Countries, CONSTRAINED) 

@Countries 매개 변수는 {[Geography].[Geography].[Country].[Germany],[Geography].[Geography].[Country].[Canada]} 멤버가 포함 된 텍스트 SSRS 매개 변수입니다.

이 경우 WHERE 절은 캐나다와 독일 국가와 교차하는 SELECT 절에 지정된 멤버를 필터링합니다.

업데이트 : OP 피드를 기반으로합니다.

이렇게하면됩니다.

SELECT NON EMPTY { [Measures].[Employee Count] } ON COLUMNS, 
NON EMPTY 
{ 
    (StrToMember ('[Person].[Emplid].&[123]') * [Person].[First Name].[First Name].AllMembers * [Person].[Last Name].[Last Name].AllMembers) 
} Dimension Properties MEMBER_CAPTION, 
MEMBER_UNIQUE_NAME ON ROWS 
FROM [Model] 

주 나는 WHERE 절을 사용하지만, 행 축에있는 멤버를 지정하고 있지 않다.

업데이트 : 나는 WHERE 절을 당신의 requeriment에 적합하지 생각, 그것은 보인다 일부 조건에 따라 일부 멤버를 선택하는 필터 기능을 사용해야합니다.

앞서 말했듯이 WHERE 절은 주어진 멤버와 교차하는 축의 멤버를 필터링합니다. Filter 함수를 사용하여 지정된 기준을 충족하는 멤버를 필터링 할 수 있습니다.FILTER

는 검색 조건에 기초하여 소정의 세트를 필터링의 결과 집합을 반환.

예 : 위의 MDX 쿼리

SELECT NON EMPTY 
{ 
    [Measures].[Score %] 
    ,[Measures].[Month Key] 
} ON COLUMNS, 
NON EMPTY 
{ 
    ([Date].[YMD].[Month Name].&[201301] : [Date].[YMD].[Month Name].&[201307]) 
    * 
    FILTER 
    (
     [Customer].[Customer Full Name].[Customer Full Name].members, 
     [Measures].[Score %] <> null 
     AND 
     [Measures].[Score %] <> 0 
    ) 
} ON ROWS 
FROM [Cube] 

주, 월 201307-201301 및 필터 기능에 지정된 기준을 충족하는 일부 구성원 사이에 crossjoin있다. 이 경우의 기준은 멤버의 Score %이 null이 될 수 없다는 것입니다. AND은 0이 될 수 없습니다.

그것은이 같은 것을 생산해야

MonthName Customer Full Name Score % Month Key 

201301  Customer1   5%  1000 
201301  Customer2   3%  1000 
201304  Customer1   8%  3500 
201306  Customer1   11%  2200 
201307  Customer2   13%  3400 

참고 개월 201302, 201303 및 201305이 결과에 존재하지 않는 그 달에 고객이 필터 기준을 충족하지 않기 때문에.

이 정보가 도움이되기를 바랍니다.

+0

WHERE 절에서 EMPLID를 참조하려고 할 때 "이 Emplid 계층 구조가 이미 Axis1 축에 나타납니다." – StevenWhite

+0

MDX를 공유하면 행에 Emplid를 선택하고 필터하려고하는 것 같습니다 slicer where 절. –

+0

'SELECT [EFFTY] {[Measures]. [Employee Count]} 열 번호에 , 비어 있지 않음 {([Person]. [Emplid]. [Emplid] .ALLMEMBERS * [Person]. 이름]. [이름]을 *을 .ALLMEMBERS [사람]. [성]. [성] .ALLMEMBERS)} 치수 특성 MEMBER_CAPTION, [모델] 에서 행 ON MEMBER_UNIQUE_NAME WHERE STRTOMEMBER ('[사람]. [Emplid]. & [123 '')' – StevenWhite

관련 문제