在数据仓库上工作,这个问题的一个合适的类比是我们有医疗保健从业者。医疗保健从业者具有许多专业属性,并在开放数量的团队和开放数量的临床领域工作。
例如,您可能有一名护士作为救济/承包商/银行工作人员在多个团队中从事 child 服务工作。或者,您可能有一位新的合格医生,他从事普通医学工作,正在某个特殊领域工作,等待获得该特殊领域顾问的资格。
因此,我们的工作领域和团队数量都是开放的,我们的维度中不能有团队 1、团队 2 等。其他属性也可能随着时间的推移而改变,例如基地位置(他们工作的地方)、主要团队和他们工作的区域。
因此,在 Kimble 之后,我选择了支腿:
表 DimHealthProfessionals:
Key (primary key, identity)
Name
Main Team
Main Area of Work
Base Location
Other Attribute 1
Other Attribute 2
Start Date
End Date
Table OutriggerHealth专业团队:
HPKey (foreign key to DimHealthPRofessionals.Key)
Team Name
Team Type
Other Team Attribute 1
Other Team Attribute 2
Table OutriggerHealthProfessionalAreaOfWork:
HPKey (as above)
Area of Work
Other AoW attribute 1
如果 HP 的任何属性发生变化,或者他们工作的团队或工作领域的组合发生变化,我们需要在 SCD 中创建一个新条目,并使用它的支腿表来封装它。
我们正在 SSIS 中执行此操作。
源数据基本上是一个具有主要属性的 HP 表、一个工作领域表、一个团队表和一对映射表,用于将当前的一组工作领域映射到一个 HP。
我有三个数据源,一个是 HCP 信息,一个是所有 HCP 的工作领域,一个是团队成员。
问题是如何遍历所有三个数据集以确定 HP 是否更改了属性,如果他们更改了属性,我们如何适本地更新 DIM 和两个支腿。
任何人都可以指出我对此的最佳做法吗?或者建议另一种建模这个维度的方法?
最佳答案
诚然,我可能无法理解这里的所有内容,但在我看来,这个例子中的关系应该颠倒过来。将 TeamKey
和 WorkAreaKey
放在 dimHealthProfessionals
中——这应该可以简化事情。
有了这个,您只需确保在 dimHealthProfessionals
之前交付支腿。
将支腿本身视为尺寸。您可能希望将 dimHealthProfessionals
视为类型 2 维度,以正确捕获历史记录。
编辑
考虑到团队对人是多对多的,一个事实更合适。
只有当一个人一次只能属于一个团队时,维度表中的列才合适。与工作区相同。
关于sql - 带有支腿的缓慢变化维度的 SSIS 种群,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4098098/