父子维度通俗的话来讲,这个表是自反的,即外键本身就是引用的主键;类似这样的关系,如公司组织结构,分公司是总公司的一部分,部门是分公司的一部分,当然如果定义得好的话员工是部门的一部分;通常公司的组织架构并非处在等层次上的,例如总公司下面的部门看起来就和分公司是一样的层次。因此父子维的层次通常不固定的。 
5、 父子维概述 
5.1概述 
父子维度基于两个维度表列,这两列一起定义了维度成员中的沿袭关系。一列称为成员键列,标识每个成员;另一列称为父键列,标识每个成员的父代。该信息用于创建父子链接,该链接将在创建后组合到代表单个元数据级别的单个成员层次结构中。 (微软 SQLServer2000联机帮助概念 )
通俗的话来讲,这个表是自反的,即外键本身就是引用的主键;类似这样的关系,如公司组织结构,分公司是总公司的一部分,部门是分公司的一部分,当然如果定义得好的话员工是部门的一部分;通常公司的组织架构并非处在等层次上的,例如总公司下面的部门看起来就和分公司是一样的层次。因此父子维的层次通常不固定的。
5.2实现 
因为父子维的复杂的自引用关系,如果按照缓慢维度的全历史记录方式来处理,必然导致逻辑关系混乱,处理起来比较棘手;任何一个组织的变动 (修改名称,更改引用,新增等等操作 )将会引起其下属节点相应的变动;任何一个意外都会导致整个结构的变化,同时发生意外后所带来的逻辑关系很难理顺。而 SQLServer2000中 Analysis Service对于这种急剧的变化处理并不稳定。
因此建议按照缓慢变化维的覆盖方式解决,即只根据主键这个唯一标志进行判断是否是新增还是修改。
代码
-- 父子维度表
CREATE TABLE t_dem_xxx
(
ID VARCHAR(20) NOT NULL,
SuperID VARCHAR(20) NOT NULL,
Name VARCHAR(50)
CONSTRAINT PK_t_dem_xxx PRIMARY KEY (SurID)
)
go
CREATE TABLE t_tmp_xxx
(
ID VARCHAR(20) NOT NULL,
SuperID VARCHAR(20) NOT NULL,
Name VARCHAR(50)
CONSTRAINT PK_t_tmp_xxx PRIMARY KEY (ID)
)
Go
CREATE PROCEDURE p_dem_xxx
AS
-- 维度抽取存储过程
BEGIN
DECLARE
@num NUMERIC(10,0)
SELECT @num = COUNT(*) FROM t_dem_xxx
-- 如果原表为空,构造缺省值
IF @num = 0
BEGIN
INSERT INTO t_dem_xxx (ID,SuperID,Name) SELECT '-2','0','NULL 值 '
INSERT INTO t_dem_xxx (ID,SuperID,Name) SELECT '-1','0',' 缺失外键 '
END
-- 根据主键插入在维度表中找不到的基础数据
INSERT INTO t_dem_xxx
(
ID ,
SuperID ,
Name
)
SELECT a.ID,a.SuperID,a.Name
FROM t_tmp_xxx a LEFT OUTER JOIN t_dem_xxx b
ON a.ID = b.ID
WHERE b.ID IS NULL
-- 根据主键更新原基础表中变化的各属性字段
UPDATE t_dem_xxx
SET SuperID = a.SuperID,
Name = a.Name
FROM t_tmp_xxx A,t_dem_xxx B
WHERE a.ID = b.ID
AND b.ID NOT IN ('-1','-2')
END
 
本文转自baoqiangwang51CTO博客,原文链接:http://blog.51cto.com/baoqiangwang/310320,如需转载请自行联系原作者

8 关于数据仓库维度数据处理的方法探究系列——父子维相关推荐

  1. 5 关于数据仓库维度数据处理的方法探究系列——缓慢变化维处理——全历史记录...

    全历史记录是缓慢变化维中最为强大的一种加载方式.它将可以完全实现覆盖方式能实现的加载方式,且可以实现对数据的历史记录,可以记录下每一个数据的细微变化. 3.3.2 全历史记录( Type 2 Dime ...

  2. 1 关于数据仓库维度数据处理的方法探究系列——维的概述

    在数据仓库中,维度是数据仓库概念的一个重要基础,因此维度的抽取和处理是一个重要的环节,对于不同的维度根据业务需求以及客观原因有许多不同的处理方式,以下将以SQLServer2000语法为例展开. 1 ...

  3. 6 关于数据仓库维度数据处理的方法探究系列——缓慢变化维处理——记录最新记录及上一次历史...

    此种方式是缓慢变化维中较为折中的做法,但需要表结构随之适应.它的原理是把目标表字段扩充一倍,其中一组用来记录最新的记录信息,另一组用来记录上一次的历史记录.新记录插入时,将其插入到最新记录的位置,一旦 ...

  4. 3 关于数据仓库维度数据处理的方法探究系列——缓慢变化维概述和原理

    缓慢变化维 Slowly Changing Dimensions( A typical slowly changing dimension is a product dimension in whic ...

  5. 2 关于数据仓库维度数据处理的方法探究系列——无变化维度处理

    无变化维度一般都是比较简单的维度,都是经过一次性处理后就不再变化的数据:通常这些维度都是一些常识数据 (如性别,重要程度 )和分段数据 (为了减少单层维度的数量,按照一定业务标准进行的人为分组 ). ...

  6. 一文带你认清数据仓库“维度模型设计”与“分层架构” | 原力计划

    作者 | Alice菌 责编 | 王晓曼 出品 | CSDN博客 数据仓库纬度模型设计 1. 纬度建模基本概念 维度模型是数据仓库领域大师Ralph Kimall所倡导,他的<数据仓库工具箱&g ...

  7. 数据仓库架构和建设方法

    1.数据仓库概要 1.1.数据仓库起因 在建设数据仓库之前,数据散落在企业各部门应用的数据存储中,它们之间有着复杂的业务连接关系,从整体上看就如一张巨大的蜘蛛网:结构上错综复杂,却又四通八达.在企业级 ...

  8. 通透!数据仓库领域常见建模方法及实例演示

    1一.为什么需要数据建模? 在开始今天的话题之前,我们不妨思考下,到底为什么需要进行数据建模? 随着从IT时代到DT时代的跨越,数据开始出现爆发式的增长,这当中产生的价值也是不言而喻.如何将这些数据进 ...

  9. [转]敏感信息识别方法探究

    原文链接:敏感信息识别方法探究_weixin_33950035的博客-CSDN博客 互联网已经成为人们日常获取信息与沟通交流的重要方式,伴随用户规模的不断攀升每日的传播数据呈现爆发式增加.在这些海量数 ...

最新文章

  1. python argparse模块_Python argparse模块应用实例解析
  2. 数据在HDFS和HBASE之间互相传递的过程
  3. if else if else语句格式_如何“干掉”if...else
  4. [论文阅读] (03) 清华张超老师 - GreyOne: Discover Vulnerabilities with Data Flow Sensitive Fuzzing
  5. 在Spring Boot中使用内存数据库
  6. 投资学习网课笔记(part4)--基金第四课
  7. Git的smart Checkout\force checkout\Don‘t Checkout的区别
  8. 如何在Windows 10中将您喜欢的设置固定到开始菜单
  9. jzoj100047-基因变异【位运算,bfs】
  10. 设计模式(1):工厂模式
  11. 在网页上获取当前日期,数字时钟
  12. transformer机制讲解_Transformer在视觉领域的应用
  13. 莱布尼茨公式C语言编程,高等数学——手撕牛顿莱布尼茨公式
  14. 高通modem log分析基础
  15. 【leetcode】1419. Minimum Number of Frogs Croaking
  16. 纽约大学石溪分校计算机科学,纽约州立大学石溪分校的主要基本信息介绍
  17. 现代软件工程 怎么教好课 (读书笔记)
  18. Python socket文件上传下载
  19. 辽宁启迪:拼多多直通车对搜索流量有什么影响?
  20. 如何三平台win/安卓/ios同步日历日程

热门文章

  1. Spark Streaming中的操作函数分析
  2. opencv std::vectorcv:Mat
  3. 程序员50题(JS版本)(九)
  4. bzoj 2724[Violet 6]蒲公英
  5. 机器学习基石(6)--Theory of Generalization
  6. Object:window_方法
  7. uva11728alternate task所有因子
  8. CSU1632Repeated Substrings(后缀数组/最长公共前缀)
  9. #100天计划# 2013年10月1日
  10. JQuery EasyUI datagrid 复杂表头处理