5.2.3、SSAS-维度-日期维度

维度-日期维度的建立

 

 

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  周-日

 

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

 

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值