2

我需要从 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>

我想知道如何运行 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

因为返回错误:

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

任何帮助将不胜感激!

谢谢!

4

1 回答 1

3

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

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

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

我不确定这是否正是您期望的查询结果,您可能希望NON EMPTY在 Crossjoin() 之前添加一个以消除所有没有值的 LoginNote 和 LogoutNote 组合。

希望这能让你走上正确的道路。

于 2013-03-06T03:27:05.397 回答