我需要从MySQL中的一个表创建一个OLAP视图。
我需要从表格中的以下列中获取信息:
所以我创建了这个Mondrian Schema:
<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
因为返回错误:
函数“{}”的所有参数必须具有相同的层次结构。
任何帮助将不胜感激!
谢谢!
答案 0 :(得分:3)
{...}
表示法是Union(...)
的简写,它将两组成员组合在一起。这些成员必须来自相同的层次结构(如错误消息所示),但您包括来自LogoutNote和LoginNote的成员,这些成员是不同的维度/层次结构。
如果要组合层次结构,则需要Crossjoin()
它们,创建两个集合的笛卡尔积。
SELECT
UserFirstName.Children ON COLUMNS,
Crossjoin(LogoutNote.Children, LoginNote.Children) ON ROWS
FROM Login
我不确定这是否与您的查询结果完全一致,您可能希望在该Crossjoin()之前添加NON EMPTY
以消除所有具有LoginNote和LogoutNote的组合没有价值观。
希望能让你走上正轨。