2013-01-09 1 views
1

구성원 목록, ID 및 측정 값이 포함 된 결과를 반환하는 MDX 쿼리를 작성하려고합니다. 이 예에서는 설문 조사에서 평가 값을 갖는 사실 테이블을 가지고 있습니다. 각 등급 값에는 ID 및 이름 열이있는 Question 차원에 대한 외래 키가 있습니다. 내가 원하는 정보는 총 평균 평점이있는 각 quesion의 Id 및 Name입니다. 지금까지 이드와 등급 또는 이름과 등급을 얻을 수는 있지만 둘 다 얻는 방법을 모르겠습니다. 여기 MDX 쿼리를 작성하여 ID와 이름을 가진 멤버를 반환하려면 어떻게해야합니까?

내가 시도 쿼리입니다 : 당신이 볼 수
[Question].[10]        3.5 
[Question].[11]        4.2 
[Question].[12]        4.9 
[Question].[13]        4.0 
[Question].[10].[blar abc]     3.5 
[Question].[11].[blar def]     4.2 
[Question].[12].[blarrr]     4.9 
[Question].[13].[something else]   4.2 

그 질문 (10)가 나타납니다 :

SELECT 
NON EMPTY {[Measures].[Rating]} ON COLUMNS, 
NON EMPTY {[Question].[Question Id].Members, 
      [Question].[Question Caption].Members} ON ROWS 
FROM [Ratings] 

그리고 중복 값을 얻을 제외하고는 거의 작동, 여기 샘플 결과 한 번은 이름을 쓰지 않고 한 번, 3.5 번을 두 번 사용했습니다.

MDX에서 수행하고 싶은 작업이 있습니까? 내가 뭘 놓치고 있니? 이것은 몬드리안에 의해 처형 중입니다.

답변

1

이는 질문 차원의 계층 구조 설정 방법에 따라 다릅니다. 나는 (캡션은 주어진 질문 회원이 아닌 수준의 속성이기 때문에 이것은 아마이 계층을 설정하는 가장 좋은 방법이 아니다,하지만 난 빗나가 다) 계층 구조가

All Questions 
    > Id 
     > Name 

것을 여기에 가정합니다.

당신이 잘못하고있는 것은 두 레벨 (ID 및 캡션)의 모든 멤버가 포함 된 세트를 만드는 것입니다. 일반적으로 상위 수준 멤버 (예 : [질문] [13])는 측정 값을 롤업했지만 각 ID에는 하나의 캡션 만 있기 때문에 두 등급 모두 평균 평점이 동일합니다.

한 가지 해결책은 Id 수준을 사용하지 않고 캡션 구성원의 고유 이름에서 ID를 추출하는 것입니다.

WITH MEMBER [Measures].[QuestionId] AS Iif(
     Not IsEmpty([Measures].[Rating]), 
     [Question].CurrentMember.Parent.Name, 
     NULL 
    ) 
SELECT 
NON EMPTY {[Measures].[QuestionId], [Measures].[Rating]} ON COLUMNS, 
NON EMPTY {[Question].[Question Caption].Members} ON ROWS 
FROM [Ratings] 

IIF 함수는 우리가 NULL 구성원 때를 확인합니다 : 당신이 정말로 당신의 결과에서 셀로 아이디를 원한다면

SELECT 
NON EMPTY {[Measures].[Rating]} ON COLUMNS, 
NON EMPTY {[Question].[Question Caption].Members} ON ROWS 
FROM [Ratings] 

, 당신은 다른 방법으로 그 값을 유지하기 위해 계산 된 구성원을 사용할 수 있습니다 우리는 평점이 없으며, 그렇지 않으면 모든 질문에 관계없이 행을 얻습니다.


편집 : 당신은 (당신이 질문의 다른 해석 유용한 분류가있을 경우이 사이에 다른 레벨을 추가 할 수 있습니다) All Questions > Question을가는 한 수준의 계층 구조를 사용할 수 있습니다.

  1. 는이 수준의 (스키마에 column 값에 의해 주어진 멤버 키)를 '고유 식별자를'확인 :

    는 질문의 수준은 너무 것들의 무리가 당신이 할 수있는, 하나 개의 질문 인스턴스를 나타냅니다 질문 ID.

  2. '사용자 식별자'(스키마에서 nameColumn 값으로 지정)의 질문 캡션을 만듭니다.
  3. 스키마의 속성 태그를 통해이 수준으로 계층 구조에서 의미가없는 다른 유용한 속성을이 수준으로 추가 할 수 있습니다.

그런 다음 [Question].&[Id here]으로 ID로를 선택할 수 [Question].[the caption here]으로 캡션으로 질문을 선택할 수 있습니다. 당신이 등록 정보를 검색 할 경우에 당신은 이런 식으로 작업을 수행 할 수 있습니다

SELECT 
NON EMPTY {[Measures].[Rating]} ON COLUMNS, 
NON EMPTY {[Question].[Question].Members} 
    DIMENSION PROPERTIES [Question].Key, [Question].[other property name] ON ROWS 
FROM [Ratings] 

속성은 결과 셀 집합에서 메타 데이터로 추가됩니다.

+0

정말 고마워요! 첫 번째 SELECT가 작동하면 전체 구성원 이름의 일부로 ID를 다시 얻었음을 알지 못했습니다. 당신은 캡션이 단지 재산 일 수 있다고 언급했습니다. 그게 더 합리적인 경우 내 스키마를 업데이트 할 수 있지만 필요한 정보를 얻기 위해 쿼리에서 사용하는 방법을 잘 모르겠습니다. 데이터를 모델링하고 선택하는 방법에 대한 정보를 공유 할 수있는 기회가 있습니까? – NotDan

+0

질문이 가능한 대안으로 수정되었습니다. –

+0

많은 도움을 주셔서 감사합니다. 나는 지금 MDX 경험이 약 10 일이므로 훌륭한 정보이며 설명대로 작동합니다. – NotDan