《BI项目笔记》创建时间维度(1)
SSAS Date 维度基本上在所有的 Cube 设计过程中都存在,很难见到没有时间维度的 OLAP 数据库。但是根据不同的项目需求, Date 维度的设计可能不大相同,所以在设计时间维度的时候需要搞清楚几个问题:
- 你的业务涉及到的最低的细节级别是什么?比如按季度查看报表还是按月份,或者按周,或者再甚者按天。这个细节级别需要弄清楚,比如在一些销售数据统计,有的时候可能更多按季度或者按月来查看报表。但在有的监控一些机器运行数据的统计,可能会按照小时或者分钟来查看报表。
- 你的报表所需要时间显示的格式是什么,比如在英文系统中客户是希望显示月份的全称 January 或者简称 Jan 或者只喜欢看到数字1,2,3 到12 这种类型。包括显示具体天的时候是希望看到 10/1/2005 还是 2005/10/01 等格式。
- 还有没有一些特别的时间信息比如不仅仅需要自然年,而且还需要财年信息,以及其它是否是闰年,周末等这样的要求。
- 最重要的一点是客户喜欢按照哪一种或者哪几种层次结构来查看报表,比如第一层是年,通过年导航到月再导航到日期;还是说通过年直接导航到周再到具体的日期。
弄清楚上面这几方面的内容之后,心里大概知道时间属性的范围了,细到哪一种级别,由哪些特别的字段需要添加都在这个设计阶段完成。
一般情况下,可以自己写一个创建时间日期的数据仓库维度表,在这个脚本里面可以根据需要自定义一些特别的日期格式。
GO
SET NOCOUNT ON IF OBJECT_ID('DimDate', 'U') IS NOT NULL
DROP TABLE DimDate
GO CREATE TABLE DimDate
(
DateKey INT PRIMARY KEY ,
FullDate DATE NOT NULL ,
[DateName] NVARCHAR(20) ,
DayNumberOfWeek TINYINT NOT NULL ,
DayNameOfWeek NVARCHAR(10) NOT NULL ,
DayNumberOfMonth TINYINT NOT NULL ,
DayNumberOfYear SMALLINT NOT NULL ,
IsWeekend BIT NOT NULL ,
IsLeapYear BIT NOT NULL ,
WeekNumberOfYear TINYINT NOT NULL ,
EnglishMonthName NVARCHAR(10) NOT NULL ,
MonthNumberOfYear TINYINT NOT NULL ,
CalendarQuarter TINYINT NOT NULL ,
CalendarSemester TINYINT NOT NULL ,
CalendarYear SMALLINT NOT NULL ,
FiscalQuarter TINYINT NOT NULL ,
FiscalSemester TINYINT NOT NULL ,
FiscalYear SMALLINT NOT NULL
) DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME SELECT @StartDate = '2005-01-01' ,
@EndDate = '2014-12-31' WHILE ( @StartDate <= @EndDate )
BEGIN
INSERT INTO DimDate
( DateKey ,
FullDate ,
[DateName] ,
DayNumberOfWeek ,
DayNameOfWeek ,
DayNumberOfMonth ,
DayNumberOfYear ,
IsWeekend ,
IsLeapYear ,
WeekNumberOfYear ,
EnglishMonthName ,
MonthNumberOfYear ,
CalendarQuarter ,
CalendarSemester ,
CalendarYear ,
FiscalQuarter ,
FiscalSemester ,
FiscalYear
)
SELECT CAST(CONVERT(VARCHAR(8), @StartDate, 112) AS INT) AS DateKey ,
CONVERT(VARCHAR(10), @StartDate, 20) AS FullDate ,
CONVERT(VARCHAR(20), @StartDate, 106) AS [DateName] ,
DATEPART(DW, @StartDate) AS DayNumberOfWeek ,
DATENAME(DW, @StartDate) AS DayNameOfWeek ,
DATENAME(DD, @StartDate) AS [DayOfMonth] ,
DATENAME(DY, @StartDate) AS [DayOfYear] ,
CASE WHEN DATEPART(DW, @StartDate) IN ( 1, 7 ) THEN 1
ELSE 0
END AS IsWeekend ,
CASE WHEN ( ( YEAR(@StartDate) % 4 = 0 )
AND ( YEAR(@StartDate) % 100 != 0
OR YEAR(@StartDate) % 400 = 0
)
) THEN 1
ELSE 0
END AS IsLeapYear ,
DATEPART(WW, @StartDate) AS WeekNumberOfYear ,
DATENAME(MM, @StartDate) AS EnglishMonthName ,
DATEPART(MM, @StartDate) AS MonthNumberOfYear ,
DATEPART(QQ, @StartDate) AS CalendarQuarter ,
CASE WHEN DATEPART(MM, @StartDate) BETWEEN 1 AND 6
THEN 1
ELSE 2
END AS CalendarSemester ,
DATEPART(YY, @StartDate) AS CalendarYear ,
CASE WHEN DATEPART(MM, @StartDate) BETWEEN 1 AND 6
THEN DATEPART(QQ, @StartDate) + 2
ELSE DATEPART(QQ, @StartDate) - 2
END AS FiscalQuarter ,
CASE WHEN DATEPART(MM, @StartDate) BETWEEN 1 AND 6
THEN 2
ELSE 1
END AS FiscalSemester ,
CASE WHEN DATEPART(MM, @StartDate) BETWEEN 1 AND 6
THEN DATEPART(YY, @StartDate)
ELSE DATEPART(YY, @StartDate) + 1
END AS FiscalYear SET @StartDate = @StartDate + 1
END
GO
---------------------------------------------------------------------
-- 加上视图的作用是因为在实际的项目开发中,SSAS 的数据源视图所有的表对象
-- 应该都引用视图,这样当数据仓库中维度表或者事实表有小的改动就可以直接在
-- 视图中修改,而可以避免修改 SSAS 项目。
-- 这一点在 SSIS 开发中同样适用,所有在 SSIS 中配置的 SQL 语句都封装在存储
-- 过程中,表封装在视图中。逻辑的修改直接体现在存储过程中,而不会修改 SSIS。
----------------------------------------------------------------------
IF OBJECT_ID('vDimDate', 'V') IS NOT NULL
DROP VIEW vDimDate
GO CREATE VIEW vDimDate
AS
-- 可以根据需要实现一些计算列,这些计算列通常也可以在 SSAS 视图中添加。
SELECT DateKey AS 'DateKey' ,
FullDate AS 'FullDate' ,
[DateName] AS 'DateName' ,
CONVERT(VARCHAR(2), DayNumberOfMonth) + ' ' + EnglishMonthName + ' '
+ CONVERT(CHAR(4), CalendarYear) AS 'FullDateName' , -- 1 July 2005
DayNumberOfWeek AS 'DayNumberOfWeek' ,
DayNameOfWeek AS 'DayNameOfWeek' ,
DayNumberOfMonth AS 'DayNumberOfMonth' ,
DayNumberOfYear AS 'DayNumberOfYear' ,
CASE WHEN IsWeekend = 1 THEN 'Weekend'
ELSE 'Weekday'
END AS 'WeekdayWeekend' ,
IsLeapYear AS 'IsLeapYear' ,
WeekNumberOfYear AS 'WeekNumberOfYear' ,
EnglishMonthName AS 'EnglishMonthName' ,
EnglishMonthName + ' ' + CONVERT(CHAR(4), CalendarYear) AS 'MonthName' , -- July 2005
CalendarYear * 100 + MonthNumberOfYear AS 'MonthKey' , --
MonthNumberOfYear AS 'MonthNumberOfYear' ,
CalendarQuarter AS 'CalendarQuarter' ,
CalendarSemester AS 'CalendarSemester' ,
CalendarYear AS 'CalendarYear' ,
CalendarYear * 100 + CalendarQuarter AS 'CalendarQuarterKey' , --
'CY ' + CONVERT(CHAR(4), CalendarYear) AS 'CalendarYearName' , -- CY 2005
'CY ' + CONVERT(CHAR(4), CalendarYear) + ' Qtr '
+ CONVERT(CHAR(1), CalendarQuarter) AS 'CalendarQuarterName' , -- CY 2005 Qtr 3
FiscalQuarter AS 'FiscalQuarter' ,
FiscalSemester AS 'FiscalSemester' ,
FiscalYear AS 'FiscalYear' ,
FiscalYear * 100 + FiscalQuarter AS 'FiscalQuarterKey' , --
'FY ' + CONVERT(CHAR(4), FiscalYear) AS 'FiscalYearName' , -- FY 2006
'FY ' + CONVERT(CHAR(4), FiscalYear) + ' Qtr '
+ CONVERT(CHAR(1), FiscalQuarter) AS 'FiscalQuarterName' -- FY 2006 Qtr 1
FROM DimDate
GO
数据处理:
--新增CheckDate字段
ALTER TABLE Tqc_Raw_Chemistry ADD CheckDate INT NULL
ALTER TABLE T_TIR_QualityModelAdmin ADD CheckDate INT NULL
ALTER TABLE T_QualMoisture_Middle ADD CheckDate INT NULL --将datetime转为int
UPDATE Tqc_Raw_Chemistry
SET CheckDate = CAST(REPLACE(CONVERT(CHAR(10), CheckTime, 120), '-', '') AS INT)
UPDATE T_TIR_QualityModelAdmin
SET CheckDate = CAST(REPLACE(CONVERT(CHAR(10), F_CheckDate, 120), '-', '') AS INT)
UPDATE T_QualMoisture_Middle
SET CheckDate = CAST(REPLACE(CONVERT(CHAR(10), T_Check_Date, 120), '-', '') AS INT) --删除CheckDate为NULL情况
DELETE FROM Tqc_Raw_Chemistry
WHERE CheckDate IS NULL
DELETE FROM T_TIR_QualityModelAdmin
WHERE CheckDate IS NULL
DELETE FROM T_QualMoisture_Middle
WHERE CheckDate IS NULL
《BI项目笔记》创建时间维度(1)的更多相关文章
- 《BI项目笔记》——微软BI项目笔记连载
本系列文章主要是结合实际项目,加上自己的总结,整理出来的一系列项目笔记,涉及微软SQL Server2008中商务智能开发中的SSAS.SSIS模块: 准备工作: <BI项目笔记>基于雪 ...
- 《BI项目笔记》创建时间维度(2)
创建步骤: 序号 选择的属性 重命名后的名称 属性类别 1 DateKey DateKey 常规 2 Month Key Month Key 月份 3 English Month Name Eng ...
- 《BI项目笔记》创建多维数据集Cube(1)
有两个事实表,因此就有两个度量值组,并且向导将为非维度键的事实表中的每一个数值列创建一个度量值.由于我们这里不需要那么多,所以只选择部分度量值.另外要注意,度量值的名称源于事实表中的列,所有名称由可能 ...
- 《BI项目笔记》创建多维数据集Cube(2)
本节建立: 历年的初烟水分均值变化分析Cube:区域维度:地州,专县时间维度:年等级维度:大等级,小等级指标:水分均值 数据源视图: 数据处理: ) ) DELETE FROM T_QualMoist ...
- 《BI项目笔记》增量ETL数据抽取的策略及方法
增量抽取 增量抽取只抽取自上次抽取以来数据库中要抽取的表中新增或修改的数据.在ETL使用过程中.增量抽取较全量抽取应用更广.如何捕获变化的数据是增量抽取的关键.对捕获方法一般有两点要求:准确性,能够将 ...
- 《BI项目笔记》多维数据集中度量值设计时的聚合函数
Microsoft SQL Server Analysis Services 提供了几种函数,用来针对包含在度量值组中的维度聚合度量值.默认情况下,度量值按每个维度进行求和.但是,通过 Aggrega ...
- 《BI项目笔记》历年理化指标分析Cube的建立
该系统属于数据仓库系统,与传统的管理信息系统有本质差别,是“面向主题”设计的.“面向主题”的方式,既有利于数据组织和利用,又有利于用户的理解和使用. 分析主题主要维度:烟叶级别.烟叶级别按等级信息.烟 ...
- 《BI项目笔记》历年的初烟水分均值变化分析Cube的建立
主要维度: 班组班次检测项质检日期(时间维度)加工客户加工类型收购类型生产线产地烟叶级别 主要指标:慢速测定_平均值快速测定_平均值红外测定_平均值ETL设计 需要抽取的维度表: 序号 表名 说明 备 ...
- 《BI项目笔记》历年感官评吸质量均值变化分析Cube的建立
分析主题主要维度:烟叶级别.烟叶级别按等级信息.烟叶级别按分级标准(标准维度)产地(父子维度)检测时间(时间维度,以Tqc_Raw_SmokingTest .CheckTime字段派生CheckDat ...
随机推荐
- Kafka - protocol
http://kafka.apache.org/protocol 具体的协议看原文, Preliminaries Network Kafka uses a binary protocol ov ...
- Shell displays color output
格式: echo "/033[字背景颜色;字体颜色m字符串/033[控制码" 如果单纯显示字体颜色可以固定控制码位0m. 格式: echo "/033[字背景颜色;字体颜 ...
- 白话学习MVC(九)View的呈现一
一.概述 本节来看一下ASP.NET MVC[View的呈现]的内容,View的呈现是在Action执行之后进行,Action的执行生成一个ActionResult,[View的呈现]的功能就是:通过 ...
- centos7 yum安装mysql5.7并在root密码忘记的情况下重设密码
CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1. 下载mysql的repo源 1 $ wget http://repo.mysql ...
- 《android 导入第三方源码jar包遇到的坑》
最近想做个app,里面需要有一个二维码扫描的功能,然后谷歌之后发现Zxing这个用的人好多,就看看怎么用: 然后就在github上拉下他们的源码,导入eclipse,然后编译之后导出为jar文件[用的 ...
- Android动画的实现原理 .
1.动画运行模式 独行模式 中断模式 2.Animation类 每个动画都重载了父类的applyTransformation方法这个方法的主要作用是把一些属性组装成一个Transformation类, ...
- uniq-删除重复
uniq常用于管道中,用来删除已使用sort排序完成的重复记录. uniq有3个好用的选项: -c 可在每个输出行之前加上该行重复的次数: -d 仅显示重复的行 -u 仅显示未重复的行
- 用"僵尸对象"调试内存管理问题
Cocoa提供了"僵尸对象"(Zombie Object)这个功能.启用这项调试功能之后,运行时系统会把所有已经回收的实例转化成特殊的"僵尸对象",而不会真正回 ...
- [Android Tips] 17. Check APK Sign Info
$ jarsigner -verify -verbose -certs <apk file path> 查看 keystore $ keytool -list -keystore debu ...
- DNS消息格式
一,简介 空谈误国,要让一大堆抽象的DNS概念落地,还是需要了解DNS消息格式的,本文会尽量详细地介绍DNS消息格式的每一个字段. 也可以移步rfc1035了解. 二,概览 DNS消息主要由五部分组成 ...