0

我是 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])

员工键=连接(员工[cust_id],员工[dept_id])

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

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

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

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

Emp Name 部门名称
XYZ-A IT
ABC HR
AXBYCZ Finance

2) 在报告特定月份示例时 - 2019 年 1 月 - 显示截至该月活跃的所有员工和部门名称。所以,预期的输出是:

Emp Name 部门名称
XYZ IT

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

Emp Name 部门名称
XYZ-A IT
ABC HR
AXBYCZ HR+Admin

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

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

部门键=连接(部门[cust_id],部门[dept_id])和连接(部门[efctv_dt],””))

员工键=串联(员工[cust_id],员工[dept_id])和串联(员工[efctv_dt],””))

示例键输出值 = 1001D112-01-2018、1001D201-01-2019…</p>

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

AS 表格模型不允许创建复杂的连接/条件(如在 SAP BO Universe 中),因此我们可以在连接这两个 SCD 类型 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 上的许多在线示例,但是仅使用维度属性呢?

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

4

0 回答 0