经常看到有人对qlikview的model的疑问或者一些组合键或者成环的一些问题,所以下面就探讨一下qlikview建模。
业务背景:有3张事实表分别为采购表、库存表、销售表,4张维度表分别为日期、产品、供应商、客户,我们现在需要搭建模型。
初始模型:直接将所有的数据表load至qlikview,字段内容就不做解释了,都非常简单,如下图:
这个时候就产生了$syn键,也称组合键,这个字段名称相同就自动关联是qlikview的特性,这里就不做太多其他解释,那么这个模型是可以可以被优化的,当然了这个模型不优化也是可以的,但是不是很好的习惯或者说对性能或者其他方面有些影响,所以在这里都不做探讨是不是应该被优化,我只是建议优化,所以下面就探讨如何优化。
优化的重点还是在组合键,我们从模型中看到$syn table中的公用键是产品ID和日期ID,所以我们要优化的就是将$syn table优化为Linktable(这里不对linktable做太多解释),所以我们需要把每张表中的产品ID和日期ID抽象为一个key,即如下:
因为事实表中的产品ID和日期ID都被抽象了,所以这个时候事实表是无法关联日期表和产品表的,下面就开始构造Linktable,代码如下:
这里大概解释一下这些代码的思路,构造linktable的目的就是不让两张或者以上的表公用两个以上的字段,避免$syn table,然后每个 "日期ID&产品ID"这个key与事实表关联,原本每个事实表中的日期ID和产品ID只和维度表关联,如果有更多的公用key都可以按照这种方法处理,优化之后的模型如下图:
结构非常清晰,方便后期扩展等,当然也有其他方法可以处理,比如Join事实表等,但是不是一个很好的做法,如有不妥之处,还望大家给出宝贵的意见,谢谢!