Project REAL分析服务技术探讨
来源: 数据库 SQL Server | 作者: landluo | 发布: 2009-7-08 10:09
半可加减的存货度量
在Store和DC存活数据中有一个出名的问题。一般,当我们处理像销售总数和销售数量这种多维度的数据时,度量都时可加减的。为了得到WA地区的销售总数,你所要做的就是把所有城市的所有仓库的销售总数加起来。我们把这种计算叫做可加减的(Additive)。SQL Server 2000分析服务支持四种可加减的操作,分别是Sum, Count, Min和Max。这样,平均值就能通过Sum/Count来实现。
例如,图23中Sale Amt 列中的数据代表了Kirkland,WA仓库在某个时段的销售总数。Sum就是为计算Sales Amt的集合函数。

图23:Kirkland仓库销售和存货数据
注意,每周的销售总数是从每天的总数计算获得,每月的总数是从每周的总数上计算获得。因此我们称总销售是一个可加减的度量。这种方法对On-Hand Qty度量适用么?显然不行。库存的数量、订单数量看上去是一些半可加性的度量。这些需要汇总的值都是基于某个时间段的一个时间点,而不是基于总数,也不是基于最后的值(或者是一些其它基于半可加性的计算)。在这个例子中,在周六统计库存的详细信息。如果在月初,Kirkland仓库书本的数量是10000,库存需要在每周六的时候都保存相同的数量(10000)直到月底(我们假定每周中每售出一本书,都会在周五得到补充),那么我们在月底的时候,存货是40000(总数)还是10000(最后的存活)呢?
为了解决这个问题,我们使用了SQL Server 2005分析服务中一个新的半加性集合函数。由于我们已经具备时间维度,我们所需要做的仅仅是把集合函数从Sum改成LastNonEmpty,这样就能实现我们预期的功能。
由于SQL Server 2000分析服务仅支持可加减的度量,原来在Project REAL设计的复杂计算都必须手工的来完成。现在在SQL Server 2005分析服务中,已经支持半可加性的操作。我们所要做的只是改变集合函数。如图24所示。

图24:为度量指定集合函数,可以设置成可加性的(左图)或者为半可加性的(右图)
最佳实践:如果你使用半可加性的度量,请确认Cube包含的维度不超过一个。
使用半可加性的度量,有一些约束。首先,你必须有一个被标识为Time类型的维度用来使用半可加性度量。如图25所示。当它运行的时候,时间智能向导(Time Intelligence Wizard)将会合适的设置属性和维度类型属性。如果你通过标准的维度向导(Dimension Wizard)创建你自己的时间维度,你必须再手工的设置适当的类型属性。

LastNonEmpty函数不能计算所有类型的维度。它只能完成基于时间维度的计算。而且,在Cube中智能包含一个时间维度。如果在你的cube中包含多个时间维度,系统会找到第一个符合要求的去执行。这虽然不是一个必要的、优秀的、可预言的选择,但事实上,它就是这么做的。
结论
这份白皮书提供了一些关于SQL Server 2005分析服务(Analysis Services)的技术性讨论,主要是关于分析服务的设计和Rroject Real项目中的一些实际应用。我们回顾了许多很好的实践和资料,这些都是在Project REAL项目中积累下来的,并提供了各种不同类型对象的信息,例如数据源、数据源视图、维度、层次、属性、度量组和部分。
若要回顾用来同步关系型分割表模式和分析服务(Analysis Services )度量组分割表模式的SQL Server 2005集成服务(Integration Services)程序包,请参见附录A。
更多内容:http://www.microsoft.com/sql/
共20页: 17 下一页
【内容导航】
原文:Project REAL分析服务技术探讨(17)
