如何用雪花模式编写维度? 。详情如下

时间:2012-11-27 03:45:21

标签: olap pentaho mondrian rolap snowflake-schema

有三个表 -

1)学生 - 我的事实表(参考地址与FK ADDRESS_ID

2)地址 - 此表包含FK COUNTRY_ID引用COUNTRY

3)国家/地区 - 我有一个NAME COLUMN,我会显示。 (PK IDENTIFIER)

我写过这个但不确定是否正确

基本上我想加入学生(FACT TABLE)到国家 事实的消耗--- Def ..然后这个

<Dimension foreignKey="ADDRESS_ID" name="COUNTRY">
  <Hierarchy name="COUNTRY NAME" hasAll="true" primaryKey="IDENTIFIER" primaryKeyTable="ADDRESSES">
    <Join leftKey="IDENTIFIER" rightKey="IDENTIFIER">
      <Table name="ADDRESSES" >
      </Table>
      <Table name="COUNTRIES" >
      </Table>
    </Join>
    <Level name="Country Name" visible="true" table="COUNTRIES" column="NAME" nameColumn="NAME" uniqueMembers="false">
    </Level>
  </Hierarchy>
</Dimension>

1 个答案:

答案 0 :(得分:0)

您尚未正确连接。我将假设您的关系模式如下所示:

.-STUDENT-------.  
| IDENTIFIER PK |    .-ADDRESSES-----.
| ADDRESS_ID FK |----| IDENTIFIER PK |    .-COUNTRIES-----.
                     | COUNTRY_ID FK |----| IDENTIFIER PK |
                                          | NAME          |

JOIN元素需要在最低粒度维度表ADDRESS和下一级别(COUNTRY)之间建立连接。连接这些表的键是COUNTRY_ID(对于ADDRESS)和IDENTIFIER(COUNTRY)。然后需要将leftKey设置为COUNTRY_ID。

此外,您正在使用Level的nameColumn属性,但这实际上用于设置级别自己的名称,而不是成员名称。我会删除它。总之,你会看到这样的东西:

<Dimension foreignKey="ADDRESS_ID" name="COUNTRY">
  <Hierarchy name="COUNTRY NAME" hasAll="true" primaryKey="IDENTIFIER" primaryKeyTable="ADDRESSES">
    <Join leftKey="COUNTRY_ID" rightKey="IDENTIFIER">
      <Table name="ADDRESSES" >
      </Table>
      <Table name="COUNTRIES" >
      </Table>
    </Join>
    <Level name="Country Name" visible="true" table="COUNTRIES" column="NAME">
    </Level>
  </Hierarchy>
</Dimension>