如何在两个具有1:M关系的SCD Type2表之间的Analysis Services“表格”模型中创建/处理复杂的联接条件?

时间:2019-03-06 14:19:49

标签: ssas reporting dax ssas-tabular scd2

我是Analysis Services的新手,正在从事表格模型设计。需要专家针对最佳方法以及如何处理以下情况的建议/建议。

假设,我在下面的两个表Department和Employee中存储了不同客户(承租人)的数据,并且这两个表之间存在一对多(1:M)的关系(即一个部门可以具有1个或多个)员工)

但是,假设两个表格均为SCD类型2,即存储具有生效日期和终止日期的历史记录。在数据库级别的这些表上没有任何约束,索引等。

Department table:
cust_id dept_id dept_name   efctv_dt    trmntn_dt   Dept_key
1001    D1      IT        12-01-2018    12-31-9999  1001D1
1001    D2      HR        01-01-2019    12-31-9999  1001D2
1002    D3      Admin     02-01-2019    02-28-2019  1002D3
1002    D3      HR+Admin  03-01-2019    12-31-9999  1002D3
1002    D4      Finance   02-01-2019    12-31-9999  1002D4

Employee table:
cust_id emp_id  emp_name    dept_id efctv_dt    trmntn_dt   Emp_key
1001    E1      XYZ          D1    01-01-2019   01-31-2019  1001D1
1001    E1      XYZ-A        D1    02-01-2019   12-31-9999  1001D1
1001    E2      ABC          D2    02-01-2019   12-31-9999  1001D2
1002    E3      AXBYCZ       D3    03-01-2019   03-31-2019  1002D3
1002    E3      AXBYCZ       D4    04-01-2019   12-31-9999  1002D4
1002    E4      DEFG         D4    04-01-2019   12-31-9999  1002D4

列cust_id和dept_id可以在两个表中作为一个单独的列连接在一起作为键字段,并可以用作两个表之间的联接。

部门键=串联(部门[cust_id],部门[dept_id])

Employee Key = Concatenate(employee [cust_id],employee [dept_id])

示例键输出值= 1001D1、1001D2、1002D3、1002D4

现在,我们有以下报告要求,即

要过滤日期范围(在可视化中)-假设存在另一个包含所有日期和层次结构的日期维度表

1)如果未选择特定的日期范围或过滤器-请显示所有当前在职员工和部门的名称(其中trmntn_dt = 12-31-9999)
因此,预期输出为:

员工姓名部门姓名
XYZ-A IT
ABC HR
AXBYCZ财务

2)在报告特定月份的示例(2019年1月)时,显示截至该月为止所有活动的员工和部门名称。 因此,预期输出为:

员工姓名部门姓名
XYZ IT

3)在报告特定季度示例-2019年第一季度时-显示截至该季度为止所有活动的员工和部门名称。 因此,预期输出为:

员工姓名部门姓名
XYZ-A IT
ABC HR
AXBYCZ HR + Admin

但是,这两个表之间具有1:M关系的AS Tabular模型的连接条件将失败,因为在关系的一侧的Department表中的行不是唯一的(D3的行)。 / p>

如果在两个表的级联连接条件中也包含efctv_dt或trmntn_dt,则作为连接关键字,即

部门键=串联(部门[cust_id],部门[dept_id])和串联(部门[efctv_dt],””))

Employee Key = Concatenate(employee [cust_id],employee [dept_id])&Concatenate(employee [efctv_dt],””))

示例键输出值= 1001D112-01-2018、1001D201-01-2019 ...

但是,尽管现在行将是唯一的,因为我们不希望同一天同一行两次(除非某些ETL问题,例如进程在同一天运行两次,等等)

AS表格模型不允许创建复杂的联接/条件(例如在SAP BO Universe中),因此当我们按以下方式联接这两个SCD type 2表时,可以添加以下条件,这可能有助于解决一些要求。

    dept.cust_id = emp.cust_id
And dept.dept_id = emp.dept_id
And ( calendar_date is between efctv_dt and trmntn_dt 
        Or 
       trmntn_dt = ’12-31-9999’
    )

我认为使用DAX上在线提供的许多示例,仍然可以创建/计算任何度量值,但是仅使用尺寸属性怎么办?

这是正确的方法吗?如何处理这些?

0 个答案:

没有答案