문제

나는 MDX를 처음 접했고 이것이 간단한 질문이어야한다는 것을 알고 있지만 답을 찾을 수 없었습니다.

질문과 답변이있는 AA 설문지를 모델링하고 있습니다. 내가 달성하려는 것은 질문에 대한 구체적인 답변을 한 사람들의 수를 찾는 것입니다. 예를 들어 20-25 세 사이의 남성의 수

질문에 대해 아래 쿼리를 개별적으로 실행하면 올바른 결과가 반환됩니다.

SELECT
      [Measures].[Fact Demographics Count] ON Columns
FROM
      [Dsv All]            
WHERE
      [Answer].[Dim Answer].&[1]

[Measures].[Fact Demographics Count] 기본 키 열의 수입니다

[Answer].[Dim Answer].&[1] 남성 답변의 핵심입니다

남성 인 사람들의 수 = 150 환자의 결과 20-25 = 12 사이의 사람들의 수에 대한 결과

그러나 남성이고 20-25 세 사이의 사람들을 얻는 대신 아래 다음 쿼리를 실행할 때. 나는 남성 인 사람들의 수와 20-25 세 사이의 사람들의 합을 얻습니다.

SELECT 
      [Measures].[Fact Demographics Count] ON Columns
FROM
      [Dsv All]            
WHERE
      {[Answer].[Dim Answer].&[1],[Answer].[Dim Answer].&[9]}

결과 = 162

사실 테이블의 구조는입니다

FactdeMographicskey,

RespodentKey,

병기,

답장

모든 도움은 대단히 감사하겠습니다

감사

도움이 되었습니까?

해결책 3

먼저 답장을 보내 주신 모든 분들께 감사드립니다. 이것은 해결하기 흥미로운 것이었고 MDX를 처음 접하고 SQL에서 오는 사람이라면 누구나 쉽게 쓰러지는 함정이었습니다.

따라서 여기에 관심이있는 사람들에게는 솔루션에 대한 간단한 개요가 있습니다.

나는 3 개의 테이블이 있습니다

  1. FactdeMographics : 응답자와 답변을 보유하고 있습니다 (누가 대답 한 사람)

  2. DIMANSWER : 답변

  3. 응답자 : 응답자

큐브 I 복제 된 팩트 그래픽에 대한 DataSource보기에서 명명 된 쿼리를 사용하여 5 번, 나는이 fact1, fact2, ..., fact5라고 명명했습니다. (5 개의 측정 그룹을 만들 것임)

VS Studio의 Create Cube Wizard 사용 다음 사실 테이블을 설정했습니다.

  1. Fact1, Fact2, ... 사실 테이블
  2. Dimrrespondent 사실 테이블. 이 테이블을 사용하여 응답자 수를 얻습니다.
  3. 원래 FactdeMographics 테이블을 제거했습니다.

큐브가 생성되면 Dimanswer 치수를 5 번 복제하여 Filter1, Filter2, ...

마지막으로 큐브 구조의 차원 사용 탭에서 다음과 같이 링크했습니다.

필터 1은 많은 것들에 대한 많은 무분별한 응답입니다

필터 2는 많은 것들에 대한 많은 피고인입니다

필터 3, 많은 피고인에서 많은 것입니다

필터 4는 많은 것들에 대한 많은 피고입니다

필터 5는 많은 것들에서 많은 희미한 응답자입니다

Filter1 정기 관계 Fact1

Filter2 정기 관계 Fact2

Filter3 정기 관계 사실 3

Filter4 정기 관계 Fact4

Filter5 정기 관계 Fact5

이제 이것은 원래 게시물에서 사용한 쿼리를 다시 작성할 수 있습니다.

SELECT
    [Measures].[Dim Respondent Count] On 0
FROM
    [DemographicsCube]
WHERE
    (
        [Filter1].[Answer].&[Male],
        [Filter2].[Answer].&[20-25]
    )

이제 내 쿼리를 최대 5 개의 질문으로 필터링 할 수 있습니다.

이것이 효과가 있지만 더 우아한 솔루션이 있다고 확신합니다. 누구든지 그것이 무엇인지 알고 있다면 듣고 싶습니다.

감사

다른 팁

MDX 기능 필터를 살펴보십시오. 필요한 것을 줄 수 있습니다. 필터와 멤버 속성의 조합으로 ID에 대해 필터링 할 수 있습니다. 나이와 성별이 동일한 차원 (답변)의 구성원이기 때문에 OLAP 큐브가 어떻게 내 경험에서 구조화되는지에 대한 곡물에 대해 약간의 곡물에 반대하기 때문에 문제가 있습니다. 그들은 각각 집계를 위해 자신의 세포를 얻지 만, 연령과 성별이 각자의 차원에있는 경우와는 달리, 함께 추가하는 것을 제외하고는 서로에 대해 집계되지 않습니다. OLAP 큐브에서 각 차원의 각 차원의 각 구성원과 다른 모든 차원의 각 구성원의 각 조합은 해당 조합에 고유 한 각 측정 값을 갖는 "셀"을 가져옵니다. (예 : 답변)는 그런 식으로 교차 계산되지 않습니다.

가능하다면 개별 답변을 개별 차원으로 나누는 것이 좋습니다. 즉, 나이와 성별은 각자 자신의 구성원과 고유 한 차원을 가지고 있으며, 원하는 것은 자연스럽게 큐브에서 흘러 나옵니다. 그렇지 않으면, 나는 당신이 할 일이 많을 까봐 두렵습니다. (그래도 나는 MDX 전문가가 아니기 때문에 이것에 완전히 기반을두고있을 수 있지만 그것은 내 이해입니다)

또한, 이전에 언급 된 책인 MDX 솔루션을 확실히 읽으십시오. 이것이 당신이 작성해야 할 유일한 MDX 쿼리가 아니라면. MDX 및 다차원 분석입니다 아무것도 아님 SQL과 마찬가지로 OLAP 데이터베이스 및 MDX의 구조에 대한 확실한 이해는 절대적으로 필수적이며, 그 책은 해당 부서에 있어야 할 곳을 얻는 데 매우 훌륭한 일을합니다.

기준 또는 슬라이스에 문제를 파악하려고 할 때 측정이 아닌 치수로 썰어 놓는 항목을 분해하는 것이 도움이된다고 생각합니다.

select
      [Measures].[Fact Demographics Count] on Columns
from  [Dsv All]            
where
{
    [Answer].[Dim Answer].&[1],
    [Dim Age Band].[20-25]
}

비록 당신은 실제로 MDX의 전력을 사용하고 있지 않습니다. 당신은 단 하나의 가치를 얻고 있습니다.

select
      [Dim Answer].Members on Columns,
      [Dim Age Band].Members on Rows
from  [Dsv All] 
where ( [Measures].[Fact Demographics Count] )

연령 대역 (행)별로 성별 (열에)을 분해하는 피벗 테이블 (또는 crosstable)을 제공합니다.

BTW -FF 당신은 MDX를 배우고 있습니다.이 책 : MDX 솔루션 내가 찾은 최고의 출발점입니다.

MSSQL을 사용하는 경우 "롤업과 함께"를 사용하여 원하는 정보를 얻을 수있는 추가 행을 얻을 수 있습니다. 또한, 당신은 당신이 필요로하는 "그룹"을 사용하지 않습니다.

그룹을 사용하여 세트를 그룹으로 나눈 다음 집계 기능을 사용하여 카운트 및 기타 통계를 얻으십시오.

예시:

select AGE, GENDER, count(1)
from MY_TABLE
group by AGE, GENDER
with rollup

이렇게하면 각 연령 그룹의 테이블에있는 각 사람의 성별 수를 제공하며 "롤업"은 테이블의 총 직원 수, 성별에 관계없이 각 연령 그룹의 숫자를 제공합니다. 나이에 관계없이 각 성별. 같은 것

AGE GENDER COUNT
--- ------ -----
 20      M  1245
 21      M  1012
 20      F   942
 21      F   838
         M  2257
         F  1780
 20         2187
 21         1850
            4037
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top