Datawarehouse - 如何链接维度

时间:2009-05-19 22:06:53

标签: data-warehouse

刚进入数据仓库,需要你的帮助来澄清一个混乱。假设我有Employee维度和Department Dimension。如果我有一份报告要求我列出dimEmployee(名称,薪水,职位)和部门(DeptNo,Desc,Manager)中的字段,我该怎么做。我是否创建了一个事实表(无事实),它将成为这两个维度之间的连接表?或者我需要以不同方式设计这两个表。每个人都在谈论事实和维度,但我们是否甚至考虑过连接维度表?

感谢您的见解。

RK

6 个答案:

答案 0 :(得分:3)

员工和部门之间必须存在关系。这通常通过将一个DepartmentId列添加到Employee表来完成。

答案 1 :(得分:1)

如果您的维度彼此独立,人员维度中没有任何部门参考,部门维度中没有人参考,则分配事实表可以充当两者之间的桥梁。

例如



Person Table
------------

PersonID
Forename
Surname
EffectiveFromDate
EffectiveToDate


Department Table
----------------

DepartmentID
DepartmentName

etc


AssignmentFact Table
--------------------

AssignmentID (primary key)
PersonID (foreign key to person table)
ManagerID (foreign key to person table)
DepartmentID (foreign key to department table)
Salary
CostCentre
EffectiveFromDate
EffectiveToDate.

因此,对人员分配的更改(例如直线经理或促销的更改)不需要更改维度,只需要更改事实表,这将提供简单的变更历史记录。如果您有多个事实表共享这些维度,保持简单将支付股息。尝试两者的简单实现,并试一试,我相信你会发现这更自然。

答案 2 :(得分:1)

选项A:如果每个员工都属于一个且仅属于一个部门。我会将departmentID添加到事实表中。

选项B:如果员工可以属于多个部门,我会使用第三个备选方案,设置指标表(或聚合事实表)。然后,您将按部门汇总您的员工,并将汇总的号码存储在此新表中。

选项C:您可以将departmentID添加到employee表中,这样就可以完成工作,但您可以设置层次结构。您可以这样做,但随着数据集的增长,您的联接变得困难且效率降低。

我会选择前两个选项中的一个,具体取决于您的员工/部门关系。

我承认还有其他可用的解决方案,但这些是您最好的选择。

答案 3 :(得分:1)

谢谢大家的回复。 因此,如果需要在某个工资范围内找到部门中的员工总数,并且还要求在部门中列出员工,则设计可能如下所示

dimEmployee
EMPID
部门
名称
等...

dimDept
DEPTID
说明
经理
等....

fctEmpDept
EMPID
DEPTID
薪水

当我阅读有关数据仓库的内容时,我只看到维度和事实表。如果有要求显示正常报告目的的列表,我真的很困惑如何构建表。显然,可能存在一些可能与外键相关联的维度。

答案 4 :(得分:0)

当您谈到Dimension和Fact表时,通常会引用聚合数据。您可以撰写一份报告,说明每个部门的员工数量。

听起来你正在处理数据列表。使用直接SQL可以更好地实现这一点。像

这样的东西
 SELECT person.Name, person.Salary, Person.Position,
 Department.DeptNo, Department.Desc, Department.Manager
 From person
  join Department on person.DeptId = Department.Id

答案 5 :(得分:0)

任何问题的典型维度包括时间(总是),地理位置(例如,部门,地区,州等)等。在您的情况下,听起来像公司阶梯,职位等的薪资范围可能是相关的

事实表通常包含附加的内容(例如,给定薪资范围内的个人数量,职位等)。

我不确定员工是否有资格作为维度;对我来说听起来更像是一个事实。