在数据仓库上工作,问题的一个合适的类比是我们有医疗保健从业者。医疗保健从业者拥有许多专业属性,并在众多团队和开放的临床领域工作。
例如,您可能有一名护士在多个团队中为儿童服务,作为救济/承包商/银行职员。或者您可能有一位新的合格医生,他在一个特殊区域做一般医学工作,等待该特殊区域的顾问资格。
因此,我们拥有开放的工作领域和众多团队,我们不能在我们的维度中拥有团队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
表OutriggerHealthProfessionalTeam:
HPKey (foreign key to DimHealthPRofessionals.Key)
Team Name
Team Type
Other Team Attribute 1
Other Team Attribute 2
表OutriggerHealthProfessionalAreaOfWork:
HPKey (as above)
Area of Work
Other AoW attribute 1
如果HP的任何属性发生变化,或者他们工作的团队或工作领域的组合发生了变化,我们需要在SCD中创建一个新条目,并使用它的支腿表来封装它。
我们在SSIS中这样做。
源数据基本上是一个HP表,其中包含主要属性,工作区域表,团队表和一对映射表,用于将当前工作区域映射到HP。
我有三个数据源,一个带来HCP信息,一个是所有HCP的工作区域,一个是团队成员。
问题是如何在所有三个数据集上运行以确定HP是否更改了属性,以及他们是否更改了属性,我们如何正确更新DIM和两个支腿。
有人能指出我的最佳做法吗?或者建议另一种建模这个维度的方法吗?
答案 0 :(得分:1)
不可否认,我可能不会理解这里的一切,但在我看来,这个例子中的关系应该被颠倒过来。将TeamKey
和WorkAreaKey
放在dimHealthProfessionals
中 - 这可以简化事情。
有了这个,你只需确保在dimHealthProfessionals
之前交付支腿。
将舷外支架视为自身的尺寸。您可能希望将dimHealthProfessionals
视为类型2维度,以正确捕获历史记录。
修改强>
考虑到团队与人之间是多对多的,事实更合适。 仅当一个人一次只能属于一个团队时,维度表中的列才适用。与工作区域相同。
答案 1 :(得分:1)
问题是如何在所有三个数据集上运行以确定HP是否更改了属性,以及他们是否更改了属性,我们如何正确更新DIM和两个支腿。
有人能指出我的最佳做法吗?或者建议另一种建模这个维度的方法吗?
我不确定我完全理解你的问题。如果您不确定更改检测,请使用包中的校验和。使用源中的数据构建临时表,然后通过计算两行的校验和并比较这些行,将每行与其对应项(通过业务键连接)进行比较。如果它们不同,则数据已更改。
如果您正在谈论历史维度层次结构中的级联更新(并且您可以在此上下文中将支腿视为层次结构),那么外键查找将自动查找DimHealthProfessionals中的较新条目(如果您有历史记录)(即validFrom / validThrough DimHealthProfessionals中的时间戳)。这些不同的外键导致不同的校验和。