类型 3 缓慢变化的维度,用于可变数量的替代现实

Posted

技术标签:

【中文标题】类型 3 缓慢变化的维度,用于可变数量的替代现实【英文标题】:Type 3 Slowly Changing Dimension for a Variable Number of Alternate Realities 【发布时间】:2012-06-29 14:07:57 【问题描述】:

我正在设计一个使用带有回写操作的 SSAS 的自定义 BI 应用程序。基本上,用户想要分析他们的销售代表和区域的当前状态,在“假设”场景中调整区域边界和分配,然后如果他们喜欢该场景的外观,则提交更改。每个用户可以有许多不同的场景来展示他/她的老板,当一个场景被批准时,这将成为销售组织的新当前状态。我将大量使用 ROLAP 和 HOLAP 的组合来实现这一点。

我的老板和我在如何实现场景功能方面存在分歧。他对 SSAS 的工作原理进行了行政级别的总结,并利用了他多年构建数据库应用程序的经验,而我已经用 SSAS 进行了数周的试验并阅读了 Kimball 圣经,但我对多维建模仍然相对较新。我只需要一个知道他们在做什么的人来批准、拒绝或调整我的想法,如下所示。

我有许多类型 2 SCD 表,大致如下所示:

Create Table SlowlyChangingDimension
(
    SurrogateId Int Identity(1,1) Not Null,
    NaturalId NVarChar(50) Not Null,
    BeginDate DateTime Not Null,
    EndDate DateTime Not Null,
    IsCurrent Bit Not Null,
    IsCommitted Bit Not Null,
    -- Data columns
    Constraint PK_SlowlyChangingDimension Primary Key Clustered (SurrogateId),
    Constraint Ck_SlowlyChangingDimension_DateRange Check (EndDate > BeginDate)
)

我通过适当使用 BeginDate、EndDate 和 IsCurrent 列来维护历史数据。当新数据进来时,我结束对象的当前版本并创建一个新的当前版本。

现在要处理场景,我想添加一个场景表,我将使用它来标记 SCD 中对象的特定版本。创建新场景时,我将在 SCD 中使用该场景标记每个对象的已提交版本。由于提交的版本可以以这种方式存在于多种场景中,因此通过桥接表可以方便地进行M2M链接。

既然已经创建了场景并且它的初始状态与已提交状态相同,那么用户可以开始进行更改了。更改将作为 IsCommitted = False 的附加当前行存储在 SCD 表中。当进行更改时,场景桥表将被更新,以便它删除到已提交版本的对象的链接,现在链接到新的替代版本的对象。当一个场景被提交时,旧的提交版本被结束,替代的当前版本被提交,场景和它与 SCD 表中行的所有链接都被删除。

对我来说,这听起来很合理。然而,我的老板希望在创建新场景时在运行时创建额外的模式元素,以便将场景数据存储在单独的表中并通过单独的多维数据集查看。这让我很反感,因为我很确定在运行时更改架构是一种反模式。

【问题讨论】:

您是否曾决定以下给出的答案是否足以作为可接受的答案?你最终决定做什么,结果如何? 我没有。我们决定不使用 SSAS,而且该项目不久之后就被搁置了。 【参考方案1】:

虽然理论上可以在运行时以编程方式重新生成 Analysis Services 多维数据集的架构,但您仍然必须等待处理发生 - 对于小型数据集来说这可能非常快,对于大量数据来说可能非常长。然而,在实践中,Analysis Services 旨在具有相对静态的架构。您可以通过添加数据和重新处理多维数据集来处理其他场景 - 甚至通过增量更新来加快速度。预算和预测应用程序通常采用后一种方法 - 通过数据更改而不是架构更改添加新场景。

【讨论】:

以上是关于类型 3 缓慢变化的维度,用于可变数量的替代现实的主要内容,如果未能解决你的问题,请参考以下文章

kettle学习之--缓慢变化维度(SCD)

如何在所有开始日期列排序的三个缓慢变化维度之间执行连接?

缓慢变化的维度 - 准确的 SQL 查询实现以检索正确的数据

hive数仓中缓慢变化维

如何实现 SCD 类型 3

关于缓慢变化维