Welcome

首页 / 数据库 / SQLServer / Project REAL分析服务技术探讨(4)

Project REAL分析服务技术探讨(4)2007-12-27在下面的五个章节中,我们比较和对比了五种使用SQL Server 2005分析服务来模型化实体的方法。我们发现,没有一种简单的方法能够实现所有环境中的关系型模型化。我们发现最好根据运行时可用的存储、所允许的计算来选择使用的方法,从而实现更有弹性的厂商分析模型。

方法#1- 创建单独的真实维度

我们实现的第一种方法是创建了五个真实维度(每个都对应一种厂商类型),并从Item维度表中加载。这种技术很直接,并且很容易实现。然而,它存在一些缺点。首先是它在Cube中带来了一些额外的复杂性。终端用户不得不多使用增加的五个维度。并且在维度存储上也增加了五倍以上(因为每个维度完全不依赖于其它的维度)。最终要的缺点是这种技术不可能实现交叉的厂商分析。例如,考虑“Abrams, Harry N., Inc.”这个厂商。因为Abrams有五个成员,因此无法通过厂商直接的来分离,除非你假定,Abrams在五个维度中都有相同的拼写,并且确保在所有五个维度中都选中这个相同的切片。

方法#2 – 使用属性层次来代替物理维度

这个方法相比于前面的方法,使得货品和厂商之间的关系更加密切。在这种方法中,我们去掉了第一种方法中使用的物理维度,而是在Item维度上添加了五个属性或者用户定义的层次。这五个新的Item层次是:Item.Return Vendor,Item.Purchase Vendor,Item.Original Purchase Vendor,Item.Source Vendor和Item.DC Vendor。使用这种方法,有以下几个优点。首先,因为五个属性是从一个属性键下构建的,因此只需要一个存储位置。第二,因为我们将五个维度转换成五个属性层次(或者用户定义层次),因此这降低了最终Cube的复杂度(维度)。对于一些终端用户,这点很重要,这能使得他们在Cube之间导航更加简单。然而,这种方法也不允许覆盖多个厂商的分析。

方法#3 – 为Vendor和Vendor类型创建多对多的维度

第三个方法是在三个维度(Item, Vendor和 Vendor Type.)之间创建一个多对多的维度,这是一个不常用的方法,这会带来大量的成本。Item维度并没有任何变化。Vendor维度需要在五中类型的厂商上将所有可能的厂商合并(并去除重复的项)。最后,Vendor Type已经有五个成员,分别为Return、Purchase、Original Purchase、Source和DC服务。一旦维度就绪后,就创建一个度量组,用来表示每个Item和它的五中类型。度量组看上去的效果如图21所示。

图21:一个在Item、Vendor、Vendor Type维度表之间多对多的维度

如同你看到的一样,这个度量组确实非常大。在完整的维度中,我们会有超过六百万个项货品,每项有五种类型,以及约4万个厂商。这意味着,在这个多对多的度量(在Cube设计中被称为Item Vendor)组中,我们会有超过3千万项记录。

这个方法的主要缺点是为了完成对厂商的分析,你必须构建一个在正被分析的分割表数据之间的百万对百万级别的交叉连接和一个多对多的度量组(也包含几百万条记录)。这意味着,在第二种方法中只需要几秒的查询,在这种方法中会慢上许多(例如几十妙)。但是,这种方法也带来了巨大的好处。现在,你可以用一个独立的成员表示一个成员。这能够让成员更容易被区分,并能够直接的比较。如图22所示。

图22:通过Vendor Type查找一个Vendor的销售情况

这在其它技术中是不可能实现的,除非你手工的把五个切片设置成相同的值。