dimDate : 1 row per date
dimTime : 1 row per minute
Вначале вы должны указать « зерна » таблицы фактов, а затем придерживаться ее .
Если зерно составляет один день, то TimeKey
всегда указывает на ключ «23:59».
Если зерно составляет один час, то TimeKey
указывает на записи «HH».: 59 ".
Если зерно составляет одну минуту, то TimeKey
указывает на соответствующее" ЧЧ: ММ "
Если зерно составляет 15 минут, то TimeKey
указывает насоответствующие "ЧЧ: 14", "ЧЧ: 29", "ЧЧ: 44", "ЧЧ: 59"
И так далее ...
-- How many new friends did specific user gain
-- in first three months of years 2008, 2009 and 2010
-- between hours 3 and 5 in the morning
-- by day of week
-- not counting holidays ?
select
DayOfWeek
, sum(NewFriends) as FriendCount
from factUserAction as f
join dbo.dimUser as u on u.UserKey = f.UserKey
join dbo.dimDate as d on d.DateKey = f.DateKey
join dbo.dimTime as t on t.TimeKey = f.TimeKey
where CalendarYear between 2008 and 2010
and MonthNumberInYear between 1 and 3
and t.Hour between 3 and 5
and d.IsHoliday = 'no'
and UserEmail = 'john_doe@gmail.com'
group by DayOfWeek
order by DayOfWeek ;