2012-10-10 6 views
0

ActivePivot과 함께 사용하는 다음 형식의 MDX 쿼리가 있습니다.MDX 쿼리에서 필터와 Instr을 사용할 때의 성능

SELECT 
NON EMPTY Hierarchize({[CODE].[CODE].Members}) ON ROWS, 
NON EMPTY Hierarchize({Filter([RELEVANCE].Members, InStr([RELEVANCE].CurrentMember.Name, "n/a") > 0)}) ON COLUMNS 
FROM [CUBE] 
WHERE ([Measures].[contributors.COUNT]) 

이 쿼리의 성능은 필터/INSTR 매우 가난 : 나는 (열) 다른 차원에서 문자열의 부분의 존재에 의해, (내 행에에) 결과를 필터링해야 . 나는 그것이 모든 구성원을 통해 '스캔'한 것으로 이해할 수 있다고 생각합니다.

더 나은 성능을 제공하면서 내가 원하는 것을 얻을 수있는 또 다른 방법이 있습니까?

감사

+0

"n/a"가 한 수준에만 나타 납니까? 계층 구조 트리의 샘플을 제공 할 수 있습니까? – Benoit

+0

예, 한 수준이므로이 열에 대해 계층화 함수가 필요하지 않습니다. 맞습니까? 행 선택은 계층 적이어야 할 수도 있습니다. – doc

+0

ActivePivot의 경우, 동료가 이름 대신 멤버를 버리기 위해 INSTR보다 훨씬 나은 성능을 발휘하는 대체 솔루션을 제안했습니다. RELEVANCE의 잎 수준에서 ActivePivot에 Post Processsor를 만들었습니다. RELEVANCE는 String이 일치하지 않으면 null을 반환합니다. 컨텍스트 값을 사용하여 String을 설정했습니다. – doc

답변

2

당신의 RELEVANCE 차원은 3 레벨을 가지고 있으며, "N/A는"이 같은 것을 쓸 수 있습니다 마지막에 나타나는 경우 : 그것은 쓸모 필터 검사의 수를 줄일 수

SELECT 
NON EMPTY [CODE].[CODE].Members ON ROWS, 
NON EMPTY Hierarchize({[RELEVANCE].Levels(0).Members, 
         [RELEVANCE].Levels(1).Members, 
         Filter([RELEVANCE].Levels(2).Members, InStr([RELEVANCE].CurrentMember.Name, "n/a") > 0)}) ON COLUMNS 
FROM [CUBE] 
WHERE ([Measures].[contributors.COUNT]) 

을 .

또한 "n/a"및 "n/a가 아닌"2 개의 멤버가있는 차원으로 다른 차원을 큐브에 추가 할 수도 있습니다.

이 경우 쿼리가 될 것입니다 :

SELECT 
NON EMPTY [CODE].[CODE].Members ON ROWS, 
NON EMPTY [RELEVANCE].Members ON COLUMNS 
FROM [CUBE] 
WHERE ([Measures].[contributors.COUNT], [the new dimension].[...].[not n/a]) 

그러나 이것은 당신의 합계의 값을 변경합니다.

관련 문제