设为首页 收藏本站
查看: 1138|回复: 0

[经验分享] Sql Server分析服务与多维数据库的学习——CUBE创建

[复制链接]

尚未签到

发表于 2015-6-28 13:47:31 | 显示全部楼层 |阅读模式
  1、打开sql server2008登陆数据库引擎里面,如图片:
DSC0000.jpg
  注意:服务器类型选择数据库引擎;
  然后连接进入····
  2、新建一个叫CubeTest的数据库
DSC0001.jpg
  
  然后使用数据库建表语句创建数据表:


DSC0002.gif DSC0003.gif View Code


USE [CubeTest]
GO
/****** Object:  Table [dbo].[Factdata_2012]    Script Date: 12/12/2012 16:24:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Factdata](
[TRM_ID] [int] NULL,
[YYMM_ID] [int] NULL,
[City_ID] [int] NULL
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[Dim_TRADE]    Script Date: 12/12/2012 16:24:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Dim_TRM](
[TRM_ID] [int] IDENTITY(1,1) NOT NULL,
[TRM] [varchar](10) NULL,
[TRMN] [varchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[TRM_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Dim_Time]    Script Date: 12/12/2012 16:24:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Dim_Time](
[YYMM_ID] [int] IDENTITY(1,1) NOT NULL,
[HGDATE] [varchar](10) NULL,
[yy] [varchar](10) NULL,
[mm] [varchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[YYMM_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Dim_City]    Script Date: 12/12/2012 16:24:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Dim_City](
[City_ID] [int] IDENTITY(1,1) NOT NULL,
[City] [varchar](10) NULL,
[CityN] [varchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[City_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
  好了,数据库的原始表创建好,现在到我们的重头戏了“cube的创建过程”
  1、“cube的创建过程”:
  Cube的创建实质上可以分成2个步骤:
    第一:通过ETL将客户的生产库数据加工成建CUBE所需的元数据表;
    第二:通过Microsoft Visual Studio 2008创建一个analysis service分析服务项目,进行CUBE的创建和部署;
作为演示例子:我们上面所创建的的CubeTest就相当于”第一“那里的元数据表,只是实际的生产环境中元数据表的通过ETL来创建。
接下来,我们来进行上面所提到的第二部,但是在进行这个步骤之前,我们首先要解决自己心中的几个疑问,只有解答了这些疑问才能够真正的理解我们为什么要建立Cube??
问题一:什么是维度和度量值
  示例:你的客户想看销售额,要从时间、城市、企业类型各个角度来查看,这里的时间、城市、企业类型就是维度,销售额就是度量值。
    如:2009年5月份,广州和汕头市国有企业销售额为2088亿美元
在上面的例子中:时间(2009-5)、城市(广州、汕头)、企业(企业类型:国有企业)分别就是时间维度、城市维度和企业类型维度;销售额就是度量值。
问题二:什么是维度表和事实表?创建cube所需要的元数据库是什么样的结构呢?
  维度表就是用来存储维度数据的表,用来记录从哪个方向来描述事实。事实表是用来存储度量值以及维度和度量值对应关系的表

下面来看一下维度表和事实表的结构和关系
  
DSC0004.jpg
上图中,以DIM开头的表都是维度表,Factdata是事实表。看一下它们的表结构:
DSC0005.jpg
  假设我们要查询条件为“广州地区以汽车方式的USD”,那么如果用传统的sql语句可能就要,如:select USD from Factdata_2012  a left outer join Dim_City 然后再outer join Dim_TRM来进行查询(PS:具体类似是外连接表的select操作,我本人也没具体实际操作过,因为平常根本很少需要这样的操作,同时插入多个表的操作可能还比这个多些···~~而且,这么多的外连接操作效率可想而知); 而Cube和MDX也就是为了解决这样的问题而诞生的;
  以上是城市维度Dim_City、运输方式Dim_TRM、事实表FactData的表结构。
城市表中存储了所有的城市名称cityN,其对应的city_id和城市编号City。我们将其理解为城市的字典表
事实表中会存储所有维度的ID和度量值,说明维度和度量值的对应关系。其中USD字段就是以后建cube时的度量值,请记住
下面我们来实际操作Microsoft Visual Studio 2008创建一个cube
第一步:打开VS2008,新建项目,选择analysis services项目,自定义名称后确定。
如图:
DSC0006.jpg
  记住:是“商业智能项目”;
第二步:在解决方案资源管理器中,选择数据源,右键新建一个数据源
如图:
DSC0007.jpg
DSC0008.jpg
  点击“新建”

DSC0009.jpg
录入服务器名,选择cube的元数据库(CubeTest),点击“确定”,
点击下一步,在下图中务必选择“使用服务账户”
DSC00010.jpg
一直下一步,直至完成。
第三步:新建数据源视图
在解决方案资源管理器中选择“数据源视图”,右键新建
DSC00011.jpg
一直点击下一步,到以下界面中,选择需要放到cube中的表,点击下一步直到完成 ;
最终得到下面的关联:(PS:有时候可能需要手动的建立关联)
DSC00012.jpg
第三步:在解决方案资源管理器中新建多维数据集
DSC00013.jpg
点击下一步,一直到以下界面,系统要求选择事实表。请选择Factdata
DSC00014.jpg
点击下一步,选择实施表中的度量值字段,这里选择USD字段即可
DSC00015.jpg
点击下一步,系统会自动根据我们的选择,和数据源视图中表与表之间的关系生成维度。
如下图所示,我们可以通过双击名称进行维度名称的修改。下图左为修改前  右为修改后
DSC00016.jpg DSC00017.jpg
一直下一步,点击完成后,一个基本的cube创建完成,如图所示
DSC00018.jpg
第四步:目前这个cube仅仅是一个最为基础的cube,为了适应我们的需求,我们需要对维度和cube进行一些修改。
(1)双击打开运输方式维度(城市维度和运输方式的修改方法一样)
DSC00019.jpg
  
DSC00020.jpg
  
从这个图中我们可以看到,运输方式只有TRM_ID一个属性,但是这个属性用户是没法使用的,因为ID是我们系统内部的一个表示,对用户来讲没有任何意义,所以我们需要展现给用户的是运输方式名称TRMN字段。同时我们不需要将TRM_ID显示给用户,但是因为ID是主键我们不能删除,所以需要将ID属性设置为不可见。
a) 用鼠标将其拖到属性框中
b) 点击TRM_ID,在属性窗口中,将AttributeHierarchyVisible属性改为False
DSC00021.jpg
这样,将来部署之后,用户在前台只能看到运输方式名称,不能看到ID。
第五步:修改时间维度。
微软建议每一个cube都有一个时间属性的维度;时间维度存在层次结构,也就是实现“年-上下半年-季度-月份-日期”这种结构。
A)实现方法,将年字段yy、月字段mm、日期字段HGDATE加到属性窗口。将yy改名为Year,将Mm改为Month,将HGDATE改为Day,这样比较方便理解
B)先将Year属性拖入“层次结构”框中,然后将Month拖入Year下面,将Day拖入Month下面,实现层次结构。
第六步:现在cube建好了,我们点击菜单“生成”-“部署”,将cube部署起来。
DSC00022.jpg
第七步:打开sql server,连接分析服务器
DSC00023.jpg
DSC00024.jpg
  至此,完成。
  有关MDX语句的使用可以到msdn官网上面去查询
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81183-1-1.html 上篇帖子: SQL Server Assembly (SQL CLR) 还原数据库后的问题 下篇帖子: SQL Server 事务语法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表