蒙德里安的父子等级不起作用

时间:2013-12-05 23:25:51

标签: parent-child mdx hierarchy pentaho mondrian

使mondrian使用父子层次结构的一些问题。

我的表结构如下(简化,因为Category表实际上是MPTT):

RESPONSE             QUESTION                   CATEGORY
--------------       -------------------        ----------
id             ¡---> identifier (String)  ¡---> id     <---¡
question_id ___|     category_id     _____|     parent_id _|
value (Measure)      title                      name_en

我的闭包表是一个简单的设置:child_id,parent_id,distance(主键是元组(child_id,parent_id))。

我的多维数据集的架构如下:

<Cube cache="true"
    defaultMeasure="Value" enabled="true" name="mycube">
    <Table name="response" schema="public"/>
    <Dimension foreignKey="question_id" name="Category">
        <Hierarchy allMemberName="All Categories" hasAll="true"
            primaryKey="identifier" primaryKeyTable="question">
            <Join leftKey="category_id" rightKey="id">
                <Table name="question"/>
                <Table name="category"/>
            </Join>
            <!-- works fine with the category itself: <Level column="name" type="String" name="Category Name" table="category" uniqueMembers="true"/> -->
            <Level column="id" name="Category ID"
                nameColumn="name_en" nullParentValue="NULL"
                parentColumn="parent_id" table="category"
                type="Numeric" uniqueMembers="true">
                <!-- type="Numeric" ordinalColumn="lft" parentColumn="parent_id" nullParentValue="NULL"  -->
                <Closure childColumn="child_id" parentColumn="parent_id">
                    <Table name="category_closure"/>
                </Closure>
            </Level>
        </Hierarchy>
    </Dimension>
   <Measure aggregator="avg" caption="Value"
        column="actual_value" formatString="#,###.00" name="Value"/>
</Cube>

现在,基于mondrian FoodMart测试页面,我为我的多维数据集设置了一个简单的jsp页面,我想将其作为测试的起点。它有以下MDX:

select {[Measures].[Value]} ON COLUMNS,
 {( [Category] )} ON ROWS
from [mycube]

首先显示的结果是“所有类别”。当我尝试在类别中向下钻取或层次结构时,它只返回[所有类别]。我也试过Descendants()无济于事。 同样,当我尝试列出类别的成员时,它什么都不返回。

我在后台看到它按如下方式运行查询以开始向下钻取:

  

05/12/13 23:53:10,967 postgres:[3-1]日志:执行:选择   “category”。“id”为“c0”,“category”。“name_en”为“c1”,来自“问题”   作为“问题”,“类别”作为“类别”,其中“问题”。“category_id”   =“category”。“id”和“category”。“parent_id”IS NULL group by“category”。“id”,“category”。“name_en”order by“category”。“id”ASC   NULLS LAST

显然这个查询的结果是空的,因为它将问题与根级别类别联系起来,而只有我的树的叶子附加了一些问题。 它还显示此处不使用闭包表。

我可以做些什么来解决这个问题?

非常感谢 赖

1 个答案:

答案 0 :(得分:1)

经过一些实验,我将得出结论,我的用例可能不受蒙德里安的支持。 以下是我做出这个结论的测试: - 确保我的树中有3个级别(级别0-> 2) - 创建与根类别相关的假问题(即其parent_id = NULL) - 创建一个附加到这个假问题的回复 - 在此阶段,只有0级和2级类别记录有与之相关的问题和答案 - 继续查询

以下是我在日志中得到的结果:

  

14:37:09,082 WARN [SqlTupleReader]级别[类别]。[名称]使   使用'parentColumn'属性,但键3的父成员是   失踪。这可能是由于使用了NativizeSet MDX功能   一个成员列表形成一个父子层次结构,而不是   包括其定义中的所有父成员。使用NativizeSet和   父子层次结构要求包含父成员   集合或层次结构无法在本地正确构建。

“key 3”涉及我的2级记录之一,即树叶(类似的消息显示其他2级记录)。

结论:不支持: - (

将下面的“工作”架构括起来:

<Schema name="Foo">
    <Cube name="Foo" caption="Cube to report on the Foo quizz dimensions" visible="true" defaultMeasure="Rating" cache="true" enabled="true">
        <Table name="response" schema="public">
        </Table>
        <Dimension type="StandardDimension" visible="true" foreignKey="question_id" highCardinality="false" name="Category">
            <Hierarchy name="Category" visible="true" hasAll="false" allMemberName="All Categories" primaryKey="identifier" primaryKeyTable="question">
                <Join leftKey="category_id" rightKey="id">
                    <Table name="question" schema="public">
                    </Table>
                    <Table name="category" schema="public">
                    </Table>
                </Join>
                <Level name="Name" visible="true" table="category" column="id" nameColumn="name" ordinalColumn="tree_id" parentColumn="parent_id" nullParentValue="NULL" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">
                </Level>
            </Hierarchy>
        </Dimension>
        <Measure name="Ratings" column="actual_value" formatString="#,###.00" aggregator="avg" caption="Ratings">
        </Measure>
    </Cube>
</Schema>