2013-03-04 2 views
1

MySQL의 한 테이블에서 OLAP 뷰를 만들어야합니다.MONDRIAN MDX 쿼리 관련 문제

가 내 테이블에 다음과 같은 열에서 정보를 얻을 필요가 :

  • loginNote
  • logoutNote
  • 타임 스탬프
  • 나는이 몬드리안 스키마를 생성
  • 그래서

userFirstName :

<Schema name="Login"> 
    <Cube name="Login" visible="true" cache="true" enabled="true"> 
    <Table name="event_log"> 
    </Table> 
    <Dimension visible="true" highCardinality="false" name="UserFirstName"> 
     <Hierarchy visible="true" hasAll="true" allMemberName="All UserFirstName"> 
      <Level name="UserFirstName" visible="true" column="userFirstName" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never"> 
      </Level> 
     </Hierarchy> 
    </Dimension> 
<Dimension visible="true" highCardinality="false" name="LoginNote"> 
     <Hierarchy visible="true" hasAll="true" allMemberName="All LoginNote"> 
      <Level name="LoginNote" visible="true" column="loginNote" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never"> 
      </Level> 
     </Hierarchy> 
    </Dimension> 
<Dimension visible="true" highCardinality="false" name="LogoutNote"> 
     <Hierarchy visible="true" hasAll="true" allMemberName="All UserFirstName"> 
      <Level name="LogoutNote" visible="true" column="logoutNote" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never"> 
      </Level> 
     </Hierarchy> 
    </Dimension> 
    <Measure name="Users" column="userFirstName" aggregator="count" description="Users"> 
    </Measure> 

내가 행에 LoginNote 및 LogoutNote 정보를 표시 할 수 있어야하는 MDX 쿼리를 실행할 수있는 방법을 알고 싶습니다

및 열에서의 UserFirstName.

나는

Select 
UserFirstName.Children ON COLUMNS, 
LogoutNote.Children ON ROWS 
FROM Login 

또는

Select 
UserFirstName.Children ON COLUMNS, 
LoginNote.Children ON ROWS 
FROM Login 

을 실행할 수 있었지만 오류가 반환되기 때문에 나는

Select 
UserFirstName.Children ON COLUMNS, 
{LogoutNote.Children,LoginNote.Children} ON ROWS 
FROM Login 

를 실행할 수 없습니다 :

'{}'함수에 대한 모든 인수는 동일한 계층 구조 여야합니다.

도움을 주실 수 있습니다!

감사합니다.

답변

2

{...}은 두 세트의 구성원을 결합한 Union(...)의 약어입니다. 이러한 멤버는 동일한 계층 구조 (오류 메시지가 말한 것)에서 왔지만 다른 차원/계층 구조 인 LogoutNote 및 LoginNote의 멤버가 포함됩니다.

계층을 결합하려면 Crossjoin()이 필요하며 두 세트의 직교 곱을 생성해야합니다.

SELECT 
    UserFirstName.Children ON COLUMNS, 
    Crossjoin(LogoutNote.Children, LoginNote.Children) ON ROWS 
FROM Login 

나는 이것이 당신이 쿼리의 결과로 기대 정확히 있는지 확실하지 않습니다, 당신은이 LoginNote 및 LogoutNote의 모든 조합을 제거하기 위해 그 Crossjoin() 전에 NON EMPTY을 추가 할 수 있습니다 값 없음.

희망 트랙을 올바르게 설정합니다.