Data warehouse 设计问题

luwenshuo 2009-05-08 12:42:35
正在学习数据仓库,概念有些模糊,数据仓库是面向主题的,报表算是一个“主题”吗?或则在以下情况中1为一个主题,2为一个主题?

有一个报表:
查询条件:城市/年龄/性别

假设有一家公司生产了一个产品,需要统计
1. 哪些销售商从公司批发了该产品 (根据搜索条件: 城市)
2. 每个销售点又有多少人买了该产品 (根据搜索条件: 城市/年龄/性别)
- a. 买产品的人的学历(例如,大专 多少人, 本科 多少人, 本科以上多少人)
- b. 性别和年龄(例如:男: 10-20岁多少人, 21-40岁多少人, 女:10-20岁多少人, 21-40岁多少人)


求教: 如何设计这个数据仓库?我有以下想法,但感觉设计的很有问题, 请各位给出方案学习一下.

维度表:
Dim日期
-ID
-年
-月
-日

Dim城市
-ID
-描述

Dim销售商
-城市Key
-描述

Dim学历
-ID
-描述

dim性别
-ID
-描述

dim年龄区间
-ID
-描述

事实表:

fact销售记录
-日期ID
-销售商Key
-销售记录Count

(是否应该把下列fact表整合到一个总的fact表? 但用一个fact表数据量是否会太大?)
fact客户学历
-年龄区间key
-性别key
-销售商Key
-日期Key
-学历Key
-客户学历Count


fact客户性别
-年龄区间key
-学历Key
-销售商Key
-日期Key
-性别key
-客户性别Count

fact客户年龄
-学历Key
-销售商Key
-日期Key
-性别key
-年龄区间key
-客户年龄Count
...全文
224 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
innovate911 2009-05-30
  • 打赏
  • 举报
回复
这可以是一个主题,只是不同的角度而已,一是从公司的角度,业务属于“配发”,二是销售点的角度,业务属于“零售”。Kimball在建设DW时提到过,要先分析数据集市,再设计维表,最后是设计事实表,如果前一个问题没搞清楚,后面的问题无法深入,如果凑合的话,只能是残废短命的DW。当然很多公司也将客户作为独立的主题分析,就看客户分析的重要性和复杂性了。

你这里的零售好像又分为销售的角度和客户两个角度,有点乱,最好理一下。如果都有需要,可以设计3个事实表,一是公司配发的事实表,一个销售点零售的事实表,再一个是客户购买的事实表。

接下来说维,既然数据集市主题已确认,那么公司、销售商、销售点、客户四大维必须设计,时间也是必须的,产品多的话,还需要产品维,这里就不需要了。(谁说维大了就不能设计成维了?除非你不想从这个角度分析)。接着城市、年龄、学历只是维的属性,必要的时候可以设计为独立的维,但也可以放在四大维里。

比如城市,四大维里都可以涉及到,那么需要考虑下维的层级,这方便BI展现的钻取。

至于年龄区间,是一个衍生维,需要特别处理,不可死设计,因为区间可能随时变化。

接下来事实是最简单的了,销售额,销售数量,毛利等等。
brucenan999 2009-05-27
  • 打赏
  • 举报
回复
性别,学历,年龄不要再分KEY出去了,直接做为客户维度的属性.

数据仓库的设计可以考虑一些冗余,不需要太局限于什么1,2,3NF
zzhua100 2009-05-27
  • 打赏
  • 举报
回复
1.不应该把客户作为一个维度,数据仓库的维度表记录绝不能过多。
2.应该整合为一张宽表,数据量大点没有关系的,数据仓库本来就是随时间变化增量的,但建立表的时候可以预测下一行记录所占的字节数,把各个字段类型的字节数严格控制。我现在仓库中一天1亿数据进来,加上各种不同分析统计存入不同表的数据,一天要消耗我盘15G,所以原始数据只能保存个把月就得删了。
3.如果要到达快速访问的话还可以建立相应的数据集市,也即从大表中抽取相应字段进行不同的中、高级汇总
4.数据库设计模型的话除了关系模型(一般第三范式即可),也可利用星型模式和雪花模式
iamxmy 2009-05-26
  • 打赏
  • 举报
回复
路过
luwenshuo 2009-05-26
  • 打赏
  • 举报
回复
有道理,那是否应该改成这样?

维度表:
Dim日期
-ID
-年
-月
-日

Dim城市
-ID
-描述

Dim销售商
-城市Key
-描述

Dim学历
-ID
-描述

dim性别
-ID
-描述

dim年龄区间
-ID
-描述


Dim客户
-城市Key
-学历key
-性别key
-年龄区间key


事实表:
fact销售记录
-日期key
-客户Key
-销售商Key
-购买数量Count
brucenan999 2009-05-25
  • 打赏
  • 举报
回复
1.报表是所有数据仓库应该共有需要,而不是主题,主题是指该数据仓库的目的,是为了展示什么数据.比如:销售,保险等.

2.关于表的设计,看来你对度量,维度以及维度的属性概念的理解还有些问题.像性别,学历,年龄等都可以作为一个维度:客户的不同属性,而不是单列出来分别做维度.
halhalhal 2009-05-14
  • 打赏
  • 举报
回复
而你的Dim学历、 dim性别、 dim年龄区间 都是你的“客户”维度表的维度。而你的整个数据仓库的结构也就成为“雪花结构”

维度表的维度表
|
维度表——————事实表——————维度表
| |
维度表的维度表 维度表

halhalhal 2009-05-14
  • 打赏
  • 举报
回复
按你所说需求,应该是建立一个以“销售”为主题的数据仓库。
我认为最后面的三个事实表,应该合成为一个“客户”维度表,不需要存储客户学历Count ,客户性别Count,客户年龄Count。
当要分析客户学历等指标的时候,把这个“客户”维度表当作事实表使用即可,而Count数可以通过很多方式获得(比如在多维数据集中的count选项,或者直接通过SQL获得)
Tomac 2009-05-13
  • 打赏
  • 举报
回复
是否应该把下列fact表整合到一个总的fact表? 但用一个fact表数据量是否会太大?)

应该整合为一个表,我使用BIEE的时候, 系统需要整合为一个表, 如果多个表, 数据似乎最后还是需要整合.
luwenshuo 2009-05-12
  • 打赏
  • 举报
回复
up
luwenshuo 2009-05-10
  • 打赏
  • 举报
回复
谢谢, 明白了, 请问对以上的情况, 怎样设计数据仓库比较合理?
Tomac 2009-05-10
  • 打赏
  • 举报
回复
报表算不上一个主题, 只能是主题的一个呈现方式, 一个组成部分.

本教程为授权出品 一、课程简介数据仓库(Data Warehouse,可简写为DW或DWH),是面向分析的集成化数据环境,为企业决策制定过程,提供系统数据支持的战略集合,是国内外各大公司正在重点投入的战略级技术领域。 二、课程内容《大数据电商数仓项目实战》视频教程,从项目架构的搭建,到数据采集模块的设计、数仓架构的设计、实战需求实现、即席查询的实现,我们针对国内目前广泛使用的Apache原生框架和CDH版本框架进行了分别介绍,Apache原生框架介绍中涉及到的技术框架包括Flume、Kafka、Sqoop、MySql、HDFS、Hive、Tez、Spark、Presto、Druid等,CDH版本框架讲解包括CM的安装部署、Hadoop、Zookeeper、Hive、Flume、Kafka、Oozie、Impala、HUE、Kudu、Spark的安装配置,透彻了解不同版本框架的区别联系,将大数据全生态系统前沿技术一网打尽。在过程中对大数据生态体系进行了系统的讲解,对实际企业数仓项目中可能涉及到的技术点都进行了深入的讲解和探讨。同时穿插了大量数仓基础理论知识,让你在掌握实战经验的同时能够打下坚实的理论基础。 三、课程目标本课程以国内电商巨头实际业务应用场景为依托,对电商数仓的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:每日、周、月活跃设备明细,留存用户比例,沉默用户、回流用户、流失用户统计,最近连续3周活跃用户统计,最近7天内连续3天活跃用户统计,GMV成交总额分析,转化率及漏斗分析,品牌复购率分析、订单表拉链表的设计等,让学生拥有更直观全面的实战经验。通过对本课程的学习,对数仓项目可以建立起清晰明确的概念,系统全面的掌握各项数仓项目技术,轻松应对各种数仓难题。 四、课程亮点本课程结合国内多家企业实际项目经验,特别加入了项目架构模块,从集群规模的确定到框架版本选型以及服务器选型,手把手教你从零开始搭建大数据集群。并且总结大量项目实战中会遇到的问题,针对各个技术框架,均有调优实战经验,具体包括:常用Linux运维命令、Hadoop集群调优、Flume组件选型及性能优化、Kafka集群规模确认及关键参数调优。通过这部分学习,助学生迅速成长,获取前沿技术经验,从容解决实战问题

7,388

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 数据仓库
社区管理员
  • 数据仓库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧