就我看到2003年普遍上的移动经营分析项目,要得到客户需要的查询、报表或者其他需求时,往往是用事实表一点一点地算出客户要得指标,然后sum,count后放进前端客户需要看的汇总聚合表。这样做的错误很多书上已经说了,至于为啥有问题,显然客户前端的需求是多变的,他们报表或者其他应用所要的指标是经常被使用的,如果每次都做一个这样的sum,count,系统的资源是被浪费的,而且维护量很大,每次指标调整,每一个汇总程序、相关汇总表们全部要改。
这就是今天突然想到要提一下indicate字段的原因。一般优秀的DW项目,处理客户需要的指标的时候,是在某个维表里加indicate字段,一些复杂的算法,只要有人知道其计算方法,就能加在一个维表一个对应的indicate,所以不要怕维表是动态维,也不要怕业务需要时增加一个新的复杂维表。试想你在DM那边改动那么大,而且每次重新计算是面向事实表的汇总,哪个效率高,哪个可靠性高,哪个扩展性强呢?
这就说到前面提到的conform
table了,如何解释conform,就是多个分表聚合到一个事实表,适应各种应用。到DM层后,对于报表和查询的应用需求,就可以通过conform
table和相应的维表关联形成一个summurry
table,这个时候的维表对应的解释信息都在这个表里,当然indicate的解释信息也在里面,客户要查询具体信息,那不是很爽了么,也许光这点就比花哨的OLAP还有用。当然作为分析,还是要靠报表和OLAP,以及DM,至于这么丰富的信息如何挖掘知识,那是后话,不在此讨论中。
如果诸位从这些分析里在项目实施中得到启发,请给我们回复。
再说一下设计,不仅仅是了解业务后,分了几块数据库,有ODS,有DW,有DM,再data
model,然后该怎样选用工具实施,而是从宏观架构设计到细致建模。业务了解清楚后,你可以选择最后汇总来计算各个指标,你也可以选择在仓库的前面的维表里去解决这些问题,你可以很粗鲁地直接将一大块事实表ETL放到DM,然后找数据库优化、code优化等去优化ETL,你可以深入挖掘维表中对该行业有价值的指标,更可以不用分析客户数据中潜在的指标,而是等待客户给你答案。至于经验和教训,就不用多说了,那现在还需要优秀的设计作项目前提么?
我今天看到itpub.net的帖子"浅谈数据仓库"http://www.itpub.net/496965.html
突然想起忘说一个主题:indicate
....
当然,现实中可能是更复杂的indicator,比如客户想要一种客户类型,这种客户必须是集团客户,必须是头衔为经理,而且信用度大于100的,大客户经理也许想对这些集团客户进行特殊照顾,于是想在系统中查寻。那么你可以有个大客户维表,至少含有以上信息,那么根据以上条件,开一个indicator字段,进行判断。之所以我说尽量在维表中定义,我觉得这样更符合中国国情,客户对一些特殊需求的定义往往可能改变的,不同部门的定义也不同,如果你放在事实表进行indicator字段的转换的话,那么对ETL性能是一个挑战。
传统的KPI大家都知道了,我这里强调的indicator是对一些业务上的解释性标示。在Kimball的life
cycle second edition里有一些例子,比如说vacation
.....之所以我说尽量在维表中定义,我觉得这样更符合中国国情,客户对一些特殊需求的定义往往可能改变的,不同部门的定义也不同,如果你放在事实表进行indicator字段的转换的话,那么对ETL性能是一个挑战。