我是 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 上的许多在线示例,但是仅使用维度属性呢?
这是正确的方法吗?如何处理这些?