如何创建数据集市

Posted

技术标签:

【中文标题】如何创建数据集市【英文标题】:how to create a data-mart 【发布时间】:2012-02-02 16:35:46 【问题描述】:

这是我第一次尝试创建数据集市/仓库,我对如何最好地设计架构有点困惑。项目背景:我最初创建了一个关系数据库,用于捕获有关我们客户的信息。一个简化的架构是这样的:

 ClientTbl:
 ID:PK;
 FName:String;
 LName:String;

 ClientEDU(one to many)
 ID:PK;
 ClientID:FK;
 SchoolName:String;
 Degree:String;
 GPA:String;

 ClientJobs(One to many)
 ID:PK;
 ClientID:FK;
 OrganizationName:string;
 Industry:String;
 StartDate:Date;
 EndDate:Date;
 Salary:double;
 CityLocation: String;

这是一个简化的示例。实际上,我还有几张表可以容纳数千条记录。当我想对这些表运行查询时,可能会非常耗时。我似乎创建一个数据集市会有所帮助。这样,我们可以每晚对数据集市进行更新,这将非常耗时。然后将查询的数据放在我们的 DM 中,这样可以快速查询。我只是在如何最好地设计架构上遇到困难。根据上面的示例表,我想在数据集市中回答的示例问题是这样的:

 % of clients that attend each school in our db
 % that have each degree in our db
 Avg salary of client
 Avg length of stay at a job
 % of clients that worked in each city, that is found in the db

根据我的阅读,我知道事实表将包含所有计算值(平均工资、长度等),并且每个维度都将包含数据(工作或教育),但我不明白它们是如何联系在一起的。我的事实表会为每个客户提供一行吗?只有一排?

任何帮助都会很棒

谢谢

【问题讨论】:

跑——不要走路——去书店买 Ralph Kimball 的数据仓库工具包。数据仓库有很多内容,这里的简短答案是不够的。 是的,其实我前几天才买的。但事实上,我需要一个速成课程。这个项目很快就要到期了,我没有太多时间阅读它lol “我没有太多时间阅读它”。那你就完蛋了。这并不简单。没有通往数据仓库的皇家之路。速成课程只会导致崩溃。干杯。 【参考方案1】:

这是一个难题,因为它涉及客户的人口统计摘要。

你有一份看起来像事实的工作。它有一个持续时间和一个薪水,这是衡量标准。我们知道它们是度量,因为它们有适当的单位。

鉴于 Job 事实,该事实的维度是什么?

客户

时间开始

也许您对工作有其他了解(例如地理、行业)。

时间是一个时间点。这通常是一个表格,其中包含日期以及日期所属的所有各种报告类别:季度、周、会计期间等。

客户是个人;并且人们并没有做出特别好的维度。它们有很多自己的维度。

选择 1。“雪花”模式。将客户视为一种具有很多维度的事实,包括他们自己的地理和学位以及学校等等。

选择 2。“人口”维度。这是学位课程、GPA 范围、学校名称等的摘要。这实际上是正确的工作事实和客户之间的关联。工作属于人口统计类别。许多客户也属于该类别。

我的事实表是否会为每个客户提供一行?只有一排?

事实表对于与该事实的各个维度相关联的事实的每个可测量实例都有一行。

工作事实有两个衡量标准:薪水、工期和至少对维度的外键引用:开始日期和人口统计。如果您有工作的其他维度属性(如地理或行业),这些是工作的外键。

客户人口统计数据将与一项或多项工作相关联。

地理或行业也是如此。

由于客户是一种特殊情况,一个或多个客户具有对相应客户人口统计维度行的 FK 引用。

【讨论】:

感谢 S.Lott!绝对值得研究更多!【参考方案2】:

我不认为“数据仓库”是你的灵丹妙药。

您应该专注于为什么您的结果“耗时”

您提出的问题并没有什么特别之处。

有些事情是令人担忧的......比如你真的有一个字符串学校的名字作为学校的主键吗?

也许发布一个实际的架构子集,以及您遇到困难的特定查询,然后您可以获得有关如何改进这些的实际帮助。

【讨论】:

您好兰迪,我不确定您在“作为 PK 的字符串学校名称”中指的是什么。在我的示例中,我将 ID 作为 PK,将 SchooName 作为属性。如果有帮助,我可以附上 ER 图(假设你可以在这里附上图片?)

以上是关于如何创建数据集市的主要内容,如果未能解决你的问题,请参考以下文章

如何创建可以提高图表性能的聚合表(数据集市)?

如果数据集市有两种不同的粒度,如何解决?

数据仓库和数据集市新手

Inmon 数据集市与 Kimball 数据集市

使用 GitHub 信息创建数据集市

Datamart vs.reporting Cube,有啥区别?