2011-08-25 4 views
0

나는 기본적으로 "헤더"레코드에 해당하는 상당히 복잡한 OLAP 데이터베이스와 해당 헤더에 속한 엄청난 수의 "멤버"가 있습니다.MDX의 COUNT 작업 성능 향상

현재 나의 MDX 쿼리는 Age 밴드와 멤버 유형별로 슬라이스 된 멤버의 합계 "Value"를 가져옵니다. 다음은 쿼리입니다.

SELECT 
(
    [Measures].[Member Value] 
) 
ON COLUMNS, 
NON EMPTY 
( 
    { 
     [Header].[Client Hierarchy].[Group Name].&[The Company]&[UK]&[ABC Group], 
     [Header].[Client Hierarchy].[Group Name].&[The Company]&[UK]&[DEF Group] 
    } 
    [Header].[Member Type].[Member Type], 
    [Member].[Age Band].[Age Band] 
) 
ON ROWS 
FROM [Cube] 
WHERE 
(
    [Header].[Another Attribute].&[Something],  
    [Header].[Created Date].&[2010-12-31T00:00:00], 
    [Member].[A Boolean Attribute].&[False] 
) 

이 쿼리에 다른 측정 값을 추가하여 결과 집합의 각 행에 집계 된 구성원 수를 얻으려고합니다. 나는이 사용하여이 계산 된 구성원 달성 :

WITH MEMBER [Measures].[Member Count] AS 
COUNT( 
    EXISTING ([Member].[Id].[Id],[Measures].[Member Value]) 
    ,EXCLUDEEMPTY 
) 

을 물론 그러나이 1 ~에 원래 ~ 일초를 복용 쿼리를 chnages COLUMNS

SELECT 
(
    [Measures].[Member Value], 
    [Measures].[Member Count] 
) 
... 

로 추가 : 14분

임 이것이 큐브 구조보다 쿼리 자체에 더 많은 것이라고 생각합니다. 누군가 큐브 구조에서 변경해야 할 사항에 대해 힌트를 얻거나, 같은 방식으로 쿼리하는 더 효율적인 방법 일 수 있습니까? 나는 몇 가지 예를 셀 카운트보다는 SUM을 사용하여 온라인으로 보았지만 그들은 COUNTFILTER과 함께 할 것이 더 많았다.

답변

0

기록을 위해 나는 나의 기록을 요약 할 조치가 이미 있다고 결정했다.

구성원 테이블에는 "이 레코드가 나타내는 멤버 수"라는 측정 값이있었습니다.이 레코드에는 내가 본 모든 레코드 (단일 멤버)에 대해 1이있었습니다. 단순히이 측정 값을 추가하면 해당 값이 내 슬라이스 전체에 합산됩니다.

1

하나의 가능한 솔루션은이 정보를 검색하는 새 측정 값을 큐브에 추가하는 것입니다.

[구성원]. [ID]. [ID]가없는 새 테이블을 추가하여 사실 테이블을 변경하십시오. 이 칼럼 -> [Member Count]에 'distinct count'measure를 생성하십시오. 이제이 측정 값은 찾고있는 정보를 검색하는 것으로 사실에 [측정 값]. [멤버 값]을 가리키는 열에 null 값을 포함 할 수 없습니다.

다른 버전에서는 ssas의 SCOPE 기능을 사용하고 있습니다.이 기능을 사용하면 성능이 향상 될지 모르지만 가능성은 있습니다.

+0

제안 해 주셔서 감사합니다. 다른 해결책을 찾았습니다. – Jamiec

+0

사실, 내가 제안한 것과 비슷하다. 이 현상금을 포기하지 않는 방법인가요 ?-) – ic3

+0

젠장, 현상금을 잊어 버렸습니다 ... 물론 .. 당신 것입니다. 도와 주셔서 감사합니다. – Jamiec