微软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 ...
随机推荐
- How to update jQuery Mobile in Dreamweaver CS6
来源:http://wpguru.co.uk/2013/01/how-to-update-jquery-mobile-in-dreamweaver-cs6/ Since the release of ...
- git 两个中心仓库上的分支 merge
首先在一个中心仓库里面添加另外一个仓库的所有分支. 命令: git remote add Cangku2 https://github.com/abc/abc.git git fetch 这之后在使用 ...
- anaconda、pip配置国内镜像
一.anaconda配置镜像查看源:conda config --show-sources在Mac and Linux下:conda config --add channels https://mir ...
- 可重入读写锁ReentrantReadWriteLock基本原理分析
前言 本篇适用于了解ReentrantLock或ReentrantReadWriteLock的使用,但想要进一步了解原理的读者.见于之前的分析都是借鉴大量的JDK源码,这次以流程图的形式代替源码,希望 ...
- [转]微信JSAPI 微信内置JSAPI 2015年1月官方正式API接口,分享完整实例
FROM : http://www.oschina.net/code/snippet_2276613_45290 HTML通过微信,分享朋友圈出发此JSAPI <?php require_onc ...
- 访问Oracle数据库的工具【unfinished】
ylbtech-Oracle:访问Oracle数据库的工具 访问Oracle数据库的工具 1. SQL*PLUS返回顶部 1.0, 1.0.1, 之network\admin\tnsnames.ora ...
- RV32FD指令集
Risc-V架构定义了可选的单精度浮点指令(F扩展指令集)和双精度浮点指令(D扩展指令集). Risc-V架构规定:处理器可以选择只实现F扩展指令子集而不支持D扩展指令子集:但是如果支持了D扩展指令子 ...
- eclipse.ini 内存设置
Ubuntu 系统下,Eclipse 配置文件: vi ~/eclipse/eclipse.ini -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:Max ...
- easyui datagrid列使用按钮的一些心得 .
以前,用easyui的datagrid,有时候会用到一些操作选项,比如代码如下: $('#datagrid').datagrid({ border:false, fitColumns:true, si ...
- Convert Sorted List to Binary Search Tree leetcode java
题目: Given a singly linked list where elements are sorted in ascending order, convert it to a height ...