根据可变日期查询数据仓库
Querying a data warehouse based on a varible date
我有一个维度 table 跟踪对类似于员工对象的对象的更改。但是,该员工有一个 "status"(待处理、活动、不活动等)以及每个状态的开始和结束日期,这些状态在源数据库的另一个 table 中进行跟踪。
状态更新次数没有限制。它可以在状态之间来回切换。
如果我想创建一个报告,例如在特定日期具有给定状态的员工,我该如何建模。如果我使用状态更改作为事实,我只会从员工那里获得状态更改日期的附加信息。
我是否需要创建一个每天根据当前员工记录和状态更新的事实 table?
或者我可以创建一个事实 table,其生效日期类似于维度 table 中的生效日期吗?
或者我在这方面偏离了方向并且应该以不同的方式处理它?
您必须决定的第一件事是,您是 对员工进行投票 还是获得 的 事件提要 ]员工状态变化.
第一个选项导致简化设计,您定期(比如每天一次)加载所有员工的员工状态并构建您的维度。
请注意,这是一个近似值,因为员工一天可以多次切换状态,但您每天只考虑一个状态。
table如下
employee_id,
validfrom_date,
validto_date,
status
validfrom_date
是提取日期,validto_date
是计算出来的。您丢弃所有状态没有变化的员工。
第二个选项更复杂,但产生的结果更准确。
您从源系统加载所有员工的所有状态更改,并带有准确的时间戳,因此每天可以涵盖更多更改。
可能的界面是:
employee_id, change_timestamp, old_status, new_status
请注意,old_status
是多余的,该值可用于检查接口是否一致。
最后的table和前面的类似,只是用了timestamp
,而不是date
。
employee_id,
validfrom_timestamp,
validto_timestamp,
status
同样,validfrom_timestamp
是来自接口事件的时间戳,validto_timestamp
是计算出来的。
在此设置中,建议定期检查维度的一致性。
问题 - 如果某些更改事件丢失,您将永远无法恢复它。随着时间的推移,您可能会累积此类错误。所以说每月检查一次维度的实际状态是否与源系统中的状态相匹配。如果不是你解决差异。
最后不要猜测这是事实还是维度table。在Kimball的模型中,它们之间没有严格的区别。
拍一张 Employee
table。如果您报告员工状态,则角色是 事实 table。如果你用它来加入其他事实 tables 角色是 dimension.
我有一个维度 table 跟踪对类似于员工对象的对象的更改。但是,该员工有一个 "status"(待处理、活动、不活动等)以及每个状态的开始和结束日期,这些状态在源数据库的另一个 table 中进行跟踪。
状态更新次数没有限制。它可以在状态之间来回切换。
如果我想创建一个报告,例如在特定日期具有给定状态的员工,我该如何建模。如果我使用状态更改作为事实,我只会从员工那里获得状态更改日期的附加信息。
我是否需要创建一个每天根据当前员工记录和状态更新的事实 table?
或者我可以创建一个事实 table,其生效日期类似于维度 table 中的生效日期吗?
或者我在这方面偏离了方向并且应该以不同的方式处理它?
您必须决定的第一件事是,您是 对员工进行投票 还是获得 的 事件提要 ]员工状态变化.
第一个选项导致简化设计,您定期(比如每天一次)加载所有员工的员工状态并构建您的维度。
请注意,这是一个近似值,因为员工一天可以多次切换状态,但您每天只考虑一个状态。
table如下
employee_id,
validfrom_date,
validto_date,
status
validfrom_date
是提取日期,validto_date
是计算出来的。您丢弃所有状态没有变化的员工。
第二个选项更复杂,但产生的结果更准确。
您从源系统加载所有员工的所有状态更改,并带有准确的时间戳,因此每天可以涵盖更多更改。
可能的界面是:
employee_id, change_timestamp, old_status, new_status
请注意,old_status
是多余的,该值可用于检查接口是否一致。
最后的table和前面的类似,只是用了timestamp
,而不是date
。
employee_id,
validfrom_timestamp,
validto_timestamp,
status
同样,validfrom_timestamp
是来自接口事件的时间戳,validto_timestamp
是计算出来的。
在此设置中,建议定期检查维度的一致性。
问题 - 如果某些更改事件丢失,您将永远无法恢复它。随着时间的推移,您可能会累积此类错误。所以说每月检查一次维度的实际状态是否与源系统中的状态相匹配。如果不是你解决差异。
最后不要猜测这是事实还是维度table。在Kimball的模型中,它们之间没有严格的区别。
拍一张 Employee
table。如果您报告员工状态,则角色是 事实 table。如果你用它来加入其他事实 tables 角色是 dimension.