微软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 ...
随机推荐
- Maven 构建
最近在工作中越来越经常的用到了Maven作为项目管理和Jar包管理和构建的工具,感觉Maven的确是很好用的.而且要将Maven的功能最大发挥出来,多模块是一个很好的集成例子. 一个Maven项目包括 ...
- 自定义兼容多种Protobuf协议的编解码器
<从零开始搭建游戏服务器>自定义兼容多种Protobuf协议的编解码器 直接在protobuf序列化数据的前面,加上一个自定义的协议头,协议头里包含序列数据的长度和对应的数据类型,在数据解 ...
- SharePoint 内容编辑器部件介绍
前言 在SharePoint的使用过程中,我们经常会往页面中插入一些东西,这时候很可能就需要内容编辑器部件了.比如:插HTML.插样式.插脚本.插图片,统统都拿来,用内容编辑器部件. 正文 使用内容编 ...
- centos7编译安装nginx及无缝升级https
安装依赖: yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel 下载nginx: wget -c ...
- JDK配置 linux
在启动终端并输入 gedit /etc/profile 在末尾添加一下配置,保存并退出 #set jdk environment export JAVA_HOME=/usr/lib/jvm/jdk1. ...
- 利用ASP.NET运行数据库的安装脚本
在启明星的演示站点里,经常有用户修改演示密码,导致别的用户无法访问. 为此,在登陆页面,增加了一个“初始化数据库”功能,这样,即使用户修改了密码,别的访问者,只要重置数据库,就可以很容易再次进入. 首 ...
- 【经验】STL的list vector在iterator迭代器的循环中 使用erase 造成的BUG
#include <iostream> #include <list> #include <vector> using namespace std; typedef ...
- hyper-v 用户无法再 创建外部配置存储 0x80070005
windows server 2008R2 刚安装的hyper-v 重启过. 修改配置文件到d:\Hyper-V目录下, hyper-V 创建 服务器遇到错误 操作失败 创建外部配置存储:一般性拒绝访 ...
- Guava之ImmutableMap使用示例
ImmutableMap 的作用就是:可以让java代码也能够创建一个对象常量映射,来保存一些常量映射的键值对. 分析以下情景,来具体讨论这个的好处. 假设现在有需求如下:根据数据库存的某个key字段 ...
- CSS-文本垂直居中
文本水平居中可以将text-align设置为center即可,垂直居中的话如果是单纯的设置vertical-align是没办法单独设置成功的,垂直居中的文字分为单行文本和多行文本,主要是两种不同的实现 ...