MONDRIAN MDX查询的问题

MONDRIAN MDX查询的问题,mdx,olap-cube,mondrian,Mdx,Olap Cube,Mondrian,我需要从MySQL中的一个表创建一个OLAP视图 我需要从表中的以下列获取信息: 登录说明 注销 时间戳 用户名 所以我创建了这个蒙德里安模式: <Schema name="Login"> <Cube name="Login" visible="true" cache="true" enabled="true"> <Table name="event_log"> </Table> <Dimension visi

我需要从MySQL中的一个表创建一个OLAP视图

我需要从表中的以下列获取信息:

  • 登录说明
  • 注销
  • 时间戳
  • 用户名
所以我创建了这个蒙德里安模式:

<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>

但是我不能跑

Select
UserFirstName.Children ON COLUMNS,
{LogoutNote.Children,LoginNote.Children} ON ROWS
FROM Login
因为返回了一个错误:

函数“{}”的所有参数必须具有相同的层次结构

任何帮助都将不胜感激


谢谢

{…}
符号是
联合(…)
的缩写,它将两组成员组合在一起。这些成员必须来自同一层次结构(如错误消息所述),但您包括来自不同维度/层次结构的LogoutNote和loginote的成员

如果要组合层次结构,需要
Crossjoin()
它们,创建两个集合的笛卡尔积

SELECT
    UserFirstName.Children ON COLUMNS,
    Crossjoin(LogoutNote.Children, LoginNote.Children) ON ROWS
FROM Login
我不确定这是否正是您所期望的查询结果,您可能希望在Crossjoin()之前添加一个
非空的
,以消除所有没有值的loginote和LogoutNote组合

希望这能让你走上正轨

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