1

我正在使用带有回写操作的 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 表中行的所有链接都被删除。

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

4

1 回答 1

1

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

于 2012-06-29T18:15:22.417 回答