使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
显然这个查询的结果是空的,因为它将问题与根级别类别联系起来,而只有我的树的叶子附加了一些问题。 它还显示此处不使用闭包表。
我可以做些什么来解决这个问题?
非常感谢 赖
答案 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>