微软BI 之SSAS 系列 - 关于父子维度的设计
除了之前的几篇文章中出现的时间维度,雪花型维度的设计之外还有一种比较特殊的维度 - 父子维度。父子维度特殊就特殊在它包含了一种基于递归关系(Recursive Relationship)的引用结构, 在我的这篇文章中提到了如何基于父子层次结构来设计和制作 SSRS 报表,不过那个报表是基于数据仓库的。而现在我们要设计的是基于父子结构的维度,在此基础之上我们也可以设计出基于 SSAS 数据库的 SSRS 报表。
下面仍然是我们的测试表和数据,测试表包含了一个员工维度表和销售的事实表。
USE BIWORK_SSIS
GO IF OBJECT_ID('FactResellerSales','U') IS NOT NULL
DROP TABLE FactResellerSales
GO IF OBJECT_ID('DimEmployee','U') IS NOT NULL
DROP TABLE DimEmployee
GO SELECT EmployeeKey,
ParentEmployeeKey,
EmployeeNationalIDAlternateKey,
CASE WHEN ISNULL(MiddleName,'') = '' THEN FirstName +' '+ LastName
ELSE FirstName +' '+ MiddleName +' '+LastName
END AS FullName,
Title
INTO DimEmployee
FROM AdventureWorksDW2012.dbo.DimEmployee SELECT ProductKey,
OrderDateKey,
EmployeeKey,
SalesOrderLineNumber,
SalesOrderNumber,
UnitPrice,
ProductStandardCost,
SalesAmount
INTO FactResellerSales
FROM AdventureWorksDW2012.dbo.FactResellerSales
GO ALTER TABLE DimEmployee
ADD CONSTRAINT PK_EmployeeKey PRIMARY KEY CLUSTERED (EmployeeKey)
GO ALTER TABLE DimEmployee
ADD CONSTRAINT FK_ParentEmployeeKey FOREIGN KEY(ParentEmployeeKey) REFERENCES DimEmployee(EmployeeKey)
GO ALTER TABLE FactResellerSales
ADD CONSTRAINT PK_Reseller_OrderLineNumber_OrderNumber PRIMARY KEY CLUSTERED (SalesOrderLineNumber,SalesOrderNumber)
GO ALTER TABLE FactResellerSales
ADD CONSTRAINT FK_EmployeeKey FOREIGN KEY(EmployeeKey) REFERENCES DimEmployee(EmployeeKey)
GO SELECT * FROM DimEmployee
SELECT * FROM FactResellerSales
员工表中的 ParentEmployeeKey 指向了自身的主键 EmployeeKey,而 FactResellerSales 中的主键是由 SalesOrderLineNumber 和 SalesOrderNumber 构成的一个复合主键,并且 EmployeeKey 指向了 DimEmployee 的 EmployeeKey。

创建一个 SSAS 项目并创建数据源和数据源视图。

新建一个维度,并选择 EmployeeKey 作为 Key Column, FullName 作为 Name Column 来展现标签信息。

选择属性,因为 FullName 已经作为 Employee Key 的 Name Column,因此不会在这里显示了。

修改一下属性的名字。

下一步并给维度取一个名字 Employee 保存之后就能看到这个维度了,并且可以看到 Employees 属性有一个自引用的结构特征。

查看 Employee 属性, Usage 是 Key。 在这里一定要注意,父子关系层次结构中的子级必须是维度的关键属性,所以 Employee 这里的 Usage 必须是 Key 。

而 Employees 其实就是对应的 ParentEmployeeKey,它的 Usage 必须是 Parent 才能表示这样的一个父子维度。

并且要注意的是每一个维度有且只能有一个属性的 Usage 属性能够被设置为 Key。这里别混淆了维度属性和数据库字段(属性),作为维度属性中的 Key 有可能是由数据库中的一个或者多个字段构成的复合主键组成的,这个 Key 在维度属性中只能有一个。
如果是父子维度,那么有且仅有一个属性的 Usage 属性的值被设置为 Parent,所有其它的属性的 Usage 属性的值均为 Regular。
部署并浏览属性层次结构 ,注意到 Employee 属性层次结构并没有显示出来。

这是因为在创建父子维度的过程中,它的 AttributeHierarchyVisible 默认被设置成了 False。

除此之外,我们还可以修改 Employees 的 MemberWithDataCaption 属性来标记数据成员,以及 Naming Template 来表示不同的级别的属性。IsAggregatable 属性也修改为 False, 这样就不会出现 ALL 这一个级别的成员了。

因为没有了 ALL 这个级别的成员,因此可以选择一个成员作为默认成员。

再次部署之后就能看到不同的级别上人员信息就有了级别信息了,在这个例子中由于源数据包含了部分历史维度信息,所以能看到两个相同的 David M Bradley 和 Laura F Norman,关于这些历史数据就不在我们的讨论范围之内了。

PS:补充一下相关天善论坛里的一个问题 - SSAS 在层次结构里面,如何不看自己
相关设置如下:

设置前 -

设置后 -

更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。
微软BI 之SSAS 系列 - 关于父子维度的设计的更多相关文章
- 微软BI 之SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension
在 CUBE 设计过程中有一个非常重要的点就是定义维度与度量值组关系,维度的创建一般在前,而度量值组一般来源于一个事实表.当维度和度量值组在 CUBE 中定义完成之后,下一个最重要的动作就是定义两者之 ...
- 微软BI 之SSAS 系列 - 实现Cube 以及角色扮演维度,度量值格式化和计算成员的创建
在熟悉完下面这三种维度的创建方式之后,就可以开始创建我们的第一个 Cube 了. SSAS 系列 - 自定义的日期维度设计 SSAS 系列 - 基于雪花模型的维度设计 SSAS系列 - 关于父子维度的 ...
- 微软BI 之SSAS 系列 - 自定义的日期维度设计
SSAS Date 维度基本上在所有的 Cube 设计过程中都存在,很难见到没有时间维度的 OLAP 数据库.但是根据不同的项目需求, Date 维度的设计可能不大相同,所以在设计时间维度的时候需要搞 ...
- 微软BI 之SSAS 系列 - 多维数据集维度用法之三 多对多维度 Many to Many
开篇介绍 对于维度成员和事实数据直接的关系看到更多的可能还是一对一,一对多的关系.比方在事实维度(或退化维度)中一个订单和明细号组合而成的ID,对应的就是事实表中的一条数据,这就是一对一的关系.比方说 ...
- 微软BI 之SSAS 系列 - 多维数据集维度用法之二 事实维度(退化维度 Degenerate Dimension)
这篇文章是基于上一篇 SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension 继续讲解多维数据集维度用法中的事实维度. 事实维度,顾名思义就是把事实表 Fact ...
- 微软BI 之SSAS 系列 - 在SQL Server 2012 中开发 Analysis Services Multidimensional Project
SQL Server 2012 中提供了开发 SSAS 项目的两种模型,一种是新增加的 Tabular Model 表格模型,另一种就是原始的 Multidimensional Model 多维模型. ...
- 微软BI 之SSAS 系列 - 多维数据集中度量值设计时的聚合函数 (累加性_半累加性和非累加性)
在 SSAS 系列 - 实现第一个 Cube 以及角色扮演维度,度量值格式化和计算成员的创建 中主要是通过已存在的维度和事实数据创建了一个多维数据集,并同时解释了 Role-Playing Dimen ...
- 微软BI 之SSAS 系列 - 维度的优化,灌木丛属性关系,以及自然层次结构与非自然层次结构的概念
维度的优化 在 SSAS 开发设计过程中,维度的优化非常重要,因为它在 SSAS 分析服务性能调优的过程中往往能起到一个非常重要的作用. 一般来说,对于 Cube 的性能优化第一步可能考虑的就是查看维 ...
- 微软BI 之SSAS 系列 - 基于雪花模型的维度设计
基于雪花模型的维度以下面的 Product 产品与产品子类别,产品类别为例. DimProduct 表和 DimProductSubcategory 表有外键关系,而 DimProductSubcat ...
随机推荐
- C# 连接Oracle数据库,免安装oracle客户端
一.方案1 首先下面的内容,有待我的进一步测试和证实.18.12.20 被证实了,还需要安装Oracle客户端,或者本机上安装oracle数据库软件. 18.12.20 1.下载Oracle.Mana ...
- Arcgis for JavascriptAPI 常用接口
转自原文arcgis for javascriptAPI常用接口 var map, navToolbar, editToolbar, tileLayer, toolbar; //var mapBase ...
- hbase经常使用的shell命令样例
1.hbase shell 进入hbase [hadoop@mdw ~]$ hbase shell HBase Shell; enter 'help<RETURN>' for lis ...
- Universal-Image-Loader解析(二)——DisplayImageOptions的详细配置与简单的图片加载
在使用这个框架的时候,我们必须要配置一个DisplayImageOptions对象来作为ImageLoader.getInstance().displayImage()中的参数,所以很有必要讲解这个对 ...
- Memcache的安装与配置
因为单位要求修复Memcached的DDOS漏洞,整理了本文.之前的文章防止Memcached的DDOS攻击另外一个思路 提到了解决方案,我们使用的版本较低,因此需要对 Memcached 进行升级, ...
- Asp.Net Core MVC控制器和视图之间传值
一.Core MVC中控制器和视图之间传值方式和Asp.Net中非常类似 1.弱类型数据:ViewData,ViewBag 2.强类型数据:@model 二.代码 实例 1.ViewData pub ...
- 使用强大的 Mockito 测试框架来测试你的代码
原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine ...
- 深入探索 JUnit 4
开始之前 关于本教程 引入 Java 5 注释为 JUnit 带来了显著改变,使它从一个受广大开发人员了解和喜爱的测试框架转变成了一个更为精简但却不那么为人熟知的框架.在本教程中,我将探讨 JUnit ...
- Identifier:GUID (全局唯一标识符)
ylbtech-Miscellaneos-Identifier:GUID (全局唯一标识符) A,返回顶部 1, 全局唯一标识符(GUID,Globally Unique Identifier)是一种 ...
- dcm4chee 修改默认(0002,0013) ImplementationVersionName
dcm4chee-2.17.3-psql\server\default\lib\dcm4che.jar ----org\dcm4che\Implementation.properties dcm4ch ...