刚进入数据仓库,需要你的帮助来澄清一个混乱。假设我有Employee维度和Department Dimension。如果我有一份报告要求我列出dimEmployee(名称,薪水,职位)和部门(DeptNo,Desc,Manager)中的字段,我该怎么做。我是否创建了一个事实表(无事实),它将成为这两个维度之间的连接表?或者我需要以不同方式设计这两个表。每个人都在谈论事实和维度,但我们是否甚至考虑过连接维度表?
感谢您的见解。
RK
答案 0 :(得分:3)
员工和部门之间必须存在关系。这通常通过将一个DepartmentId列添加到Employee表来完成。
答案 1 :(得分:1)
谢谢大家的回复。 因此,如果需要在某个工资范围内找到部门中的员工总数,并且还要求在部门中列出员工,则设计可能如下所示
dimEmployee
EMPID
部门
名称
等...
dimDept
DEPTID
说明
经理
等....
fctEmpDept
EMPID
DEPTID
薪水
当我阅读有关数据仓库的内容时,我只看到维度和事实表。如果有要求显示正常报告目的的列表,我真的很困惑如何构建表。显然,可能存在一些可能与外键相关联的维度。
答案 2 :(得分: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.
因此,对人员分配的更改(例如直线经理或促销的更改)不需要更改维度,只需要更改事实表,这将提供简单的变更历史记录。如果您有多个事实表共享这些维度,保持简单将支付股息。尝试两者的简单实现,并试一试,我相信你会发现这更自然。
答案 3 :(得分:1)
选项A:如果每个员工都属于一个且仅属于一个部门。我会将departmentID添加到事实表中。
选项B:如果员工可以属于多个部门,我会使用第三个备选方案,设置指标表(或聚合事实表)。然后,您将按部门汇总您的员工,并将汇总的号码存储在此新表中。
选项C:您可以将departmentID添加到employee表中,这样就可以完成工作,但您可以设置层次结构。您可以这样做,但随着数据集的增长,您的联接变得困难且效率降低。
我会选择前两个选项中的一个,具体取决于您的员工/部门关系。
我承认还有其他可用的解决方案,但这些是您最好的选择。
答案 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)
任何问题的典型维度包括时间(总是),地理位置(例如,部门,地区,州等)等。在您的情况下,听起来像公司阶梯,职位等的薪资范围可能是相关的
事实表通常包含附加的内容(例如,给定薪资范围内的个人数量,职位等)。
我不确定员工是否有资格作为维度;对我来说听起来更像是一个事实。