我有一个事实表,它有一个RESOURCE_ID链接到资源表。资源有一个角色,它本身就是一种资源。
.--FACTTABLE--.
| IDENTIFIER | .--RESOURCE---.
| RESOURCE_ID |----| RESOURCE_ID | .--RESOURCE---.
| ROLE_ID |----| RESOURCE_ID |
| TITLE |
现在我想创建一个ROLE包含该属性的维度TITLE。
这该怎么做?Mondrian4 schema的例子将不胜感激。
我知道有一个<Link>用于<PhysicalSchema>和<ForeignKeyLink>用于<DimensionLinks>但我不知道如何正确使用它们。
解决周期
由于角色和资源都来自表格RESOURCE,蒙德里安无法处理并进入一个循环。
我用RESOURCE表的别名解决了这个问题:
<Table name="resource" schema="public" keyColumn="id" alias="role"/>
链接表
要让Mondrian知道哪个资源属于哪个角色,您需要链接两个表。
因此资源表有一个关键是很重要的:
<Table name="resource" schema="public" keyColumn="id"/>
现在您可以将资源链接到它的角色:
<Link target='resource' source='role' foreignKeyColumn='role_id'/>
定义维度
最初令人困惑的是,角色维需要表资源。那是因为事实表只知道RESOURCE_ID而不是ROLE_ID。但由于每个资源都与其角色相关联,因此您可以使用“属性”来定义角色特定字段。
<Dimension name="Role" table="resource" key="ID">
<Attributes>
<Attribute name="ID" keyColumn="id" hasHierarchy="false"/>
<Attribute name="Title" table="role" keyColumn="title"/>
</Attributes>
</Dimension>
使用尺寸
要使用维度,我们必须使用多维数据集维度中的维度RESOURCE_ID,并将事实表格链接到角色维度。
用途:
<Dimension source="Role"/>
DimensionLinks:
<ForeignKeyLink dimension="Role" foreignKeyColumn="resource_id"/
本文介绍如何在Mondrian中为角色属性创建维度,通过使用表别名和链接表的方法解决角色与资源之间的循环依赖问题,实现角色维度在多维数据集中的正确映射。
1194

被折叠的 条评论
为什么被折叠?



