[英]Slowly changing dimension Type 2 with Version ID
我正在尝试使用不同的表来实现此功能,以便最终能够获得历史报告。
第一次,我想在历史记录表上有一个基线信息。 这里一些信息
**EmployeeHistory:**
id Number OrgId AccountId VersionId Date
1 34343 1 1 1 2010-01-01
**OrganizationHistory:**
OrgId Name VersionId Date
1 Sales 1 2010-01-01
**AccountHistory:**
AccountId Name VersionId Date
1 ABC 1 2010-01-01
**Final Employee Report:**
id Number OrgId AccountId Date
1 34343 Sales ABC 2010-01-01
我正在使用VersionId(在这种情况下等于1)将帮助我在特定时间检索数据。 任何更改都将记录在表上的记录上,并将VersionId增加1,所以让我们说现在我更改了AccountId名称,我的Account表上将有一个新记录:
AccountId Name VersionId Date
1 ABC 1 2010-01-01
1 ABB 2 2010-01-02
好了,现在我要更改员工编号
id Number OrgId AccountId VersionId Date
1 34343 1 1 1 2010-01-01
1 34355 1 1 2 2010-01-03
对于每个单独的表都很好,我可以轻松地按Date和VersionId检索数据顺序,因为我可以在同一天进行很多更改。
我的问题是如何从EmployeeHistory表开始细化其余表,以准确地检索Employee报告? 由于版本ID是独立的,并且对于每个表都是不同的,因此无法通过Versionid进行更改,或者由于日期的原因,或者是因为我猜会很慢,并且如果我在同一天进行了很多更改,则可能应该在条件上加上最新的versionid。
有什么想法或好的例子来解决这个问题吗?
在适当的尺寸模型中,尺寸行应使用代理键来标识。 您正在混淆维度键,业务键和版本的概念,这就是为什么建模存在问题。
正如其他人所指出的,您还缺少一个事实表。 您可能会遇到一种称为“无事实的事实”的情况,在该情况下,事实表仅用于建立维之间的关系,而没有记录该事实的度量。
我认为您的模型应如下所示:
employment_factless_fact (dim_emp_id, dim_org_id, dim_acc_id)
dim_employee (dim_emp_id,emp_id,...)
dim_organisation (dim_ord_id,org_id,org_name,from_date,to_date,...)
dim_account (dim_acc_id,acc_id,acc_name,from_date,to_date,...)
dim_x_id和x_id之间的区别在于dim_x_id是代理密钥,而x_id是业务密钥。 我的业务密钥永远不会改变,但是每次我的某些事情(即名字)改变时,我都会具有不同的代理值。 我仅使用此命名约定来说明模型,在实践中不推荐使用。
以下查询将为您提供在任何特定日期按Number的升序和VersionId的降序排序的员工变更
SELECT EH.*
FROM EmployeeHistory EH
INNER
JOIN (
SELECT OH.OrgId
, OH.Date
, MAX(OH.VersionId) AS VersionId
FROM OrganizationHistory OH
GROUP
BY OH.OrgId, OH.Date
) O
ON EH.OrgId = O.OrgId
AND EH.Date = O.Date
INNER
JOIN (
SELECT AH.AccountId
, AH.Date
, MAX(AH.VersionId) AS VersionId
FROM AccountHistory AH
GROUP
BY AH.AccountId
, AH.Date
) A
ON EH.AccountId = A.AccountId
AND EH.Date = A.Date
WHERE EH.Date = "2010-01-01"
ORDER
BY EH.Number ASC
,EH.VersionID DESC
帐户的子查询根据所有日期的VersionId获取帐户的最新记录(AccountId)。 组织的子查询对组织的作用相同。
希望这可以帮助..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.