【数据仓库与联机分析处理】多维数据模型

目录

一、数据立方体

二、数据模型

(一)星形模型

(二)雪花模式

(三)事实星座模式

三、多维数据模型中的OLAP操作

(一)下钻

(二)上卷

(三)切片

(四)切块

(五)转轴


数据仓库和OLAP工具是基于多维数据模型的,该模型以数据立方体(Cube)的形式来观察和分析数据。

一、数据立方体

        区别于关系数据模型中的二维表,数据立方体是一个多维的数据模型,类似于一个超立方体。它允许从多个维度来对数据建模,并提供多维的视角以观察数据。
        数据立方体由事实定义。一般来说,维是透视图或是一个组织想要记录的实体。在通常情况下,多维数据模型会围绕某个主题来构建,该中心主题被称为事实,事实是用数值来度量的。

一个分店的销售数据表,如表所示,分店的销售按照时间维(按季度组织)和商品维(按所售商品的类型组织)表示:

一个分店的销售数据表

XX武汉分店

时间(季度)

商品(类型)(单位:台)

笔记本

台式机

Q1

408

887

Q2

496

945

Q3

522

768

Q4

6000 

1023

下面从三维角度观察销售数据,如表所示,添加一个分店地址维,从时间、商品类型和分店地址来观察数据。

四个分店的销售数据表

时间(季度)

XX武汉分店

XX宜昌分店

XX北京分店

XX郑州分店

商品(类型)(单位:台)

笔记本

台式机

笔记本

台式机

笔记本

台式机

笔记本

台式机

Q1

408

887

609

1089

812

1280

321

654

Q2

496

945

688

1671

1092

843

431

892

Q3

522

768

789

1230

533

657

450

900

Q4

600

1023

806

1800

1288

438

560

732

        概念上讲,这些数据也能够以三维数据立方体的形式来表示。如果需要四维的数据,可以在上表的基础上再多添加一个供应商维度。虽然不能直观地去想象,但是可以把四维的数据看作是三维数据的序列。例如,供应商1对应一个三维数据立方体,供应商2对应个三维数据立方体……以此类推,就可以把任意n维数据立方体看作是n-1维数据立方体的序列。
        需要注意的是,数据立方体只是对多维数据存储的一种抽象,数据的实际物理存储方式并不等同于它的逻辑表示。

二、数据模型

        在数据库设计中,通常使用的是实体—联系数据模型,数据的组织由实体的集合和他们之间的联系组成,这种数据模型适用于联机事务处理。然而,对于数据仓库的联机数据分析,则需要使用简明、面向主题的数据模型。目前最流行的数据仓库数据模型是多维数据模型。这种模型常用的模式有三种,分别是星形模式、雪花模式、事实星座模式。
        对于这三种模式的定义,将用到一种基于SQL的数据挖掘查询语言(Data Mining Query Language , DMQL)。DMQL包括定义数据仓库的语言原语。数据仓库可以使用两种原语进行定义,一种是立方体定义,一种是维定义
立方体定义语句具有如下语法形式: 
define cube <cube_name>[<dimension list>]:<meature_list>
维定义语句具有如下语法形式: 
define dimension <dimension_name> as  (<attribute_or_subdimension_list>)

(一)星形模型

        星形模式是最常见的模型范例,其包括:
(1)一个大的、包含大批数据、不含冗余的中心表(事实表);
(2)一组小的附属维表。

        这种模式图很像是星星,如图所示,维表围绕中心表显示在中心表的射线上。在这个图中,一个销售事实表Sales共有四个维,分别为 time维、branch维、item维和 location维。该模式包含一个中心事实表Sales,它包含四个维的关键字和三个度量 units_sold、dollars_sold 和 avg_sales。

        在星形模式中,每个维只用一个维表来表示,每个表各包含一组属性。例如,item 维表包含属性集 {item_key,item_name,brand,type,supplier_type},这一限制可能会造成某些冗余。例如,某些商品属于同一个商标,或者来自于同一个供应商。

图中的星形模式使用DMQL定义如下:
define cube sales_star [time,item,branch,location]: 
dollars_sold = sum(sales_in_dollars), units_sold = count(*), avg_sales = avg(sales_in_dollars)
define dimension time as (time_key, day, day_of_the_week, month, quarter, year)
define dimension item as (item_key, item_name, brand, type, supplier_type)
define dimension branch as (branch_key, branch_name, branch_type) 
define dimension location as (location_key, street, city, state_or_province, country) 

        define cube定义了一个数据立方体——sales _star,它对应于图中的中心表 Sales 事实表。该命令说明维表的关键字和三个度量:units_sold、dollars_sold 和 avg_sales。数据立方体有四个维,分别为 time、item、branch 和 location,其中每一个 define dimension 语句分别定义一个维。

(二)雪花模式

        雪花模式是对星形模式的扩展,如图所示。在雪花模式中,某些维表被规范化,进一步分解到附加表(维表)中。从而使得模式图形变成类似于雪花的形状。从图中可以看到,location 表被进一步细分出 city 维,item 表被进一步细分出 supplier 维。

图中的雪花模式可以使用DMQL定义如下: 
define cube sales_snowflake [time,item,branch,location]: 
dollars_sold = sum(sales_in_dollars), units_sold = count (*), avg_sales = avg (sales_in_dollars)
define dimension time as (time_key, day, day _of _the week, month, quarter, year) 
define dimension item as (item_key, item_name, brand, type, supplier(supplier_key, supplier_type)) 
define dimension branch as (branch_key, branch _name, branch_type) 
define dimension location as(lacation _key, street, city(city_key, state_or_province, country)) 

        该定义类似于星形模式中的定义,不同的是雪花模式对维表 item 和 location 的定义更加规范。在 sales_snowflake 数据立方体中,sales_star 数据立方体的 item 维被规范化成两个维表: item 和 supplier。注意 supplier 维的定义在 item 的定义中被说明,用这种方式定义 supplier,隐式的在 item 的定义中创建了一个 supplier_key。类似的,在 sales_snowflake 数据立方体中,sales_star 数据立方体的 location 维被规范化成两个维表 location 和 city,city 的维定义在 location 的定义中被说明,city_key 在 location 的定义中隐式地创建。

(三)事实星座模式

        在复杂的应用场景下,一个数据仓库可能会由多个主题构成,因此会包含多个事实表,而同一个维表可以被多个事实表所共享,这种模式可以看作是星形模式的汇集,因而被称为事实星座模式
        如图所示,图中包含两张事实表,分别是 Sales 表和 Shipping 表,Sales 表的定义与星形模式中的相同。Shipping 表有五个维或关键字:time_key,item_key,shipper_key,from_location,to_ location。两个度量:dollars_cost 和 units_shipped。在事实星座模式中,事实表是能够共享维表的,例如,Sales 表和 Shiping 表共享 time、 item 和 location 三个维表。

图中的事实星座模式可以使用DMQL定义如下:
define cube sales [time,item, branch,location]: 
dollars_sold = sum(sales in dollars), units_sold = count (*), avg_sales = avg(sales_in_dollars) 
define dimension time as (time_key, day, day_of _the_Week, month, quarter, year) 
define dimension item as (item_key, item_name, brand, type, supplier_type) 
define dimension branch as (branch_key, branch_name, branch_type) 
define dimension location as (location_key, street, city, state_or_province, country) 
define cube shipping [time, item, shipper, from_location, to_location]: 
dollars _cost = sum(cost_in _dollars), units _shipped = count(*) 
define dimension time as time in cube sales 
define dimension item as item in cube sales 
define dimension shipper as(shipper_key, shipper_name, location as location in cube sales, shipper_type) 
define dimension from_location as location in cube sales 
define dimension to_location as location in cube sales 

        define cube 语句用于定义数据立方体 sales 和 shipping,分别对应图中的两个事实表。注意数据立方体 sales 的 time, item 和 location 维分别可以被数据立方体 shipping 共享,由于这三个维表已经在 sales 中被定义,在定义 shipping 时可以直接通过 “as” 关键字进行引用。

三、多维数据模型中的OLAP操作

        在学习多维数据模型中的OLAP操作之前,首先需要认识一下概念分层。
        概念分层提出的背景是因为由数据归纳出的概念是有层次的。例如,假定在一个location维表中,location是“华中科技大学”,可以通过常识归纳出 “武汉市” “湖北省” “中国” “亚洲” 等不同层次的更高级概念,这些不同层次的概念是对原始数据在不同粒度上的概念抽象。所谓概念分层,实际上就是将低层概念集映射到高层概念集的方法。
        许多概念分层隐藏在数据库模式中。例如,假定 location 维由属性 number、street、city、province、country 定义。这些属性按一个全序相关,形成一个层次,如 “city<province<country”。维的属性也可以构成一个偏序,例如,time 维基于属性 day、week,month、quarter、year 就是一个偏序 “day<month<quarter;week}<year”(通常人们认为周是跨月的,不把它看作是月的底层抽象;而一年大约包含52个周,常常把周看作是年的底层抽象)。这种通过定义数据库模式中属性的全序或偏序的概念分层称作模式分层
        概念分层也可以通过对维或属性值的离散化或分组来定义,产生集合分组分层。例如,可以将商品的价格从高到低区间排列,这样的概念分层就是集合分组分层。对于商品价格这一维,根据不同的用户视图,可能有多个概念分层,用户可能会更加简单地把商品看作便宜、价格适中、昂贵这样的分组来组织概念分层。
        概念分层允许用户在各种抽象级别处理多维数据模型,有一些OLAP数据立方体操作允许用户将抽象层物化成为不同的视图,并能够交互查询和分析数据。由此可见,OLAP为数据分析提供了友好的交互环境。
        典型的OLAP的多维分析操作包括:下钻(Drill-down)上卷(Roll-up)切片(Slice)切块(Dice)以及转轴(Pivot)等。下面将以表“四个分店的销售数据表”的数据为例分别对这些操作进行详细介绍。

(一)下钻

        下钻(Drill-down)是指在维的不同层次间的变化,从上层降到下一层,或者说是将汇总数据拆分成更加细节的数据。如图所示,下钻操作从时间这一维度对数据立方体进行更深一步的细分,从季度下钻到月份,从而能够针对每个月份的数据进行进一步更加细化的分析。

(二)上卷

        上卷(Roll-up)实际上就是下钻的逆操作,即从细粒度数据向高层的聚合。如图所示,上卷操作也是从时间这一维度对数据立方体进行操作的,将第一季度和第二李度的数据合开为上半年的数据,将第三季度和第四季度的数据合并为下半年的数据,从而将数据聚合,使得在史高层次上讲行数据分析成为可能。 

(三)切片

        切片(Slice)是指选择维中特定区间的数据或者某批特定值进行分析。如图所示,对于商品类型这一维度添加限制条件,只针对台式机这个商品类型进行切片操作,就可以单独分析关于台式机的所有四个分店在各个季度的所有数据。

(四)切块

        切块(Dice)操作通过在两个或多个维上进行选择,定义子数据立方体。如图所示,展示了一个切块操作,它涉及三个维,并通过指定商品类型、时间和分店这三个限制各件对据立方体进行切块。

(五)转轴

        转轴(Pivot)即维的位置的互换,就像是二维表的行列转换。转轴操作只是转动数据的视角,提供数据的替代表示。如图所示,展示了一个转轴操作,转轴实际上只是将时间和分店这两个维在二维平面上进行转动。转轴的其他例子包括转动三维数据方体,或将一个三维立方体变换成二维的平面序列等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle数据迁移到mysql

项目场景&#xff1a; 需要更换数据库 问题描述 导入导出脚本。不能满足需求 解决方案&#xff1a; 使用阿里巴巴的yugong 阿里巴巴去Oracle数据迁移同步工具(全量增量,目标支持MySQL/DRDS) GitHub - alibaba/yugong: 阿里巴巴去Oracle数据迁移同步工具(全量增量,目标支持MyS…

Leetcode 第 121 场双周赛 Problem D 统计强大整数的数目(Java + 记忆化搜索的数位 DP 模板 + 特判)

文章目录 题目思路Java 记忆化搜索的数位 DP 模板 特判第 1 步&#xff1a;第 2 步&#xff1a;第 3 步&#xff1a; 复杂度Code 题目 Problem: 100163. 统计强大整数的数目给你三个整数 start &#xff0c;finish 和 limit 。同时给你一个下标从 0 开始的字符串 s &#xf…

postman设置下载文件大小限制

问题 本地写了一个下载文件的接口&#xff0c;调用postman测试的时候&#xff0c;小文件可以&#xff0c;但时大文件就会报错&#xff0c;postman提示&#xff1a; 解决方案 点击postman的设置按钮&#xff0c;点击【Settings】&#xff0c;在打开的弹窗中选择【General】Tab…

三菱plc学习入门(二,三菱plc指令,触点比较,计数器,交替,四则运算,转换数据类型)

今天&#xff0c;进行总结对plc的学习&#xff0c;下面是对plc基础的学习&#xff0c;希望对读者有帮助&#xff0c;欢迎点赞&#xff0c;评论&#xff0c;收藏&#xff01;&#xff01;&#xff01; 目录 触点比较 当数据太大了的时候&#xff08;LDD32位&#xff09; CMP比…

1874_曲轴位置传感器

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/g_ECU_hacking: some learning notes about ECU(engine control unit) hacking. 1874_曲轴位置传感器 功能描述 综述 发动机控制处理中&#xff0c;曲轴位置传感器是非常关键的一个信息。这里先从基本的功能上&…

如何设计企业级业务流程?学习华为的流程六级分类经验

业务流程管理&#xff08;BPM&#xff09;是一种系统化的方法&#xff0c;用于分析、设计、执行、监控和优化组织的业务流程&#xff0c;以实现预期的目标和价值。业务流程管理中&#xff0c;流程的分级方法有多种&#xff0c;常见的有以下几种&#xff1a; APQC的流程分级方法…

【Verilog】基于Verilog的DDR控制器的简单实现(一)——初始化

在FPGA中&#xff0c;大规模数据的存储常常会用到DDR。为了方便用户使用&#xff0c;Xilinx提供了DDR MIG IP核&#xff0c;用户能够通过AXI接口进行DDR的读写访问&#xff0c;然而MIG内部自动实现了许多环节&#xff0c;不利于用户深入理解DDR的底层逻辑。 本文以美光(Micro…

(leetcode)Z字形变换 -- 模拟算法

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 输入描述 string convert(string s, int numRows)&#xff0c;输入一个字符串s&#xff0c;以及一个行数numRows&#xff0c;将字符串按照这个行数进行Z字形排列&…

vue项目接入滑动验证码

前言 本文教你基于Node.js环境&#xff0c;在vue项目中如何接入KgCapctah。 准备工作 访问凯格行为验证码官网&#xff0c;注册账号后登录控制台&#xff0c;访问“无感验证”模块&#xff0c;申请开通后系统会分配给应用一个唯一的AppId、AppSecret。凯格提供后端SDK来校验…

Python 面向对象知识点补充

Python 面向对象知识点补充 【一】Mixins机制 【1】概念 Mixins&#xff1a;是一种在面向对象编程中&#xff0c;通过组合多个类的特称来创建一个新类的技术核心机制&#xff1a;就是在多继承的背景下尽可能地提升多继承的可读性通过命名规范来满足人的思维习惯&#xff08;…

Java:File类详解

文章目录 1、概述2、创建File实例3、常用方法3.1 获取功能的方法3.2 绝对路径和相对路径3.3 判断功能的方法3.4 创建删除功能的方法3.5 文件过滤功能的方法 4、文件夹的遍历5、综合练习5.1 创建文件夹5.2 查找文件&#xff08;不考虑子文件夹&#xff09;5.3 查找文件&#xff…

一些数字设计及验证的笔试题(6)

一些数字设计及验证的笔试题汇总&#xff0c;仅供参考。 文章目录 一、什么是亚稳态&#xff1f;如何改善&#xff1f; 二、C语言下列关系符号中&#xff0c;优先级最低的是哪个&#xff1f; 三、下面哪种不属于Vim编辑器的工作模式&#xff1f; 四、在以下的哪个timescale…

python爬虫,简单的requests的get请求,百度搜索实例

1、百度搜索实例 import requests url https://www.baidu.com/s? # key_word 迪丽热巴 key_word input(输入搜索内容&#xff1a;) headers {User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537…

来瞅瞅Java 11都有啥新特性

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff01;今天小黑要和咱们聊聊Java 11&#xff0c;这个在Java发展史上占有一席之地的版本。说起Java&#xff0c;咱们都知道&#xff0c;它是一门历史悠久又持续发展的编程语言。Java不仅因其“一次编写&#xff0c;到处…

Sentinel限流熔断

官网&#xff1a;https://sentinelguard.io/zh-cn/docs/introduction.html github文档&#xff1a;https://github.com/alibaba/Sentinel/wiki Sentinel 是一款面向分布式服务架构的轻量级流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从流量控制、 熔断降级 、系…

百度地图打点性能优化(海量点、mapv)

文章目录 百度地图打点性能优化&#xff08;海量点、mapv&#xff09;原因优化方法数据获取方面页面加载方面 参考资料 百度地图打点性能优化&#xff08;海量点、mapv&#xff09; 原因 在百度地图api中&#xff0c;默认的点是下图的红点 而这种点位比较多的时候&#xff0c…

61、python - 手写卷积、bn、池化、全连接、激活、ResBlock

这篇算是一个总结,之前的原理部分在介绍各个算法时候,已经加入了每个算法的代码编写介绍。 给出的示例是用 python 语法来实现的,也是实现的最基础的版本,这也是我们手写算法的初衷:不调用其他的三方库,从最基础的手写算法开始,一步步完成算法实现和性能优化,这样可以…

ElasticSearch学习笔记-SpringBoot整合Elasticsearch7

项目最近需要接入Elasticsearch7&#xff0c;顺带记录下笔记。 Elasticsearch依赖包版本 <properties><elasticsearch.version>7.9.3</elasticsearch.version><elasticsearch.rest.version>7.9.3</elasticsearch.rest.version> </propertie…

Windows找不到文件‘chrome‘,请确定文件名是否正确后,再试一次。

本文主要记录遇到vscode运行HTML文件提示&#xff1a; Windows找不到文件‘chrome‘&#xff0c;请确定文件名是否正确后&#xff0c;再试一次。问题的解决办法。 目录 一、打开设置 二 、搜索Live Server Config &#xff08;1&#xff09;安装Live Server插件 &#xff0…

如何使用gflags.exe查看内存来源

使用 gflags.exe 工具并不能直接查看内存的来源&#xff0c;即它不能告诉你某块内存是在哪个函数调用或代码行中分配的。然而&#xff0c;gflags 可以结合其他调试工具帮助你检测和分析内存问题&#xff0c;如内存泄漏、堆溢出等。 例如&#xff0c;如果你想追踪某个进程的内存…