《Microsoft SQL Server 2008 Analysis Services Step by Step》学习笔记四:创建高级度量和计算(上)
SQL Server 2008中SQL应用系列及BI笔记系列--目录索引
导读:本文继续介绍创建高级度量和计算的基本技巧。由于有朋友提出前面三篇内容太长,故本文[创建高级度量和计算],分解为七个小节,方便大家阅读,也便于自己查找复习。
本文末尾提供两个项目源码:AdventureWorks_BI_Begin3和AdventureWorks_BI_End3,顾名思义,开始和完成。另外,包括数据库文件SSAS2008SBS_Data,请读者自行修改数据源ds的连接串。
本文将包括以下内容:
■1、使用:累加、伪累加、无累加、半累加的聚合函数创建度量
■2、使用元组(tuples)和MDX函数识别和导航cube中的单元格
■3、使用MDX表达式创建计算成员
■4、使用MDX表达式应用条件格式
■5、理解计算优先权
■6、使用计算脚本语句应用一个MDX公式到一个Cube
■7、创建KPIs(key performance indicators)
项目结构如下:
1:使用聚合函数
在汇总统计时,你可能需要面对多种情况,比如按人、按部门、按月、按天来统计销售收入。在Analysis Service中,你可以使用四种聚合函数来满足这些业务需求。
分别是:累加、伪累加、无累加、半累加( additive, pseudo-additive, non-additive, semi-additive)。
邀月特别声明:微软官方网站对“semi-additive”的翻译,确实是少儿不宜。(http://msdn.microsoft.com/zh-cn/library/ms175356.aspx)
当一个度量使用累加聚合函数时,父层成员的值等于它所有子成员的值的总和;使用伪累加时,它不执行累加,但你可以通过应用聚合规则到成员的Children值决定父维度成员的值。例如,一个度量使用Max函数,父值等于所有子值的最大值。由于累加和伪累加聚合函数允许你从子值计算父值,如不检查任何其他数据,这些聚合函数提供最快的查询性能。“伪累加”一词还未被广泛认同,但本书仍然使用它。
当一个度量使用非累加聚合函数时,父成员的值不能被从其子成员中派生出来,两个非累加的聚合函数是None和DistinctCount。 None聚合函数不创建任何值。如果一个度量使用DistinctCount聚合函数,父成员的值不是总和,平均值或它的子成员的最小值。它可能是是子成员的最大值,但并不确定。例如,一个季度的不重复客户数并不是这个季度月份客户数的总和。如果没有DistinctCount汇总这些值,那么任何一个客户可能在汇总表中出现在一个以上的月中而被重复计算。相反地,客户的季度列表必须被创建并计以得到这个季度的值。正是因为DistinctCount聚合函数需要在被计算的属性的颗粒度上进行计算,因此,它的查询速度最慢。
当一个度量使用半累加的聚合函数时,父成员的值等于子成员的值的总和,除非成员在时间维度上。在时间维度中,父成员的值等于它的一个子成员的时间点。例如,你想度量一个月中贷方余额的起点,你可以使用聚合函数的FirstChild函数,即这个月的第一天每位客户的贷方余额的总和。如果一个季度,将是每季头一个月的总和。(http://technet.microsoft.com/zh-cn/library/ms145524.aspx)
附: SQL Server Analysis Services 官方教程(http://technet.microsoft.com/zh-cn/library/ms170208.aspx)
源码下载:
end3,将在本系列的7/7完成后提供。