欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

分享OLAP的時(shí)間維度設(shè)計(jì)語句

系統(tǒng) 1835 0

時(shí)間維度在OLAP中是很常用,我們一般分為日期維度和時(shí)刻維度組成。我整理了如何生成他們的語句如下

1)日期維度[Dim_Date]

View Code
        IF EXISTS(
        
          select
        
         * FROM sys.objects WHERE object_id = OBJECT_ID(N
        
          '
        
        
          [dbo].[Dim_Date]
        
        
          '
        
        )AND type 
        
          in
        
        (N
        
          '
        
        
          U
        
        
          '
        
        
          ))

Drop table [dbo].[Dim_Date]

GO

CREATE TABLE [dbo].[Dim_Date](

    DateKey [
        
        
          int
        
        
          ] NOT NULL,

    [TheDate] [datetime] NULL, 
        
        --
        
          DateTime格式的日期

    [TheDateName] [nvarchar](
        
        
          10
        
        )NULL, --
        
          日期名稱

    [TheYear] [smallint] NULL,
        
        --
        
          年份

    [TheYearName] [nvarchar](
        
        
          10
        
        )NULL,--
        
          年份名稱

    [TheMonth] [smallint] NULL,
        
        --
        
          月份

    [TheMonthName] [nvarchar](
        
        
          10
        
        )NULL,--
        
          月份名稱

    [TheDay] [smallint] NULL,
        
        --
        
          日

    [TheDayName] [nvarchar](
        
        
          10
        
        )NULL,--
        
          日的名稱

    [TheQuarter] [smallint] NULL,
        
        --
        
          季度

    [TheQuarterName] [nvarchar](
        
        
          10
        
        )NULL,--
        
          季度名稱

    [TheWeek] [smallint] NULL,
        
        --
        
          星期

    [TheWeekName] [nvarchar](
        
        
          10
        
        )NULL,--
        
          星期名稱  

    [Vacation_Mark] [smallint] NULL,
        
        --
        
          節(jié)假日標(biāo)志

    [TheWW] [smallint] NULL,
        
        --
        
          周

    [TheWWName] [nvarchar](
        
        
          20
        
        ) NULL --
        
          周名稱

)ON [PRIMARY]





DECLARE

@DateKey 
        
        
          int
        
        
          ,

@TheDate datetime,

@TheDateName nvarchar(
        
        
          10
        
        
          ),                    

@TheYear smallint,    

@TheYearName nvarchar(
        
        
          10
        
        
          ),

@TheMonth smallint,

@TheMonthName nvarchar(
        
        
          10
        
        
          ),

@TheDay smallint,

@TheDayName nvarchar(
        
        
          10
        
        
          ),

@TheQuarter smallint,

@TheQuarterName nvarchar(
        
        
          10
        
        
          ),

@TheWeek smallint,                    

@TheWeekName nvarchar(
        
        
          10
        
        
          ),

@Vacation_Mark smallint,

@TheWW smallint,

@TheWWName nvarchar(
        
        
          20
        
        
          ),

@dDate DATETIME,
        
        --
        
          存儲(chǔ)起始日期和結(jié)束日期

@adddays smallint
        
        --
        
          存儲(chǔ)日期增量





SELECT @adddays 
        
        = 
        
          1
        
         --
        
          日期增量


        
        --_select @dDate = 
        
          '
        
        
          1/1/2000
        
        
          '
        
        --
        
          當(dāng)前日期


        
        --WHILE @dDate <= 
        
          '
        
        
          12/31/2010
        
        
          '
        
        --
        
          結(jié)束日期

SELECT @dDate 
        
        = 
        
          '
        
        
          1/1/2012
        
        
          '
        
         --
        
          取當(dāng)前系統(tǒng)時(shí)間維度表最大日期

WHILE @dDate 
        
        <= 
        
          '
        
        
          12/31/2012
        
        
          '
        
        --
        
          結(jié)束日期:當(dāng)前日期往后順延5年,可以根據(jù)實(shí)際需求設(shè)置時(shí)長

BEGIN



    
        
        
          select
        
         @DateKey=cast((left(convert(nvarchar,@dDate,
        
          23
        
        ),
        
          4
        
        )+substring(convert(nvarchar,@dDate,
        
          23
        
        ),
        
          6
        
        ,
        
          2
        
        )+
        
          

substring(convert(nvarchar,@dDate,
        
        
          23
        
        ),
        
          9
        
        ,
        
          2
        
        ))
        
          as
        
        
          int
        
        
          )

    SELECT @TheDate 
        
        =
        
           @dDate

    SELECT @TheDateName 
        
        = REPLACE(CONVERT(nvarchar(
        
          20
        
        ),@dDate,
        
          111
        
        ),
        
          '
        
        
          /
        
        
          '
        
        ,
        
          '
        
        
          -
        
        
          '
        
        
          )

    SELECT @TheYear 
        
        =
        
           DATENAME(yy, @dDate)

    SELECT @TheYearName 
        
        = CAST(@TheYear 
        
          as
        
         nvarchar)+
        
          '
        
        
        
          '
        
        
          

    SELECT @TheMonth 
        
        =
        
           DATENAME(mm, @dDate)

    SELECT @TheMonthName 
        
        =CAST(@TheMonth 
        
          as
        
         nvarchar)+
        
          '
        
        
        
          '
        
        
          

    SELECT @TheDay 
        
        =
        
           DATENAME(dd, @dDate)

    SELECT @TheDayName 
        
        = CAST(@TheDay 
        
          as
        
         nvarchar)+
        
          '
        
        
        
          '
        
        
          

    SELECT @TheQuarter 
        
        =
        
           DATENAME(Quarter, @dDate)

    SELECT @TheQuarterName 
        
        = 
        
          '
        
        
        
          '
        
         + CAST(DATENAME(Quarter, @dDate)
        
          as
        
         varchar(
        
          1
        
        ))+
        
          '
        
        
          季度
        
        
          '
        
        
          

    SELECT @TheWeek 
        
        =
        
           DATEPART(dw, @dDate)

    SELECT @TheWeekName 
        
        =
        
           DATENAME(dw,@dDate)

    SELECT @Vacation_Mark 
        
        = CASE WHEN(@TheWeek = 
        
          1
        
         OR @TheWeek = 
        
          7
        
        )THEN 
        
          1
        
         ELSE 
        
          0
        
        
           END

    
        
        
          select
        
         @TheWW=
        
           DATEPART(wk, @dDate)

    
        
        
          select
        
         @TheWWName=
        
          '
        
        
        
          '
        
        +CAST(DATEPART(wk, @dDate)
        
          as
        
         varchar(
        
          2
        
        ))+
        
          '
        
        
        
          '
        
        
            



INSERT INTO Dim_Date(DateKey,TheDate,TheDateName,TheYear,TheYearName,TheMonth,TheMonthName,TheDay,

                        TheDayName,TheQuarter,TheQuarterName,TheWeek,TheWeekName,Vacation_Mark,TheWW,TheWWName)VALUES

(@DateKey,@TheDate, @TheDateName,@TheYear,@TheYearName,@TheMonth,@TheMonthName,@TheDay,@TheDayName,@TheQuarter,

    @TheQuarterName,@TheWeek,@TheWeekName,@Vacation_Mark,@TheWW,@TheWWName)

   SELECT @dDate 
        
        = @dDate +
        
           @adddays

END

GO
        
      

2)時(shí)刻維度[Dim_Time]

View Code
        IF EXISTS(
        
          select
        
        * FROM sys.objects WHERE object_id = OBJECT_ID(N
        
          '
        
        
          [dbo].[Dim_Time]
        
        
          '
        
        )AND type 
        
          in
        
        (N
        
          '
        
        
          U
        
        
          '
        
        
          ))

Drop table [dbo].[Dim_Time]

CREATE TABLE [dbo].[Dim_Time](

    [TimeKey]  
        
        
          int
        
         IDENTITY(
        
          1
        
        ,
        
          1
        
        
          )NOT NULL,

    [TheHour]  smallint NULL, 
        
        --
        
          小時(shí)

    [TheHourName] nvarchar(
        
        
          5
        
        ) NULL,--
        
          小時(shí)名稱

    [HalfHour] smallint NULL, 
        
        --
        
          半小時(shí)

    [HalfHourName] nvarchar(
        
        
          10
        
        )NULL, --
        
          半小時(shí)名稱

    [Min] smallint NULL, 
        
        --
        
          分鐘

    [minName] nvarchar(
        
        
          10
        
        )NULL --
        
          分鐘名稱

)ON [PRIMARY]

DECLARE

@dHour smallint,

@addhours smallint,

@chour nvarchar(
        
        
          5
        
        
          ),

@dhhour smallint,

@hhourname nvarchar(
        
        
          10
        
        
          ),

@dMin smallint,

@dMinName nvarchar(
        
        
          10
        
        
          )


        
        
          select
        
         @dHour = 
        
          0
        
               --
        
          起始小時(shí)


        
        
          select
        
         @dhhour = 
        
          1
        
              --
        
          起始半小時(shí)


        
        
          select
        
         @dmin = 
        
          0
        
                --
        
          起始分鐘

WHILE  @dHour 
        
        <= 
        
          23
        
        
          

BEGIN

   WHILE @dmin 
        
        <=
        
          59
        
        
          

         BEGIN

          
        
        
          select
        
         @dhhour =
        
          

        CASE

        WHEN @dMin 
        
        >=
        
          0
        
          and @dMin <=
        
          29
        
          THEN 
        
          1
        
        
          

        WHEN @dMin 
        
        >=
        
          30
        
         and @dMin <=
        
          59
        
          THEN 
        
          2
        
        
           END

          
        
        
          select
        
         @hhourname =
        
          

        CASE

        WHEN @dhhour 
        
        =
        
          1
        
          THEN 
        
          '
        
        
          前半小時(shí)
        
        
          '
        
        
          

        WHEN @dhhour 
        
        =
        
          2
        
          THEN 
        
          '
        
        
          后半小時(shí)
        
        
          '
        
        
           END

        
        
        
          select
        
         @dMinName = cast(@dhour 
        
          as
        
         nvarchar)+
        
          '
        
        
          :
        
        
          '
        
        +(
        
          case
        
         when len(@dmin)=
        
          1
        
         then(
        
          '
        
        
          0
        
        
          '
        
        +cast(@dmin 
        
          as
        
        
           nvarchar))       

         
        
        
          else
        
         cast(@dmin 
        
          as
        
        
           nvarchar)end)

         
        
        
          select
        
         @chour = cast(@dhour 
        
          as
        
         nvarchar)+ 
        
          '
        
        
          :00
        
        
          '
        
        
          

insert INTO Dim_Time(TheHour,TheHourName,HalfHour,HalfHourName,Min,MinName)VALUES

       (@dHour,@chour,@dhhour,@hhourname,@dMin,@dMinName)

        
        
        
          select
        
         @dMin = @dMin + 
        
          1
        
        
          

        END


        
        
          select
        
         @dmin = 
        
          0
        
        
          select
        
         @dHour = @dHour + 
        
          1
        
        
          

END

GO
        
      

分享OLAP的時(shí)間維度設(shè)計(jì)語句


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲三区视频 | 猛龙怪客| 一区二区免费看 | 日本伦理网站 | 999成人网 | 五月天婷婷网亚洲综合在线 | 色噜噜噜噜噜在线观看网站 | 91网站入口 | 精品久久久久久久久久久久久久 | 91精品国产综合久久久久久丝袜 | 欧美第一区 | 国产成人在线播放视频 | 亚洲综合色在线 | 国产福利视频一区 | 91免费视频网 | 免费观看欧美一级片 | 嫩草影院网站 | 黄色片免费在线 | 亚洲精品久久婷婷丁香51 | 91香焦视频 | 国产欧美一区二区久久 | 91 在线观看 | 99re国产| 国产福利网| 蜜桃视频一区二区三区 | 色资源网站 | 中国免费一级毛片 | 天天干天天干天天 | 色婷婷综合在线 | av在线播放免费 | 大陆黄色网 | 免费的一级毛片 | 久久免费视频一区二区三区 | 亚洲天天做日日做天天看2018 | 国产日韩精品一区 | 日日夜夜精品视频 | 久久久久成人精品免费播放动漫 | 国产真实精品久久二三区 | 色午夜在线 | 日韩一级a毛片欧美一级 | 亚洲色图片区 |