5.2.3、SSAS-维度-日期维度

来源:互联网 发布:淘宝闪电付款 编辑:程序博客网 时间:2024/04/30 12:03

维度-日期维度的建立

 

 

1          日期维度

 

日期维度存在于几乎所有的Cube中,它是最最普遍和最重要的维度之一。

 

要创建日期维度,首先需要创建一个日期维度表,并编写填充数据的存储过程。

 

日期维度表DimDate如下:

drop table DimDate

create table DimDate

(

         DateKey int primarykey,

         FullDate date,

        

         DayNumOfWeek int,

         DayNameOfWeeknvarchar(100),

         IsWeekEndnvarchar(100),

        

         DayNumOfMonth int,

         DayNameOfMonthnvarchar(100),

        

         DayNumOfYear int,

         DayNameOfYearnvarchar(100),

         IsHolidaynvarchar(100),

         DayDesc nvarchar(100),

        

         WeekNumOfYear int,

         WeekNameOfYearnvarchar(100),

        

         MonthNumOfYear int,

         MonthNameOfYearnvarchar(100),

        

         QuarterNumOfYear int,

         QuarterNameOfYearnvarchar(100),

        

         SemesterNumOfYear int,

         SemesterNameOfYearnvarchar(100),

        

         YearNum int,

         YearName nvarchar(100)

)

 

填充日期维度数据的存储过程如下:

declare @beginDate date

            ,@endDate date

 

set @beginDate='2013-01-01'

set @endDate='2020-01-01'

 

while(@beginDate<@endDate) begin

 

         insert into DimDate(

                   DateKey,FullDate, DayNumOfWeek, DayNameOfWeek, IsWeekEnd, DayNumOfMonth, DayNameOfMonth

                   ,DayNumOfYear,DayNameOfYear, WeekNumOfYear, WeekNameOfYear, MonthNumOfYear, MonthNameOfYear

                   ,QuarterNumOfYear,QuarterNameOfYear, SemesterNumOfYear, SemesterNameOfYear, YearNum, YearName

         )

         selectCAST(CONVERT(VARCHAR(8),@beginDate,112) AS INT) AS DateKey

                     ,@beginDate FullDate

                     ,DATEPART(DW,@beginDate) AS DayNumOfWeek

                     ,N'周'+cast(DATEPART(DW,@beginDate)as nvarchar) AS DayNameOfWeek

                     ,case when DATEPART(DW,@beginDate) in(6,7)then N'是' else N'否' end IsWeekEnd

                     ,DATEPART(DD,@beginDate) AS DayNumOfMonth

                     ,cast(DATEPART(DD,@beginDate) as nvarchar)+N'日' ASDayNameOfMonth

                     ,DATENAME(DY,@beginDate) AS DayNumOfYear

                     ,N'第'+cast(DATENAME(DY,@beginDate)as nvarchar)+N'日' AS DayNameOfYear

                     ,DATEPART(WW,@beginDate) AS WeekNumOfYear

                     ,N'第'+cast(DATENAME(WW,@beginDate)as nvarchar)+N'周' AS WeekNameOfYear

                     ,DATEPART(MM,@beginDate) AS MonthNumOfYear

                     ,cast(DATENAME(MM,@beginDate) as nvarchar)+N'月' ASMonthNameOfYear

                     ,DATEPART(QQ,@beginDate) AS QuarterNumOfYear

                     ,cast(DATEPART(QQ,@beginDate) as nvarchar)+N'季度' ASQuarterNameOfYear

                     ,case when DATENAME(MM,@beginDate) between 1and 6 then 1 else 2 end SemesterNumOfYear

                     ,case when DATENAME(MM,@beginDate) between 1and 6 then N'上半年' else N'下半年' end SemesterNameOfYear

                     ,DATEPART(YY,@beginDate) YearNum

                     ,cast(DATEPART(YY,@beginDate) as nvarchar)+N'年' YearName

 

         set@beginDate=dateadd(dd, 1, @beginDate)

end

 

2          创建日期维度

 

维度-》右键-》新建维度-》使用现有表-》数据源视图“AdventureWorksDW”-》主表“DimDate”-》键列“DateKey”-》名称列“FullDate”-》下一步-》勾选所有不带Name的属性(带Name的属性将作为NameColumn的值)-》修改维度各个属性的NameColumn-》处理-》查看数据,可以看到各个属性的成员值都变成了名称列的值

 

建立层次结构,由于时间可以构建非常复杂的层次结构,在此我们列出一些常用的层次结构,其它层次结构可以根据具体的情况来建立。

l  年-月-日

l  年-季-月

l  年-周

l  年-月

l  年-半年-月

l  年-月-周

l  年-半年-季

l  年-季-月

l  周-日

 

建立好层次结构后,就可以处理了,然后进行查看。这里为什么不建立匹配的属性关系呢?因为会报错,我也不知道为什么报错,请大神指教,为了不报错,所以我建立的是默认的星型属性关系。这样可以随意建立层次结构而不报错。

 

处理后,查询各个层次结构的数据。

 

0 0