如何在OLAP中设置动态层次结构

时间:2011-10-22 11:58:11

标签: hierarchy olap business-intelligence mondrian

我目前正在设置双解决方案,并且通过定义多维数据集及其层次结构而遇到困难。

架构定义的一部分如下所示:

<Dimension foreignKey="user" highCardinality="false" name="user">
  <Hierarchy name="user" hasAll="true" allMemberName="all" primaryKey="ID">
    <Table name="user" />
    <Level name="timezone" column="timezone"/>
    <Level name="locale" column="locale"/>
    <Level name="gender" column="gender"/>
    </Level>
  </Hierarchy>
</Dimension>

现在我想直接访问性别级别。

SELECT
{[user].[gender].Members} ON COLUMNS,
{[Measures].[Fact Count]} ON ROWS
FROM [cube]

结果类似于[user].[zone3].[de_DE].[male] = 10, [user].[zone1].[en_US].[male] = 30等。我想要每个性别的总数:[user].[male] = 20[user].[female] = 30

总之,我需要灵活的关卡排序。这可能吗?我知道有并行的层次结构,但我不能为每个可能的顺序创建一个......

我还尝试将所有属性放在属性中而不是级别中,但我无法想象得到一个简单的男性/女性用户总数。

它必须非常简单,因为整个事物将成为动态双工具的一部分......

1 个答案:

答案 0 :(得分:1)

你正在使用错误的功能。

Member MDX函数获取包含MDX约束的所有成员,而不是Level的所有值。 你想要所有级别的值。

为此,您必须使用Children MDX功能。它接受相关级别的所有值(或子项)。 试试这个:

SELECT {[user].[gender].children} ON COLUMNS,
  {[Measures].[Fact Count]} ON ROWS
FROM [cube]
  

总之,我需要灵活的关卡排序。这可能吗?我知道有并行的层次结构,但我不能为每个可能的顺序创建一个......

创建仅包含一个级别的层次结构。我看到它们的层次结构真的没有什么特别强大,这是建议的,而不是失去灵活性。这可以防止数据立方体的错误OLAP操作,例如向下钻取和向上滚动(使用层次结构)。得到这样的东西:

<Dimension foreignKey="user" highCardinality="false" name="user">
   <Hierarchy name="TIMEZONE" hasAll="true" allMemberName="all" primaryKey="ID">
     <Table name="user" />
     <Level name="timezone" column="timezone"/>
   </Hierarchy>
   <Hierarchy name="LOCALE" hasAll="true" allMemberName="all" primaryKey="ID">
     <Table name="user" />
     <Level name="locale" column="locale"/>
   </Hierarchy>
   <Hierarchy name="GENDER" hasAll="true" allMemberName="all" primaryKey="ID">
     <Table name="user" />
     <Level name="gender" column="gender"/>
   </Hierarchy>
</Dimension>

希望得到这个帮助。