【问题标题】:Datawarehouse - How to Link dimensions数据仓库 - 如何链接维度
【发布时间】:2009-05-19 22:06:52
【问题描述】:

刚刚进入数据仓库,需要您的帮助来澄清一个困惑。假设我有员工维度和部门维度。如果我有一份报告要求我列出来自 dimEmployee 的字段(姓名、薪水、职位)和来自部门的字段(DeptNo、Desc、经理),我该怎么做。我是否创建一个事实表(无事实),它将成为这两个维度之间的连接表?还是我需要以不同的方式设计这两个表。每个人都在谈论事实和维度,但我们甚至考虑过链接维度表吗?

感谢您的见解。

RK

【问题讨论】:

    标签: data-warehouse


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      dimEmployee
      EmpId
      部门
      名称
      等等……

      dimDept
      部门编号
      描述
      经理
      等等……

      fctEmpDept
      员工编号
      部门编号
      工资

      当我阅读有关数据仓库的信息时,我只看到维度和事实表。如果需要显示用于正常报告目的的列表,我真的很困惑表格的结构。显然,有些维度可能与外键相关联。

      【讨论】:

      • 那么在你的设计中,一个员工可能属于多个部门?或者您可能需要跟踪员工随时间从一个部门转移到另一个部门(SCD)?如果没有,Andomar 更简单的解决方案可能正是您所需要的。
      【解决方案3】:

      如果您保持维度相互独立,在人员维度中没有部门引用,在部门维度中没有人员引用,则分配事实表可以充当两者之间的桥梁。

      例如

      
      
      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.
      
      

      因此,对人员分配的更改(例如直属经理的更改或升职)不需要更改维度,而只需更改事实表,该事实表将提供一个很好的简单历史更改记录。当您有多个事实表共享这些维度时,保持它们的简单性会带来好处。尝试两者的简单实现并尝试一下,我相信您会发现这更自然。

      【讨论】:

        【解决方案4】:

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

        选项 B:如果员工可以属于多个部门,我会选择第三种选择,即设置指标表(或汇总事实表)。然后,您将按部门汇总您的员工,并将汇总后的数字存储在这个新表中。

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

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

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

        【讨论】:

        • 为了记录,选项 C 被称为“雪花”,因为(如果走得太远)星形模式的点有自己的点,在视觉上类似于雪花。
        【解决方案5】:

        当您谈论维度表和事实表时,您通常指的是聚合数据。您可以编写一份报告,讨论每个部门的员工人数。

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

         SELECT person.Name, person.Salary, Person.Position,
         Department.DeptNo, Department.Desc, Department.Manager
         From person
          join Department on person.DeptId = Department.Id
        

        【讨论】:

          【解决方案6】:

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

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

          我不确定 Employee 是否符合维度;对我来说听起来更像是事实。

          【讨论】:

            猜你喜欢
            • 2023-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多