Link to home
Start Free TrialLog in
Avatar of aneilg
aneilgFlag for United Kingdom of Great Britain and Northern Ireland

asked on

SQL Date Time Bands SSAS Table

Hello, i am trying to create a time band calendar.

example:-
band 1: Time 00:00 - 00:59
band 2: Time 01:00 - 01:59

band 24: 23:00 - 23:59

thanks.
Avatar of Vadim Rapp
Vadim Rapp
Flag of United States of America image

in what form? a table in sql server database? print on paper? something else?
Avatar of aneilg

ASKER

I need it in a table.

we already have something like this.

      -- bandings
      SET @band2Hours = 'Between ' + CAST(@inHours - (@inHours % 2) AS VARCHAR) + ' and ' + CAST(1 + @inHours - (@inHours % 2) AS VARCHAR) + ' hours'
      SET @band3Hours = 'Between ' + CAST(@inHours - (@inHours % 3) AS VARCHAR) + ' and ' + CAST(2 + @inHours - (@inHours % 3) AS VARCHAR) + ' hours'
      SET @band4Hours = 'Between ' + CAST(@inHours - (@inHours % 4) AS VARCHAR) + ' and ' + CAST(3 + @inHours - (@inHours % 4) AS VARCHAR) + ' hours'
      SET @band5Hours = 'Between ' + CAST(@inHours - (@inHours % 5) AS VARCHAR) + ' and ' + CAST(4 + @inHours - (@inHours % 5) AS VARCHAR) + ' hours'
      SET @band10Hours = 'Between ' + CAST(@inHours - (@inHours % 10) AS VARCHAR) + ' and ' + CAST(9 + @inHours - (@inHours % 10) AS VARCHAR) + ' hours'
      SET @band12Hours = 'Between ' + CAST(@inHours - (@inHours % 12) AS VARCHAR) + ' and ' + CAST(11 + @inHours - (@inHours % 12) AS VARCHAR) + ' hours'
      SET @band24Hours = 'Between ' + CAST(@inHours - (@inHours % 24) AS VARCHAR) + ' and ' + CAST(23 + @inHours - (@inHours % 24) AS VARCHAR) + ' hours'
      SET @band36Hours = 'Between ' + CAST(@inHours - (@inHours % 36) AS VARCHAR) + ' and ' + CAST(35 + @inHours - (@inHours % 36) AS VARCHAR) + ' hours'
      SET @band48Hours = 'Between ' + CAST(@inHours - (@inHours % 48) AS VARCHAR) + ' and ' + CAST(47 + @inHours - (@inHours % 48) AS VARCHAR) + ' hours'
      SET @band72Hours = 'Between ' + CAST(@inHours - (@inHours % 72) AS VARCHAR) + ' and ' + CAST(71 + @inHours - (@inHours % 72) AS VARCHAR) + ' hours'

      INSERT INTO
      DimTimeBandHours (
SOLUTION
Avatar of Vadim Rapp
Vadim Rapp
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of aneilg

ASKER

thanks but its not what i needed.

I need to create a table so i can create a time calendar in SSAS.

I need to dynamically populate a table.
Avatar of aneilg

ASKER

i have found this on google, but not quite correct.

CREATE TABLE [dbo].[DimTime](
 [TimeSK] [int] IDENTITY(1,1) NOT NULL,
 [Time] [char](8) NOT NULL,
 [Hour] [char](2) NOT NULL,
 [MilitaryHour] [char](2) NOT NULL,
 [Minute] [char](2) NOT NULL,
 [Second] [char](2) NOT NULL,
 [AmPm] [char](2) NOT NULL,
 [StandardTime] [char](11) NULL,
 CONSTRAINT [PK_DimTime] PRIMARY KEY CLUSTERED 
 (
 [TimeSK] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 ) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

PRINT CONVERT(VARCHAR,GETDATE(),113)--USED FOR CHECKING RUN TIME.

--Load time data for every second of a day
DECLARE @Time DATETIME

SET @TIME = CONVERT(VARCHAR,'12:00:00 AM',108)

TRUNCATE TABLE DimTime

WHILE @TIME <= '11:59:59 PM'
 BEGIN
 INSERT INTO dbo.DimTime([Time], [Hour], [MilitaryHour], [Minute], [Second], [AmPm])
 SELECT CONVERT(VARCHAR,@TIME,108) [Time]
 , CASE 
 WHEN DATEPART(HOUR,@Time) > 12 THEN DATEPART(HOUR,@Time) - 12
 ELSE DATEPART(HOUR,@Time) 
 END AS [Hour]
 , CAST(SUBSTRING(CONVERT(VARCHAR,@TIME,108),1,2) AS INT) [MilitaryHour]
 , DATEPART(MINUTE,@Time) [Minute]
 , DATEPART(SECOND,@Time) [Second]
 , CASE 
 WHEN DATEPART(HOUR,@Time) >= 12 THEN 'PM'
 ELSE 'AM'
 END AS [AmPm]

 SELECT @TIME = DATEADD(second,1,@Time)
 END

UPDATE DimTime
SET [HOUR] = '0' + [HOUR]
WHERE LEN([HOUR]) = 1

UPDATE DimTime
SET [MINUTE] = '0' + [MINUTE]
WHERE LEN([MINUTE]) = 1

UPDATE DimTime
SET [SECOND] = '0' + [SECOND]
WHERE LEN([SECOND]) = 1

UPDATE DimTime
SET [MilitaryHour] = '0' + [MilitaryHour]
WHERE LEN([MilitaryHour]) = 1

UPDATE DimTime
SET StandardTime = [Hour] + ':' + [Minute] + ':' + [Second] + ' ' + AmPm
WHERE StandardTime is null
AND HOUR <> '00'

UPDATE DimTime
SET StandardTime = '12' + ':' + [Minute] + ':' + [Second] + ' ' + AmPm
WHERE [HOUR] = '00'

Open in new window

If I understand correctly, this table is static table that you'd create and fill just once. You want to write a program for one-time filling 24 lines?
Avatar of aneilg

ASKER

hello,

Yes that correct,

I need a static table to i can join my fact table to it.
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
The optimal way to create static table with 24 lines is to type them, or to use a trivial script like in my first comment.

If this is an academic assignment, the idea is that you have to do it by yourself. We can offer guidance, but we shouldn't be doing it for you.
Avatar of aneilg

ASKER

No its not an assignment.

I left Uni many moons ago.
Since then i have Acquired a wife a few kids and a mortgage.

thanks vitor.