微软BI 之SSAS 系列 - 基于雪花模型的维度设计
基于雪花模型的维度以下面的 Product 产品与产品子类别,产品类别为例。 DimProduct 表和 DimProductSubcategory 表有外键关系,而 DimProductSubcategory 表和 DimProductCategory 表存在外键关系。
测试的维度表与数据 -
USE BIWORK_SSIS
GO IF OBJECT_ID('DimProduct') IS NOT NULL
DROP TABLE DimProduct
GO IF OBJECT_ID('DimProductSubcategory') IS NOT NULL
DROP TABLE DimProductSubcategory
GO IF OBJECT_ID('DimProductCategory') IS NOT NULL
DROP TABLE DimProductCategory
GO SELECT ProductKey,
ProductAlternateKey,
ProductSubcategoryKey,
EnglishProductName,
StandardCost,
Color,
SafetyStockLevel,
ListPrice,
Class,
Size,
StartDate,
EndDate,
[Status],
ProductAlternateKey + ' (' + CONVERT (Char(10), StartDate, 120) + ')' AS ProductID
INTO DimProduct
FROM AdventureWorksDW2012.dbo.DimProduct SELECT ProductSubcategoryKey,
ProductSubcategoryAlternateKey,
EnglishProductSubcategoryName,
ProductCategoryKey
INTO DimProductSubcategory
FROM AdventureWorksDW2012.dbo.DimProductSubcategory SELECT ProductCategoryKey,
ProductCategoryAlternateKey,
EnglishProductCategoryName
INTO DimProductCategory
FROM AdventureWorksDW2012.dbo.DimProductCategory ALTER TABLE DimProductCategory
ADD CONSTRAINT PK_CategoryKey PRIMARY KEY CLUSTERED(ProductCategoryKey)
GO ALTER TABLE DimProductSubcategory
ADD CONSTRAINT PK_SubCategoryKey PRIMARY KEY CLUSTERED(ProductSubcategoryKey)
GO ALTER TABLE DimProduct
ADD CONSTRAINT PK_Product PRIMARY KEY CLUSTERED(ProductKey)
GO ALTER TABLE DimProduct
ADD CONSTRAINT FK_SubcategoryKey FOREIGN KEY(ProductSubcategoryKey) REFERENCES DimProductSubcategory(ProductSubcategoryKey) ALTER TABLE DimProductSubcategory
ADD CONSTRAINT FK_CategoryKey FOREIGN KEY(ProductCategoryKey) REFERENCES DimProductCategory(ProductCategoryKey) SELECT * FROM DimProduct
SELECT * FROM DimProductSubcategory
SELECT * FROM DimProductCategory
新建一个 SSAS 项目并创建数据源和数据源视图 -
新建一个 Dimension 指定使用 DimProduct 表,Key Column 为 ProductKey 列,Name Column 为 Product ID 列。每个属性都有两种特性:Key Column 来引用唯一确定属性成员的一列 (如果是复合主键的话可能是多列),Name Column 来引用包含描述性标签的列,它是显示在报表上被浏览的文本。
由于 DimProduct 表是雪花型产品维度的一部分,因此相关联的表业也会被包括进来,向导默认为每个表的主键创建属性。
选择需要出现在维度中的维度属性,用户根据这些属性来查看相应的事实数据。
重命名属性,让这些属性名称看起来更符合人们的习惯。
下一步并指定维度名称为 Product ,就可以看到维度设计中维度以及它下面的属性,可以部署一下这个项目。
部署之后可以在 Browser 浏览器中查看属性层次结构,在维度中的每一个属性都是一个属性层次结构,它通常包含两个级别:一个是 ALL 级别,第二个是由 Category 属性值构成的级别。 但是在这里看到的 Category ALL 级别下的成员都是数值,并不能明确表示它自身的含义。这是因为我们之前在创建这个属性的时候,只默认指定了 Category 的 Key Column 而没有指定 Category 的 Name Column,因此需要修改这些属性的 Name Column。
修改属性 Category 的 Name Column ,同样的还需要修改 Subcategory 。
修改完成之后重新部署一下,就可以看到对应的属性标签内容了。
接下来我们需要创建一些层次结构来方便用户从指定的角度来查看事实数据。维度中的层次结构一般分为:属性层次结构,用户自定义层次结构中的非自然层次结构和自定义层次结构中通过创建属性关系所识别的自然层次结构。
属性层次结构我们前面我们已经看到过了,即每一个属性都是一个属性层次结构。属性层次结构一般含有两层,第一层是 ALL 级别,第二层是自身数据形成的成员级别。
自定义层次结构的自然层次结构中,每一个子成员都只有一个父成员,并且级别可能多于两级。 我们可以通过创建属性关系来建立自然层次结构,创建属性关系可以加快数据库的处理速度。 由于提供了更快的数据访问并改善了查询执行计划,从而也提升了查询性能。
自定义的层次结构也包含自然层次结构,但是也可以不是自然层次结构,也就是说子类可能存在多个父类。
对于产品,产品子类,产品大类这几个属性来说,是符合自然层次结构的要求的。一个产品只属于一个产品子类,一个产品子类也只属于一个产品大类。
对于颜色和大小,一个颜色可以对应多个不同大小的尺码,不同大小的尺码也可以对应多个颜色。那么为颜色和大小创建自定义的层次结构,就是属于自定义层次结构中的非自然层次结构了。
创建 Category - Subcategory - Product 这样的层次结构,并创建 Color - Size 这样的层次结构。
在属性关系中查看各个属性是如何关联的,下图所示可以看到基本上所有的属性都是通过关键属性 Product ID 相关联的, Category 和 Product ID 是通过 Subcategory 间接关联的。 那么在分析服务中,这种关联关系表示了分析服务可以通过聚合所有与某个 Category 相关的 Subcategory 的值来得到该 Category 的值。但是分析服务不能从 Product 中得到 Subcategory 的值,因为 Product 和 Subcategory 没有关系。
我们通过修改 Product 和 Subcategory 的属性关系实现了一种自定义的自然层次结构。但是像 Color 和 Size 这种本身在层次逻辑上就并不存在这种自然层次结构的特征,因此就不需要做出任何改变了。
部署并查看层次结构 - Product By Category -
Color by Size -
更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。
微软BI 之SSAS 系列 - 基于雪花模型的维度设计的更多相关文章
- 《BI项目笔记》基于雪花模型的维度设计
GBGradeCode 外键关系: 1 烟叶等级 T_GBGradeCode.I_DistinctionID=T_Distinction.I_DistinctionID 烟叶等级分为:上等烟.中等烟. ...
- 微软BI 之SSAS 系列 - 多维数据集中度量值设计时的聚合函数 (累加性_半累加性和非累加性)
在 SSAS 系列 - 实现第一个 Cube 以及角色扮演维度,度量值格式化和计算成员的创建 中主要是通过已存在的维度和事实数据创建了一个多维数据集,并同时解释了 Role-Playing Dimen ...
- 微软BI 之SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension
在 CUBE 设计过程中有一个非常重要的点就是定义维度与度量值组关系,维度的创建一般在前,而度量值组一般来源于一个事实表.当维度和度量值组在 CUBE 中定义完成之后,下一个最重要的动作就是定义两者之 ...
- 微软BI 之SSAS 系列 - 实现Cube 以及角色扮演维度,度量值格式化和计算成员的创建
在熟悉完下面这三种维度的创建方式之后,就可以开始创建我们的第一个 Cube 了. SSAS 系列 - 自定义的日期维度设计 SSAS 系列 - 基于雪花模型的维度设计 SSAS系列 - 关于父子维度的 ...
- 微软BI 之SSAS 系列 - 在SQL Server 2012 中开发 Analysis Services Multidimensional Project
SQL Server 2012 中提供了开发 SSAS 项目的两种模型,一种是新增加的 Tabular Model 表格模型,另一种就是原始的 Multidimensional Model 多维模型. ...
- 微软BI 之SSAS 系列 - 多维数据集维度用法之三 多对多维度 Many to Many
开篇介绍 对于维度成员和事实数据直接的关系看到更多的可能还是一对一,一对多的关系.比方在事实维度(或退化维度)中一个订单和明细号组合而成的ID,对应的就是事实表中的一条数据,这就是一对一的关系.比方说 ...
- 微软BI 之SSAS 系列 - 多维数据集维度用法之二 事实维度(退化维度 Degenerate Dimension)
这篇文章是基于上一篇 SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension 继续讲解多维数据集维度用法中的事实维度. 事实维度,顾名思义就是把事实表 Fact ...
- 微软BI 之SSAS 系列 - 关于父子维度的设计
除了之前的几篇文章中出现的时间维度,雪花型维度的设计之外还有一种比较特殊的维度 - 父子维度.父子维度特殊就特殊在它包含了一种基于递归关系(Recursive Relationship)的引用结构, ...
- 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍
在SSDT中部署一个 SSAS 项目到本地服务器上出现错误. You cannot deploy the model because the localhost deployment server i ...
随机推荐
- 理解 block
开始:Block 简介 Block 是 iOS 4.0 和 Mac OSX 10.6 引入的一个新特性. Block 可以极大的简化代码. 他们可以帮助你减少代码, 减少对代理的依赖, 并且写出更加简 ...
- Java File.separator
在Windows下的路径分隔符和Linux下的路径分隔符是不一样的,当直接使用绝对路径时,跨平台会暴出“No such file or diretory”的异常. 比如说要在temp目录下建立一个te ...
- 批量生成protoBuf到cs文件
color 0A && echo off rem protoc程序名set "PROTOC_EXE=protoc.exe"rem .proto文件名::set &q ...
- 使用PHP+Sphinx建立高效的站内搜索引擎
1. 为什么要使用Sphinx 假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用Sphinx了(当然其他的全文检索程序或方 ...
- git 拉取远程指定分支 pull本地不存在的分支
默认,git项目只有一个分支,就是master,我们当然可以在本地创建多个分支,并推送到远程git管理平台上,或者将远程git管理平台上的其他分支拉取到自己电脑上. 一.查看本地已有的分支 进入到项目 ...
- centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息
1.系统 1.1版本 uname -a 能确认是64位还是32位,其它的信息不多 [root@localhost ~]# uname -a Linux localhost.localdomain 3. ...
- 实习医生格蕾第一季/全集Grey’s Anatomy迅雷下载
第一季 Grey's Anatomy Season 1 (2005)看点:欢迎来到格雷斯医院,哈佛医学院西区最艰苦的外科住院医实习程序,医务新人最残酷的训练场.Meredith.Izzie和Chris ...
- tomcat配置jdbc
server.xml下<GlobalNamingResources> <Resource name="jdbc/Huobanplus" ...
- 怎样把vector和string数据传给旧的C API
通常情况下.旧的C API使用数组合char*指针来进行数据交换而不是vector或string对象. 这种API还将存在非常长的一段时间,假设我们想有效地使用STL.我们就必须与它们和平共处. ...
- Spring框架中IoC(控制反转)的原理(转)
原文链接:Spring框架中IoC(控制反转)的原理 一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作, ...