我正在使用带有回写操作的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链接提供便利。
现在已经创建了场景并且它的初始状态与提交状态相同,用户可以开始进行更改。更改将作为额外的当前行存储在SCD表中,其中IsCommitted = False。进行更改时,将更新方案桥表,以便将链接删除到对象的已提交版本,现在链接到对象的新备用版本。提交方案时,将结束旧的已提交版本,提交当前备用版本,并删除场景及其与SCD表中各行的链接。
对我来说,这听起来很合理。然而,我的老板想要在创建新场景时在运行时创建其他架构元素,以便场景数据存储在单独的表中并通过单独的多维数据集查看。这让我感觉不对劲,因为我非常确定在运行时改变模式是一种反模式。
答案 0 :(得分:1)
虽然理论上可以在运行时以编程方式重新生成Analysis Services多维数据集的模式,但您仍然必须等待处理发生 - 这对于小型数据集来说可能非常快,对于大量数据来说可能非常长。但是,在实践中,Analysis Services旨在具有相对静态的架构。您可以通过添加数据和重新处理多维数据集来处理其他方案 - 即使通过增量更新也可以使其更快。预算和预测应用程序通常采用以后的方法 - 通过数据更改添加新方案,而不是模式更改。