I have built and used Time Dimension tables in a couple of architectures. The simplest architecture (But a lot of detailed information) stored all time values in one table and had the following fields: Four digit year (2002), Leap Year Indicator (1 = Leap Year, 0 = Not a Leap Year), Quarter (Q1), Month Name (January), Month Number ( 1-12),Days In Month (28-31), Work Days in Month, Work Hours in Month, Week Number (1-52),Holiday ( 1 = Holiday, 0 = Not a Holiday),Weekday Weekend ( 1 = Week Day, 0 = Weekend),Day Of Year (1-366), Days Remaining in Year (1-365),Day of Week (1-7),Day Name (Monday...),MM/DD/YYYY Date (31/01/2001). The Primary Key was the MM/DD/YYYY Date. Using this table obviously you can filter for a number of options, as well as group data by the Four Digit Year, Quarterand others.
The Other architecture I have used is a little more normalized but a little more complex to use. It utilized separate tables to store the Year, Quarter, Month,and Day. The Year table contained two columns: the Four Digit Year and Year_ID. The Quarter table had three columns: Quarter, Quarter_ID and Year_ID. The Month table had four columns: Month Number, Month Name, Month_ID, Quarter_ID. The Daily table had four columns: MM/DD/YYYY Date,Day of Week, Day Name, Month_ID.