|
数据分析讲堂
第三课 维度的内部结构
第十三讲 伪级别
一个带有名称的级别可以用一个基于非水平层次的工具来模拟,条件是该工具支持多层次,具体的方法是引入一个成员作为级别的根,然后让所有的成员都直接成为根的孩子,从而作为一个共同的级别。为了表示图3.13.1B中非水平的地理层次中城市级别的概念,我们需要引入一个名叫“城市”的根成员,然后将它作为成都、广州、沈阳的父节点。我将这种技术称做伪级别,因为它创建了一个带有名称的分组成员,虽然该层没有任何其他级别所具有的语义属性。图3.13.1B中就显示了一些伪级别的示例,这些示例可以作为A中带有名称的级别的对照。
 当使用伪级别的时候,要发现该级别中的成员和其他成员之间的关系,甚至寻找上一个级别或下一个级别都比较困难,因为工具没有提供对这种级别概念的直接支持。从一个级别到下一个级别之间访问成员也会显得比较困难。假设一个地理维度正在按照国家、省和城市建模,国家、省和城市作为响应级别的根成员。为了获得国家“中国”的所有城市,需要获得“既是成员城市的子节点,同时又是成员中国的子节点的所有成员”。对于工具来说,表达这些可能比较容易,也可能会比较困难。 理想的情况下,一个工具应该清晰支持非正常的层次和带有名称的级别,它们在语义上都应该可以被理解成级别。 第十四讲 排序
通过将排序的概念引入到兄弟关系中,我们可以对兄弟进行第一个、第二个和最后一个等形式的访问,许多OLAP产品都可以利用相对函数或者兄弟函数来调用非水平维度中的兄弟。对于这些类型函数的典型使用场合是在一些基于时间的比较中,例如,当需要对某个季度第一个星期和去年该季度第一个星期进行比较时。需要注意的是,这些基于排序的引用函数在未排序的非水平层次中是没有任何意义的。 例如,在图3.14.1中,如果开始点是Y3,Q2,M2,W2,你可以引用相同星期、上个月、相同季度和年,如下所示: Y3,Q2,M2,W2,up1,prev1,W2
或者相同星期和月,上一个季度,相同的年:
Y3,Q2,M2,W2,up2,prev1,M2,W2
或者是相同星期、月、季度,但是年份是上一年:
Y3,Q2,M2,W2,up3,prev1,Q2,M2,W2
 让我们看看这些语法,为了让这些引用的确起作用,需要从祖先中确定前一个成员。同时,这里的前一个兄弟的记号是一个级别的概念,因为假设每一个兄弟的度量都是相同的,这个假设在不带有类似级别条件的非水平层次上是不成立的。对于支持这种类型引用的产品来说,你或者需要指定距离根节点最近的节点,并且该节点的值不发生变化,或者可以让你引用层次中某级别的前一个元素。不管是哪种方法,其中的函数都是作用于水平维度中,而很难在纯的非水平维度中实现。
第十五讲 虚拟成员
就象非水平层次工具可以通过使用伪级别来提供某些水平的功能一样,纯粹的基于水平的工具也可以通过使用虚拟成员来提供非水平层次的建模。那么如何使用基于水平的工具来建立非水平的地理层次呢?最主要的是需要将每个节点和一个级别联系起来。当然,这里主要的问题是很多节点需要与不止一个级别关联起来。例如,商店报表直接关联到地区层次而没有经过城市成员。解决这个问题的方式是引入虚拟城市来表示那些原先没有城市的商店所对应的城市级别。具体请看图3.15.1。
在使用虚拟成员的时候需要注意的是,这些虚拟成员所指的级别是否在原数据中出现、是否被计算为一个成员、是否作为一个真正的成员可以显式看到,以及是否有相关联的数据。如果答案是否,那么虚拟成员的使用其实是将级别转变成一个带有名称的分组,因为级别的聚合不再一致。这并不总是个坏事情,但是需要知道具体的情况。
例如,如果你用一个基于水平的工具定义了一个非水平地理维度,该维度由商店、城市和省份组成,其中有些商店直接连接到省份,那么你就需要创建一些虚拟城市成员来代表那些没有对应城市的商店成员。但是,由于虚拟成员在其他情况下是不可见的,如果你统计城市的饿总销售额,那么总销售额中就不会包括这些虚拟成员的销售额,从而城市的销售额汇总将会少于商店的汇总。这显然违背了级别的特征。你不应该将该维度再看成是水平的了。但是,该维度不再是水平的并不意味着其中存在着错误。它仅仅表示了城市结构中某些特殊的情况,有些商店直接连接到了省份。

|
一共有 0 条评论