如何在蒙德里安中使用雪花模式?

How to use a Snowflake-Schema in Mondrian?

我有一个事实 table,它有一个 RESOURCE_ID 链接到资源 table。一个资源有一个角色,它自己就是一个资源。

.--FACTTABLE--.  
| IDENTIFIER  |    .--RESOURCE---.
| RESOURCE_ID |----| RESOURCE_ID |    .--RESOURCE---.
                   | ROLE_ID     |----| RESOURCE_ID |
                                      | TITLE       |

现在我想创建一个包含属性 TITLE 的维度 ROLE

如何做到这一点? Mondrian 4 Schema 示例将不胜感激。

我知道 <PhysicalSchema><Link><DimensionLinks><ForeignKeyLink>,但我不知道如何使用他们正确。

好的,我知道怎么做了。


解决循环

由于角色和资源都来自table RESOURCE,蒙德里安无法处理,进入了一个循环。

我用 RESOURCE table:

的别名解决了这个问题
<Table name="resource" schema="public" keyColumn="id" alias="role"/>

Link tables

要让 Mondrian 知道哪个资源属于哪个角色,您需要 link 两个 tables。

因此,资源 table 有一个键很重要:

<Table name="resource" schema="public" keyColumn="id"/>

现在您可以link 角色的资源:

<Link target='resource' source='role' foreignKeyColumn='role_id'/>

定义维度

起初令人困惑的是,角色维度需要 table 资源。那是因为事实 table 只知道 RESOURCE_ID 而不知道 ROLE_ID。但是由于每个资源都 link 对应于它的角色,您可以使用属性来定义特定于角色的字段。

<Dimension name="Role" table="resource" key="ID">
    <Attributes>
        <Attribute name="ID" keyColumn="id" hasHierarchy="false"/>
        <Attribute name="Title" table="role" keyColumn="title"/>
    </Attributes>
</Dimension>

使用维度

要使用维度,我们必须使用多维数据集维度中的维度,并且 link 事实 table 的 RESOURCE_ID 到角色维度。

用法:

<Dimension source="Role"/>

维度Links:

<ForeignKeyLink dimension="Role" foreignKeyColumn="resource_id"/>