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