0

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

Вся эта информация хранится в трех разных таблицах в моем приложении db, таком как UserLoginHistory, CallHistory, OrderStatusHistory. Все действия, выполняемые каждым пользователем, хранятся в этих трех таблицах вместе с информацией DateTime.

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

  1. UserName
  2. Роль
  3. Количество Логины Made
  4. Количество вызовов, сделанных
  5. Количество обновлений статуса Сделано

Теперь я нахожусь в процессе разработки моей таблицы фактов. Как мне нужно создать таблицу фактов для этого сценария? Должен ли я приступить к созданию единой таблицы фактов со строками в ней, которые фиксируют все эти детали на уровне детализации (на моем уровне таблицы DimDate) или 3 разных таблицах фактов и связывают их?

2 варианта, которые я описал выше, arent убедительны, и я ищу лучший дизайн. Благодарю.

+0

На основе вашего описания вы имеете размер пользователя (с ролью в нем), и у вас есть таблица фактов на неизвестном уровне детализации с логинами, вызовами, статусами фактов. Вам нужно будет объяснить вашу проблему немного лучше, потому что я не вижу проблемы! –

+0

Nick.McDermaid - я обновил. – Vinoth

+0

Все ли факты на том же уровне детализации? если так, то нет абсолютно никаких оснований ставить их в несколько фактов. Одной из целей DW является упрощение запросов. Зачем делать это сложнее, бесполезно помещая их в три таблицы фактов? –

ответ

2

Как правило, когда у вас есть отчет, в котором используются разные факты/показатели (Number of Logins Made, Number of Calls Made, Number of Status updates Made) с той же детализацией (UserName, Role, Day/Hour/Minute), вы помещаете их в ту же таблицу фактов, чтобы избежать дорогостоящих объединений.

По многим причинам это не всегда возможно, но ваш случай мне кажется несколько иным.

У вас есть три таблицы с активностью пользователя, где, вероятно, вы храните более подробную информацию о входах, вызовах и обновлениях состояния. Что вам нужно для вашего отчета, это таблица с вашими метриками и значениями, агрегированными для требуемой гранулярности времени.

Допустим, вам нужен отчет на уровне дня, вам нужен стол, как это:

Day  UserID RoleID #Logins #Calls #StatusUpdate 
20150101 1  1  1  5  3 
20150101 2  1  4  15  8 

Если завтра дело будет требовать отчет часа, вам потребуется:

DayHour   UserID RoleID #Logins #Calls #StatusUpdate 
20150101 10:00AM 1  1  1  2  1 
20150101 11:00AM 1  1  0  3  2 
20150101 09:00AM 2  1  2  10  4 
20150101 10:00AM 2  1  2  5  4 

Затем таблица уровня дня будет похожа на агрегированную (по дате) версию второго. Атрибут DayHour - это ребенок первого дня.

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

Вы также можете начать прямо с итоговой таблицы на минутном уровне, но я бы дважды уточнил это требование в бизнесе, обычно одного часа (или 15 минут).

Затем, если им необходимо получить более подробную информацию, вы всегда можете развернуть свои исходные таблицы.Хорошо, что когда вы тренируетесь до этого уровня, у вас должен быть только небольшой набор строк для запроса (например, всего несколько часов для определенного имени пользователя), и ваша база данных должна иметь возможность обрабатывать его.

+0

Большое спасибо за ваше заблуждение. Именно так я и разработал. – Vinoth