我正在使用带有回写操作的 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 表中行的所有链接都被删除。
对我来说,这听起来很合理。然而,我的老板希望在创建新场景时在运行时创建额外的架构元素,以便场景数据存储在单独的表中并通过单独的多维数据集查看。这让我很反感,因为我很确定在运行时更改模式是一种反模式。