2013-03-04 92 views
1

我需要从MySQL中的一个表创建一个OLAP View。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> 

我想知道我怎么可以运行MDX查询,以便能够在行表示将LoginNote和LogoutNote信息,并在列,该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的所有组合前添加一个NON EMPTY没有价值。

希望能让你走上正轨。