构建事实表以导出SSAS中的度量值

构建事实表以导出SSAS中的度量值,ssas,mdx,measure,Ssas,Mdx,Measure,我的目标是建立一个事实表,用于在SSAS中导出度量。我正在建立的衡量标准是“平均就业时间”。该度量将部署在仪表板中,用户将能够选择一个日历周期,并深入到月、周和天 这就是事务数据的外观: DeptID EmployeeID StartDate EndDate -------------------------------------------- 001 123 20100101 20120101 001 124

我的目标是建立一个事实表,用于在SSAS中导出度量。我正在建立的衡量标准是“平均就业时间”。该度量将部署在仪表板中,用户将能够选择一个日历周期,并深入到月、周和天

这就是事务数据的外观:

DeptID     EmployeeID   StartDate   EndDate
--------------------------------------------
001        123           20100101   20120101   
001        124           20100505   20130101

我的事实表应该有哪些字段?我应该在哪些字段上进行聚合?平均值怎么样?感谢您提供的任何帮助。

每当您设计事实表时,首先要问自己的问题是:

  • 您正在分析的业务流程是什么
  • 相关事实是什么
  • 你想用什么维度来分析这些事实
  • 事实表中最低(聚合最少)的细节级别代表什么,即事实表的粒度是多少
  • 这个过程似乎就是人力资源(HR)

    你已经知道了一个事实,即你可以很容易地计算出的工作年限:
    EndDate-StartDate
    。明显的维度是部门、员工、日期(开始和结束两个角色扮演维度)

    在这种情况下,由于您正在寻找“平均就业时间”作为衡量标准,因此,粒度似乎应该是各个部门的单个员工(员工调动时,您的事务数据可能会在不同的
    DeptID
    下列出相同的
    EmployeeID

    您的星型架构将如下所示:

    Fact_HR
    DeptKey   EmployeeKey   StartDateKey   EndDateKey  EmploymentLengthInDays
    -------------------------------------------------------------------------
    10001     000321         20100101       20120101    730
    10001     000421         20100505       20130101    972
    
    Dim_Department
    DeptKey   DeptID   Name   ... (other suitable columns)
    ------------------------- ...
    10001     001      Sales  ...
    
    Dim_Employee
    EmployeeKey   EmployeeID  FirstName  LastName  ... (other suitable columns)
    ---------------------------------------------- ...
    000321        123         Alison     Smith     ...
    000421        124         Anakin     Skywalker ...
    
    Dim_Date
    DateKey    DateValue  Year  Quarter Month Day ... (other suitable columns)
    00000000   N/A        0     0       0     0   ...
    20100101   2010-01-01 2010  1       1     1   ...
    20100102   2010-01-02 2010  1       1     2   ...
    ...        ...              ...     ...   ... ... 
    (so on for every date you want to represent)
    
    结尾的每一列都是代理键。您感兴趣的事实是
    EmploymentLengthInDays
    ,您可以导出一个度量值
    Avg.Employment Length
    ,然后使用所有维度的平均值进行聚合

    现在,您可以提出以下问题:

    • 按部门划分的平均就业时间
    • 2011年开始或2010年9月结束的员工平均就业时间
    • 给定员工的平均雇佣时间(他/她工作的每个部门)

    奖金:您还可以向多维数据集中添加另一个使用同一列的度量值,但它有一个总和聚合器,这可以称为
    总就业长度
    。在给定的员工中,这将告诉您该员工为公司工作的时间,但在一个部门中,它将告诉您该部门可用的总工时。这只是一个单一事实如何成为多个度量的示例。

    无论何时设计事实表,首先要问自己的问题是:

  • 您正在分析的业务流程是什么
  • 相关事实是什么
  • 你想用什么维度来分析这些事实
  • 事实表中最低(聚合最少)的细节级别代表什么,即事实表的粒度是多少
  • 这个过程似乎就是人力资源(HR)

    你已经知道了一个事实,即你可以很容易地计算出的工作年限:
    EndDate-StartDate
    。明显的维度是部门、员工、日期(开始和结束两个角色扮演维度)

    在这种情况下,由于您正在寻找“平均就业时间”作为衡量标准,因此,粒度似乎应该是各个部门的单个员工(员工调动时,您的事务数据可能会在不同的
    DeptID
    下列出相同的
    EmployeeID

    您的星型架构将如下所示:

    Fact_HR
    DeptKey   EmployeeKey   StartDateKey   EndDateKey  EmploymentLengthInDays
    -------------------------------------------------------------------------
    10001     000321         20100101       20120101    730
    10001     000421         20100505       20130101    972
    
    Dim_Department
    DeptKey   DeptID   Name   ... (other suitable columns)
    ------------------------- ...
    10001     001      Sales  ...
    
    Dim_Employee
    EmployeeKey   EmployeeID  FirstName  LastName  ... (other suitable columns)
    ---------------------------------------------- ...
    000321        123         Alison     Smith     ...
    000421        124         Anakin     Skywalker ...
    
    Dim_Date
    DateKey    DateValue  Year  Quarter Month Day ... (other suitable columns)
    00000000   N/A        0     0       0     0   ...
    20100101   2010-01-01 2010  1       1     1   ...
    20100102   2010-01-02 2010  1       1     2   ...
    ...        ...              ...     ...   ... ... 
    (so on for every date you want to represent)
    
    结尾的每一列都是代理键。您感兴趣的事实是
    EmploymentLengthInDays
    ,您可以导出一个度量值
    Avg.Employment Length
    ,然后使用所有维度的平均值进行聚合

    现在,您可以提出以下问题:

    • 按部门划分的平均就业时间
    • 2011年开始或2010年9月结束的员工平均就业时间
    • 给定员工的平均雇佣时间(他/她工作的每个部门)

    奖金:您还可以向多维数据集中添加另一个使用同一列的度量值,但它有一个总和聚合器,这可以称为
    总就业长度
    。在给定的员工中,这将告诉您该员工为公司工作的时间,但在一个部门中,它将告诉您该部门可用的总工时。这只是一个单一事实如何成为多重衡量标准的例子。

    很高兴看到你建议使用Kimball的模型。我要添加的一件事是,对于平均度量值,我将为SSAS中的事实表添加计数度量值(这通常由defualt添加)在“计算”下添加一个计算的度量值,该度量值将EmploymentLengthInDays度量值按计数度量值进行划分,给出立方体任何级别的平均值。很高兴看到您建议使用Kimball的模型。我要添加的一件事是,对于平均度量,我会在SSAS中为事实表添加计数度量(这通常是通过defualt添加的),并在计算中添加一个计算度量,通过计数度量将EmploymentLengthInDays度量与count度量相分离,从而得出多维数据集任何级别的平均值。