1、首先要构建一个时间维度表,下面给出通用的构建时间维度的存储过程:

USE [BI_DW]
GO
/****** Object: StoredProcedure [dbo].[proc_Dim_date] Script Date: 05/20/2016 11:35:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[proc_Dim_date]
as
begin IF OBJECT_ID('dbo.Dim_Date') IS NOT NULL
DROP TABLE dbo.[Dim_Date] CREATE TABLE [dbo].[Dim_Date](
[DateKey] [int] NULL,
[Date] [datetime] NULL,
[Year] [float] NULL,
[Month] [float] NULL,
[Month EN] [nvarchar](50) NULL,
[Month Short EN] [nvarchar](50) NULL,
[Month CN] [nvarchar](50) NULL,
[Day] [float] NULL,
[Quarter] [float] NULL,
[Quarter EN] [nvarchar](50) NULL,
[Quarter CN] [nvarchar](50) NULL,
[Weekday] [float] NULL,
[Weekday CN] [nvarchar](50) NULL,
[Weekday Short EN] [nvarchar](50) NULL,
[Week of Year] [float] NULL,
[Day of Year] [float] NULL,
[SemiYearly] [nvarchar](50) NULL,
[Period of Ten Days] [nvarchar](10) NULL,
[Period of Index] [nvarchar](2) NULL,
[Weekend] [nvarchar](5) NULL
) ON [PRIMARY] SET DATEFIRST 7 --设周日为每周的第一天 --向日期表插入数据
DECLARE @b1 DATETIME
set @b1='2010-01-01' --设置起始日期 WHILE @b1<dateadd(day,2,GETDATE()) --设置截止日期
BEGIN
INSERT INTO dbo.[Dim_Date] (
[DateKey],
[Date],
[Year],
[Month],
[Month EN],
[Month Short EN],
[Month CN],
[Day],
[Quarter],
[Quarter EN],
[Quarter CN],
[Weekday],
[Weekday CN],
[Weekday Short EN],
[Week of Year],
[Day of Year],
[SemiYearly],
[Period of Ten Days],
[Period of Index] ,
[Weekend]
)
VALUES(
CONVERT(NVARCHAR(10),@b1,112), --DateKey 1
@b1, --Date 2
DATEPART(year, @b1), --Year 3
DATEPART(month, @b1), --Month 4
CASE --Month EN 5
when (DATEPART(month, @b1))='' then 'January'
when (DATEPART(month, @b1))='' then 'February'
when (DATEPART(month, @b1))='' then 'March'
when (DATEPART(month, @b1))='' then 'April'
when (DATEPART(month, @b1))='' then 'May'
when (DATEPART(month, @b1))='' then 'June'
when (DATEPART(month, @b1))='' then 'July'
when (DATEPART(month, @b1))='' then 'August'
when (DATEPART(month, @b1))='' then 'September'
when (DATEPART(month, @b1))='' then 'October'
when (DATEPART(month, @b1))='' then 'November'
else 'December'
END,
CASE --Month Short En 6
when (DATEPART(month, @b1))='' then 'Jan'
when (DATEPART(month, @b1))='' then 'Feb'
when (DATEPART(month, @b1))='' then 'Mar'
when (DATEPART(month, @b1))='' then 'Apr'
when (DATEPART(month, @b1))='' then 'May'
when (DATEPART(month, @b1))='' then 'Jun'
when (DATEPART(month, @b1))='' then 'Jul'
when (DATEPART(month, @b1))='' then 'Aug'
when (DATEPART(month, @b1))='' then 'Sep'
when (DATEPART(month, @b1))='' then 'Oct'
when (DATEPART(month, @b1))='' then 'Nov'
else 'Dec'
END,
CASE --Month CN 7
when (DATEPART(month, @b1))='' then N'一月'
when (DATEPART(month, @b1))='' then N'二月'
when (DATEPART(month, @b1))='' then N'三月'
when (DATEPART(month, @b1))='' then N'四月'
when (DATEPART(month, @b1))='' then N'五月'
when (DATEPART(month, @b1))='' then N'六月'
when (DATEPART(month, @b1))='' then N'七月'
when (DATEPART(month, @b1))='' then N'八月'
when (DATEPART(month, @b1))='' then N'九月'
when (DATEPART(month, @b1))='' then N'十月'
when (DATEPART(month, @b1))='' then N'十一月'
else N'十二月'
END,
DATEPART(day, @b1),--day 8
DATEName (qq, @b1),--quarter 9
CASE --quarter en 10
when DATEName (qq, @b1)='' then 'Q1'
when DATEName (qq, @b1)='' then 'Q2'
when DATEName (qq, @b1)='' then 'Q3'
else 'Q4'
END,
CASE --quarter cn 11
when DATEName (qq, @b1)='' then N'一季度'
when DATEName (qq, @b1)='' then N'二季度'
when DATEName (qq, @b1)='' then N'三季度'
else N'四季度'
END,
DATEPART(dw, @b1),--Weekday 12
CASE --Weekday CN 13
when DATEPART(dw, @b1)=1 then N'星期日'
when DATEPART(dw, @b1)=2 then N'星期一'
when DATEPART(dw, @b1)=3 then N'星期二'
when DATEPART(dw, @b1)=4 then N'星期三'
when DATEPART(dw, @b1)=5 then N'星期四'
when DATEPART(dw, @b1)=6 then N'星期五'
else N'星期六'
END,
CASE --Weekday Short EN 14 --注意,周日是第一天.
when DATEPART(dw, @b1)='' then 'Sun'
when DATEPART(dw, @b1)='' then 'Mon'
when DATEPART(dw, @b1)='' then 'Tue'
when DATEPART(dw, @b1)='' then 'Wed'
when DATEPART(dw, @b1)='' then 'Thu'
when DATEPART(dw, @b1)='' then 'Fri'
else 'Sat'
END,
DATEName (wk, @b1),--week of year 15
DATEName (dy, @b1),--day of year 16
CASE --SemiYearly 17
when DATEPART(month, @b1)<=6 then N'上半年'
else N'下半年'
END,
CASE --Period of Ten Days 18
when DATEName (dd, @b1)<=10 then N'上旬'
when DATEName (dd, @b1)>20 then N'下旬'
else N'中旬'
END,
CASE --Period of Ten Days 19
when DATEName (dd, @b1)<=10 then N''
when DATEName (dd, @b1)>20 then N''
else N''
END,
CASE --Is it Weekend? 20
when DATEPART(dw, @b1)='' then '周末'
when DATEPART(dw, @b1)='' then '周末'
else '平时'
END
)
--日期加1天
set @b1=DATEADD(day, 1, @b1)
END
end

2、在数据库中构建这样的维度表之后,在SSAS出新建维度,这里就不再多说了。

重点介绍如何构建一个标准的时间维度,首先,打开维度设计选项卡,添加下面两套成员用来构建标准时间维度,按照图中的样子:

3、设置属性:

3.1 将Dim Date的属性“TYPE”设置为:Time

3.2 将带有“层级”的成员属性设置为:以“Day-层级”为例:Type =Days; KeyColumms ='内容见“键列”图',这里选择了组合键(确保在层级中“Day”是唯一的);所以需要设置NameColumns,将NameColumns='Day'用来显示成员而已。

3.3 带有层级的其他成员都按照3.2的设置,具体有不同:Year-层级的Type='Years' ,Month-层级的Type='Months' ,Quater-层级的Type='Quaters';当然还要选择NameColumn的相应字段用来显示。KeyColumns的组合字段的选择,只要符合保证唯一即可,例如Month的KeyColumns:

3.4 按照以上步骤,设置好之后,还是不行的,还需要将属性关系设置合理才行,按照下图的属性关系设置即可;设置成员的属性的时候,最好将成员的order by属性设置为“Key”,这样浏览的数据就会按照key排序了;除了带有层级的成员属性外,其他属性可以不需要额外设置即可;

3.5  这样处理维度,浏览查看效果:

SSAS-时间维度的标准设计的更多相关文章

  1. 《BI项目笔记》创建时间维度(1)

    SSAS Date 维度基本上在所有的 Cube 设计过程中都存在,很难见到没有时间维度的 OLAP 数据库.但是根据不同的项目需求, Date 维度的设计可能不大相同,所以在设计时间维度的时候需要搞 ...

  2. 《BI项目笔记》创建时间维度(2)

    创建步骤:   序号 选择的属性 重命名后的名称 属性类别 1 DateKey DateKey 常规 2 Month Key Month Key 月份 3 English Month Name Eng ...

  3. DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate Date Dimension)

    跟大家的交流是我的动力. :) DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate Date Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★ ...

  4. MySQL学习笔记:生成时间维度表

    # ---- 对应时间戳怎么生成的? ---- /*TIME_CD TIME_CD1000000 000005000001 000005000002 000005000003 000005000004 ...

  5. 【BIEE】15_时间维度建立

    时间维度的建立 1.环境准备 ①新建时间维度表:TIME_DIMENSION 建立时间维度表并插入数据 ---------------创建时间维度表 create table TIME_DIMENSI ...

  6. DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)

    DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★★(5星) 这个时间系列想 ...

  7. 微软BI 之SSAS 系列 - 维度的优化,灌木丛属性关系,以及自然层次结构与非自然层次结构的概念

    维度的优化 在 SSAS 开发设计过程中,维度的优化非常重要,因为它在 SSAS 分析服务性能调优的过程中往往能起到一个非常重要的作用. 一般来说,对于 Cube 的性能优化第一步可能考虑的就是查看维 ...

  8. SSAS的维度表之间的关系只能有一个不能有多个

    我们在SSAS中创建维度的时候,有时候可能一个维度需要用到多个表的字段作为维度属性,那么这多个表之间势必存在关联关系,但是切记维度表之间的关联关系有且只能有一个不能有多个,下面我们来看一个例子. 现在 ...

  9. SSAS Cube 维度成员关系Rigid 和 Flexible

    维度成员关系指示成员关系是否随时间而更改.  值为 Rigid 和 Flexible,前者表示成员之间的关系不随时间而更改,后者表示成员之间的关系随时间而更改. 默认值为 Flexible.  指定适 ...

随机推荐

  1. c#以文件流的形式输出xml(可以解决内存溢出)-XmlTextWriter

    1.XmlTextWriter 表示提供快速.非缓存.只进方法的编写器,该方法生成包含 XML 数据(这些数据符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议)的流或文 ...

  2. #1042 - Can't get hostname for your address

    my.ini 或 my.cnf 末尾添加 skip-name-resolve 并重启MySQL服务器 ok!

  3. Poj 2187 Beauty Contest_旋转凸包卡壳

    题意:给你n个坐标,求最远的两点距离 思路:用凸包算法求处,各个定点,再用旋转凸包卡壳 #include <iostream> #include <cstdio> #inclu ...

  4. [置顶] ID3算法的python实现

    这篇文章的内容接着http://blog.csdn.net/xueyunf/article/details/9214727的内容,所有还有部分函数在http://blog.csdn.net/xueyu ...

  5. scrollTo和scrollTo.js

    最近做一个项目前端要用到scrollTo和滚动视觉差.顺便把两个东西拿出来温习一下. HTML DOM里面定义了scrollTo方法,用法:scrollTo(xpos,ypos),把内容滚动到当前的指 ...

  6. Qt开始学习的一些问题

    1.需要将qmake.moc和qvfb的路径加入到系统的环境变量: qmake.moc:export PATH=$PATH:/usr/local/Trolltech/QtEmbedded-4.6.1- ...

  7. FlashBack-SCN-TIMESTAMP

    一.基于时间(as of timestamp)的flashback1.创建表create table flash_tab(id,vl) as select rownum,oname from ( se ...

  8. 使用Jquery UI 高仿百度搜索下拉列表功能

    最近项目有个需求,在新添加商户的时候,用户输入商户名称后,如果系统中有类似的商户名称,直接显示出来,如下图的效果: 实现这个功能,直接使用了JQuery UI 插件 目前我使用的实现版本是: 网友可以 ...

  9. android——背景颜色渐变(梯度变化)

    首先在drawable文件夹下面新建一个xml文件,起名为bgcolor.xml. 代码如下: <?xml version="1.0" encoding="utf- ...

  10. 《JavaScript 闯关记》之变量和数据类型

    当程序需要将值保存起来以备将来使用时,便将其赋值给一个变量,值的类型称作数据类型. 变量 JavaScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据.换句话说,每个变量仅仅是 ...