Как я могу написать измерение со схемой снежинки?, Подробности ниже
Есть три таблицы -
1) Студент - Моя таблица фактов (ссылки на адреса с FK ADDRESS_ID
2) Адреса - эта таблица содержит ссылки FK COUNTRY_ID COUNTRY
3) Страна - здесь есть КОЛОНКА ИМЕНИ, которую я бы отображал. (ИДЕНТИФИКАТОР ПК)
Я написал это, но не уверен, что это правильно
По сути, я хочу присоединиться к Студенту (FACT TABLE) в страну Consosts of Fact --- 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 ответ
Вы не сделали соединение правильно. Я предполагаю, что ваша реляционная схема выглядит следующим образом:
.-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.
Кроме того, вы используете атрибут 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>