Две таблицы фактов с одинаковой иерархией, но разной гранулярностью - PullRequest
0 голосов
/ 10 мая 2018

Предположим следующую гипотетическую ситуацию, когда нам нужны две таблицы фактов, определенные как:

Таблица фактических данных

  • Идентификатор_пользователь
  • SchoolID
  • CourseID
  • Статус (пройден / не пройден)

Таблица фактов UserResponse

  • ИД пользователя
  • SchoolID
  • CourseID
  • SubjectID
  • SurveyID
  • Ответ

Понятно, что нам нужна таблица измерений User, но как будет моделироваться другое измерение hiercarhy?

У нас есть два возможных подхода:

1 - Смоделируйте все измерения по отдельности и свяжите их друг с другом (схема снежинки) и свяжите таблицу фактов с соответствующим измерением. В этом случае нам нужно несколько объединений при построении запроса.

2 - Следуя рекомендации Кимбалла, мы должны объединить все отношения 1: n в уникальном измерении, но с этим приближением мы должны построить два измерения, которые содержат одну и ту же информацию, но с разной гранулярностью:

Тусклый обзор

  • ID
  • SurveyDescription
  • SubjectID
  • SubjectDescription
  • CourseID
  • Описание курса
  • SubjectID
  • SubjectDescription
  • SchoolID
  • SchoolDescription

dimCourse

  • ID
  • Описание курса
  • SubjectID
  • SubjectDescription
  • SchoolID
  • SchoolDescription

Какой подход более уместен?

1 Ответ

0 голосов
/ 11 мая 2018

Почему бы вам не создать свою модель данных следующим образом: если у вас есть конкретные вопросы о том, как заполнять каждую таблицу, предоставьте образцы данных, мы можем помочь.

sample model

Обновление: в соответствии с вашим вопросом ниже, вы можете найти ответы, подобные этим, с этой моделью, предполагая, что пользователь такой же, как ученик (добавлен schoolName в таблицу dim_school)

Этот запрос ниже даст вамответьте, сколько учеников в школе на основе данных, которые вы имеете в своей таблице fact_evaluation.Если вы спросите в целом, сколько учеников в конкретной школе, вам нужна дополнительная информация, например, о зачислении и т. Д.

select schoolName, count(distinct userID)
from fact_evaluation f
join dim_school d on d.schoolID = f.schoolID
where schoolName = <a school name>
group by 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...