我目前正在设置双解决方案,并且通过定义多维数据集及其层次结构而遇到困难。
架构定义的一部分如下所示:
<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
。
总之,我需要灵活的关卡排序。这可能吗?我知道有并行的层次结构,但我不能为每个可能的顺序创建一个......
我还尝试将所有属性放在属性中而不是级别中,但我无法想象得到一个简单的男性/女性用户总数。
它必须非常简单,因为整个事物将成为动态双工具的一部分......
答案 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>
希望得到这个帮助。