日历

2008 9.7 Sun
 123456
78910111213
14151617181920
21222324252627
282930    
«» 2008 - 9 «»

日志分类

文章搜索

日志文章

2008年01月17日 11:28:55

数据分析讲堂

数据分析讲堂

第四课 设计和实现OLAP模型的实践步骤

第六讲 公式

影响你需要建立分析的一个主要因素是:你自己是最终用户,还是你为最终用户建立执行他们自己分析的系统。如果你在为其他人建立系统,你的目标应该是建立一个方便执行分析的环境:如果你是最终用户,你在一些基本的、预定义分析之上仍然需要执行动态即时分析。不管哪种方式,你都需要执行基本的聚合和分析。
多维建模的一个关键模块是公式或派生的定义,尤其是聚合公式。一个公式可以简单到单个维中单个变量中的两个数字的简单求和,也可以复杂到一个含有级连、条件、加权方程的多立方体系统。对大多数应用来说,大部分公式是基本的求和与平均。图4.6.1显示的MTS视图包含了一个跨3个层次维计算叶子等级数据聚合的简单公式。

对模型来说并不存在优先级计算顺序。如你在前面见到的,你需要知道你想要计算什么,才能决定公式中各个部分的先后顺序。因此,虽然你通常会在其他类型的计算之前先进行聚合,并且它们在下面的内容中也是首先出现的,但在排序上仍然存在很多例外情况,我甚至不能称其为经验法则。不管怎样,如果你认为应该在聚合之前执行叶子等级的派生,你应该小心从事,不是所有的产品都支持叶子等级计算。
1.
聚合公式
在建立逻辑模型时,你需要鉴定聚合所用到的所有维。除了场景(和变量维中的所有变量),大多数维,像产品、客户、时间、地理和部门,都具有层次结构并需要执行简单的聚合操作。你可能会在OLAP工具中定义或发现一些典型的聚合声明,它们可能会把所有的产品汇总到它们的父节点。回想到派生是数据的属性而不是成员,你应该意识到这实际意味着所有的数据跨产品进行汇总(如果没有重复的公式)。
既然OLAP模型可以变得相当复杂,我推荐增量式验证公式(如果需要,可以对它们进行调试)的方法。为达到此目的,我建议在输入更奇特的公式之前,先对基本的聚合进行彻底检验。一个完成此工作的好方法是,沿着单纯而简单,没有附加公式,只包含聚合公式的维计算聚合。
2. 基本变量和其他聚合公式
确保基本聚合公式正常工作之后,就可以进一步添加作为核心模型部分的公式了。这里的核心模型指的是具有如下特征的数据:
l       大多数用户都要看的
l       最频繁被查询的
l       你最先交付的部分
l       需要进一步分析
典型地,这些公式出现在变量维内,如比率、乘积、差分等。它们也常出现在时间维,如计算周期之间的比率。
除非你的公式是在单维中复杂的公式,你可能不想一维一维地测试它们,而只是确认语法的正确性和它执行了你想让它执行的。当然,在任何地方出现问题都是可能的,但更可能的情况是出现在一个维的公式与另一个维的公式交叉时。
3. 隶属于维德函数和在规则/脚本中的函数
决定是把函数配属给维的成员,还是在独立的计算规则或脚本中,是与你所使用的产品相关的,但在所有的产品中都存在。如果你想表达的计算是汇总,那么选择是任意的,因为所有的产品都支持在层次结构上的汇总,并且主要是基于效率的考虑。如果计算是比率,或者要用不同的操作符号涉及好几个项,那么与脚本比起来在维结构中可能不大好表达。
4. 有效的数据引用
写公式的时候要注意在所有层次结构上有效的引用。例如,在另一维是地理位置的两维立方体中的公式Margin = Sales – Cost就涉及非层次结构引用。在商店等级中,商店的利润用商店的销售和开销来计算;在城市等级中,用的是城市的销售和开销来计算。你也应该清楚什么时候建立对应层次的引用——使用任何命名等级,如城市或品牌。
考虑公式Contribution = Sales / ( Sales,Geog.parent )。在商店等级中,城市下面是商店的层次结构,此公式计算一个商店的销售与城市所有销售的比率。在概念上,这是很直接的,但除非你以前写过OLAP应用,这很容易引起错误。比如,在存在不对称层级结构情况下,一些地方的商店连到城市,但在另一些地方是商店到州或地区。如果你想在商店等级计算商店对城市的贡献度,那么在直接连到州的商店你可能得到错误的结果。(正确答案应该是商店相对其所属城市或州的份额)在这种情况下,你要么在你的地理层次上添加城市节点,要么定义计算贡献度的条件公式。
5. 计算优先顺序
只要源于不同维的公式在顺序不同时会产生不同的结果,决定计算先后顺序的需求就会产生。常见的情况是当一个维德总和公式与另一个维的比率公式交叉时,比率的总和与总和的比率是不相等的,这里很容易产生错误。有利的一面是,当错误发生时,数字通常会产生巨大的偏差,因此在执行人工检查时很容易被识别为错误。你应该先在试验计算中查找错误,检查应在一定范围内聚合的值。例如,雇员平均年龄应该在1865之间,如果是2500则显然是一个错误。通常大多数的错误是由于不正确的优先顺序引起的,常见的是需要求平均的变量成了求和。
很多运算组合在运算的优先顺序不同时会有不同的结果。与聚合函数通过附属到聚合维德公式给出的简单聚合测试不同,在存在运算优先顺序的情况下,选择聚合函数也是要考虑的内容,我建议当存在疑问时,从个数较少单元的计算开始。
6. 公式复杂性
与出现在非异常立方体中的公式优先级问题不同,公式复杂性通常由立方体中存在规则定义的已知异常所引起。例如,股票的市场价值对于一个私人投资与一个如道琼斯工业指数或S&P500这样的工业组合是不同的。某个经理可能需要一个流动指标低于特定等级时被告警。向客户收费的价格可能是对此客户累计销售的函数。对于一些变量的缺失值,可能需要缺失值存在性的检验来保证它们能正确地组合或聚合。奖励基金可能只有当那些实际销售超过计划销售一定数量时才存在,一些特定维的成员可能有些属性值不能应用到此维的其他成员。
  公式复杂性存在很多种类型,这里出现的错误通常比公式优先级引起的错误更加细微,因此你应该手工进行验证所有公式复杂性都是正常工作,至少进行几个实例的验证。

类别: 无分类 |  评论(0) |  浏览(1795) |  收藏
发表评论