QlikView Script -组合键处理

QlikView装载数据时,如果有两个或以上表中存在两个或以上相同的字段时就会自动产生组合键。

组合键实际上是产生了表间的多对多关系,这种关系逻辑上可能是对的。组合键会引起QlikView性能隐患,存储所有出现的组合值,在数据量很大时会消耗太多的内存。组合键越多Qlikview的运行性能下降越厉害,百万级数据量情况下如果4-5个组合键,系统可能运行都成问题。

如何处理出现的组合键呢?

Case1:源数据表中组合的字段并不具有逻辑的组合含义,采用重命名方式解决

例如:

订单:

Load

订单号,订单日期,订单金额,操作员,操作时间

From Db.Sales;

 

订单明细:

Load

         订单号,产品号,产品数量,产品单价,操作员,操作时间

From Db.SalesDetails;

 

如果QlikView直接装载会产生“订单号、操作员,操作时间”这三个字段的组合键。再细看一下,订单和订单明细表中都有操作员、操作时间两个字段,而这两个字段对没有逻辑上的关联,因此可以Rename该字段名称。

 

修改如下:

订单:

Load

订单号,订单日期,订单金额,操作员 as订单_操作员,操作时间 as订单_操作时间

From Db.Sales;

 

订单明细:

Load

         订单号,产品号,产品数量,产品单价,操作员 as 订单明细_操作员,操作时间as 订单明细_操作时间From Db.SalesDetails;

 

如果重复的字段较多,则可以采用Qualify关键字。写法如下:

Qualify  操作员,操作时间;

订单:

Load

订单号,订单日期,订单金额,操作员,操作时间

From Db.Sales;

 

订单明细:

Load

         订单号,产品号,产品数量,产品单价,操作员,操作时间

From Db.SalesDetails;

 

或者

Qualify *;

订单:

Load

订单号,订单日期,订单金额,操作员,操作时间

From Db.Sales;

 

订单明细:

Load

         订单号,产品号,产品数量,产品单价,操作员,操作时间

From Db.SalesDetails;

Unqualify *;

 

Qualify关键字支持?,*等通配符。

 

 

Case2:源数据中逻辑上存在多对多的组合键,可以采用创建Key进行处理

例如:

订单明细:

Load

         订单号,产品号,产品数量,产品单价,操作员,操作时间

From Db.SalesDetails;

 

采购单:

订单号,产品号,销售商号,采购时间,采购数量,采购单价

From Db.Supply;

 

“订单号,产品号”在订单明细和采购单两表中逻辑上存在多对多关系,这时可以采用创建一个新的键值来表示:

订单明细:

Load

         订单号,产品号,

         订单号&’-’&产品号 as SupplyKey,

产品数量,产品单价,操作员,操作时间

From Db.SalesDetails;

 

采购单:

订单号&’-’&产品号 as SupplyKey,

,销售商号,采购时间,采购数量,采购单价

From Db.Supply;

 

有时组合键很长,这样也会多耗费Qv的内存,可以进一步优化:

AutoNumber(订单号&’-’&产品号) as SupplyKey产生组合键值

AutoNumber会根据“订单号&’-’&产品号”不同产生唯一的数值。该函数的缺点就是不能用于增量数据装载的环境中,因为AutoNumber每次装载会重新编号。

要解决这个问题,Qv8提供了Hash128()函数,写法如下:

Hash128(订单号&’-’&产品号) as SupplyKey

 

 

Case2:源数据中逻辑上存在多对多的组合键,组合字段较多,可以采用合并大表的方式解决

例如:

XXX:

Load

         A,B,C,D,E,F

From Db.xxx;

 

YYY:

Load

A,B,C,D,H,I

From Db.YYYY;

 

XXX和YYY表中都有A,B,C,D字段,可以考虑组合成大表的方式解决,采用Concatenate关键字:

 

XXX:

Load

         A,B,C,D,E,F

From Db.xxx;

 

Concatenate

Load

A,B,C,D,H,I

From Db.YYYY;

转载于:https://www.cnblogs.com/hb56-QlikView/archive/2010/04/26/1720982.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值