如何同时展现不同粒度的度量?

作者:姜玲
2007/4/11 17:02:13
本文关键字: ttnn 2006年07期

Nina 20060712

目前我遇到一個很大的問題,經過多方的請教,今天終於解決,多謝happycry。
兩個事實表:

我建了一個數據倉庫,有兩個事實表,這兩個事實表也是有對應關系的。

資料表

ID 總量 不良量 抽樣量
1 2000 5 100

體不良信息表

ID 個數 不良描述
1 1 毛寫
1 2 卡勾不良
1 2 多漆

如果就讓這樣建立cube,資料表中的數據可以正常讀出來,但是,具體不良信息表就只能讀一個總數:出現如下情況:

一開始就只是在緯度設計裡面做調整,無論怎麼調整都不行,後來,在happycry的提議下,新建一個相關的view,沒想到就解決了,真好,呵呵

在這裡再次感謝happycry!!


20060712
这个问题一开始并不知道是指什么,后来渐渐明白。它可以表述成为——"如何同时展现不同粒度的度量?"

粒度是由事实表的维度确定的,例如在Nina提到的两个表中,资料表的粒度由ID确立的,指的是"一批检验的"。而具体不良信息表的粒度是由ID和不良描述两者确立的,含义是"一批检验中不同不良情况的"。后者的粒度要比前者更细一些,因为多了一个"不良情况"。

展现的时候,却希望同时将两种不同粒度的度量展现出来,假设汇总一个数据表为(ID、不良描述、不良量、总不良量),不良量是依附ID和不良描述,而总不良量却只是依附ID。如此,总不良量肯定是有冗余信息的,例如对于ID=1的情况,总不良量=5,根据3种不良情况的不同,就会出现3次。

这不是一个符合第三范式的表,但如果是为了做展现,到可以姑且一试。并且还得注意那个总不良量是不能做sum操作的。

这样的分析结果,计算每种不良情况的数量占总不良数的占比,当然很方便。不过其实还有另外的方法得到这种占比。

因为注意到sum(不良量)=总不良量,如果是这样的话,其实不必将总不良量在底层数据表(或视图)中计算出来,而是让报表工具来代替这种计算,大多成熟的报表工具都有此功能。譬如在excel的旋转透视图中,如下图:


列上第二个字段"不良数占比"就是通过右键菜单的"字段属性>数据显示方式"下拉框中选择"占同列数据总合的百分比"。而至于总计值,5,只在总计栏中出现一次而已。

当然,这种方法只适合于sum(不良量)=总不良量的情况,如果那个同时需要展现的粗粒度的度量为"抽样量",这个值跟不良量没有计算关系,可能还是得在底层数据表中将这两种不同粒度的度量整合在一起。只是不知道,将不同不良情况的不良量跟抽样量相比有没有业务上的意义。

Nina 20060712

對,你說的沒錯,比我自己說都要清楚,事實上我自己都不知道怎麼去說,專家就是專家,因為我對術語還不是很明白呢

抽樣量是什麼意義的,在不良看來,只是業務系統紀錄的一個值而已。

Goldenfish 20060713

这个问题是指标并非与所有维度关联的情况。在本例中,是总不良量与“不良描述”这个维度没有关系,或者说事实表中没有关于总不良量针对不良描述维度的取值(或,在同一ID下,无论不良描述维度取值是什么,总不良量总是一个固定值)。

Cognos对这种情况有Allocation机制加以解决。

Allocation Description Transformer automatically allocates a measure to an entire dimension when the source of the measure does not reference that dimension. By default, Transformer allocates the measure value as a constant throughout the dimension. You can change the default to N/A (do not allocate) or to By Measure (proportionally allocate, based on values in another measure).

如果有“抽样量”这种指标与“不良描述”维度无关,则可以缺省使用常量,即无论该维度是什么,都取同样的在ID下规定的抽样量的值;也可以使用N/A(我没试过,猜测显示结果是N/A);也可以指定按另一个指标进行分配,例如“抽样量”按“不良量”同比例分配。

同道理,Cognos还提供针对维度层次的Allocation。例如计划值只是到年,实际销售额是按月,则在时间维度上,在月的粒度上查看计划值,也能以常量(看到的是年计划的值)、N/A、同比分配的方式查看。

goldenfish举出cognos的例子,我想大多工具都已经有处理这些问题的方法。深入探讨,发现还可以得到更多的结论。

还是粒度的问题。将两个不同粒度的事实表关联起来分析,怎样的分析才有效,才不会展示无意义或错误的数据?

一开始我有些认为这是个"度量对维度的依赖"问题,参见( http://happysboy.blogchina.com/104598.html ),原来还是有些不同。

要明确这"不同粒度",为了表示方便,用D表示作为逻辑主键的维度字段,称为"主键维度",用A表示非逻辑主键的维度字段(一般称为"属性",依赖于主键,称为"属性维度"),用M表示度量字段。考虑两个表:

T1(D1, D2, M1)
T2(D1, A2, M2, M3)

T1的粒度由D1,D2,D3确定,T2的粒度由D1确定,T2的粒度比T1粗。那Nina的例子来说,借用实际的例子。T1是一个不良信息表,保存每次检验中,不同不良原因的数量。D1为检验的批号,D2为不良原因;T2是检验表,保存每次检验的信息,诸如抽样数、不良数、厂商、客户等。D1为检验的批号,A2为厂商,M2为抽样数,M3为检验中的不良数量。

(这样的设计多少有些奇怪,一次检验必定是针对厂商的,但在T2中,却只给出这个厂商总的不良数量,至于不同不良原因的数量,却在T1中,那里却无法区分到厂商。这是设计的问题,有时候会不得不出现这样的情况,这里姑且不论,还是来看看这两个不同粒度的表如何关联起来做分析。)

假使将这两个表用D1关联起来,做成一个视图,结构为V(D1,D2,A2,M1,M2,M3),这是一个按照细粒度表T1为准的视图,那么M2, M3针对不同的D2值(可以理解为不良原因),是重复冗余的。如图0所示,基于这个数据,来看看不同的展现结果。为了称呼方面,此处将出现在界面上的维度或者作为过滤条件的维度叫做"分析维度"。

[图0:附件-gran0.jpg]

第一种情况,将D1、D2、A2都作为分析维度,参见图1,这样的结果能说得过去。但要注意由不良原因"多漆",I002,以及抽样数确定的单元格中那个200指的是I002检验时的200,虽然这本身不是非常合逻辑,但至少这个200是能够解释的,下面都有同样的问题。所以,这张表可以视为正确。

[图1:附件-gran1.jpg]

第二种情况,将D1、D2作为分析维度,参见图2。这个结果也不错,从不同检验批次,看不同不良原因的数量,并且可以看这些数量在每批检验的抽样和总不良数的对比。后两者针对不同不良原因是固定相同的。

[图2:附件-gran2.jpg]

第三种情况,将D2、A2作为分析维度,参见图3。这个报表展现不同厂商、不同原因的不良数、抽样数和检验不良总数。看不良数,没问题,但看这个抽样数和检验不良总量数,就有些奇怪了,它们对应的维度值是"不圆"和"神奇",这是什么意思?其实它是依赖检验批次的,是指I003次检验,抽样了20,其中不良的6个。但"不圆"原因只出现在一次检验中,那次的抽样数为20而已。因此在这个报表中,没有将检验批次作为分析度量,让数字有些难以理解。

[图3:附件-gran3.jpg]

第四种情况,仅将D2作为分析维度,参见图4。表示不同原因的不良数、抽样数等。同样,因为"不圆"原因只在I003次检验中出现,因此不圆那一行的抽样数20,检验不良总量6也是不好理解的 。其实,如果论抽样,也应该是320个(100+200+20)。

[图4:附件-gran4.jpg]

第五种情况,仅将A2作为分析维度,参见图5。表示不同厂商的不良数,抽样数。显然,抽样数、检验不良总量是重复汇总了。

[图5:附件-gran5.jpg]

第六种情况,将D1、A2作为分析维度,参见图6。因为A2是唯一依赖D1的,所以和单独以D1作为分析维度没什么区别。但明显,其中的抽样数和检验不良总量,也是因为忽略了不良原因,造成重复汇总。

[图6:附件-gran6.jpg]

从上面六种情况可以看到,第一、二种情况的报表是可以理解的。第三、四种情况,出现在粗粒度表种的度量数字不能理解。第五、六种情况呢,干脆就是数据重复汇总,更加不能容忍的。

为此,可以基本得出一些结论,当粗粒度表T2和细粒度表T1关联起来做分析展现时:
1、粗粒度表中作为主键的维度需要作为分析维度,否则依赖次维度的度量虽然不会重复汇总,但会变得不能理解。第三、四中情况既是如此。

2、细粒度表中作为主键的维度,但并非粗粒度表中主键维度的,需要作为分析维度。因为少这种维度,就会发生汇总,而这个汇总对于粗粒度的度量值来说,就存在重复汇总的错误。第五、六种情况就是如此。)

如此看来,最终的结论是为了让报表数字能够理解,并且不会发生重复汇总。细粒度表T1中所有主键维度都必须作为分析维度。属性维度则是可选的。

责编:姜玲
vsharing 微信扫一扫实时了解行业动态
portalart 微信扫一扫分享本文给好友
著作权声明:kaiyun体育官方人口 文章著作权分属kaiyun体育官方人口 、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。
畅享
首页
返回
顶部
×
畅享IT
    信息化规划
    IT总包
    供应商选型
    IT监理
    开发维护外包
    评估维权
客服电话
400-698-9918
Baidu
map