QlikView Script -组合键处理
QlikView裝載數(shù)據(jù)時,如果有兩個或以上表中存在兩個或以上相同的字段時就會自動產(chǎn)生組合鍵。
組合鍵實際上是產(chǎn)生了表間的多對多關(guān)系,這種關(guān)系邏輯上可能是對的。組合鍵會引起QlikView性能隱患,存儲所有出現(xiàn)的組合值,在數(shù)據(jù)量很大時會消耗太多的內(nèi)存。組合鍵越多Qlikview的運(yùn)行性能下降越厲害,百萬級數(shù)據(jù)量情況下如果4-5個組合鍵,系統(tǒng)可能運(yùn)行都成問題。
如何處理出現(xiàn)的組合鍵呢?
Case1:源數(shù)據(jù)表中組合的字段并不具有邏輯的組合含義,采用重命名方式解決
例如:
訂單:
Load
訂單號,訂單日期,訂單金額,操作員,操作時間
From Db.Sales;
?
訂單明細(xì):
Load
???????? 訂單號,產(chǎn)品號,產(chǎn)品數(shù)量,產(chǎn)品單價,操作員,操作時間
From Db.SalesDetails;
?
如果QlikView直接裝載會產(chǎn)生“訂單號、操作員,操作時間”這三個字段的組合鍵。再細(xì)看一下,訂單和訂單明細(xì)表中都有操作員、操作時間兩個字段,而這兩個字段對沒有邏輯上的關(guān)聯(lián),因此可以Rename該字段名稱。
?
修改如下:
訂單:
Load
訂單號,訂單日期,訂單金額,操作員 as訂單_操作員,操作時間 as訂單_操作時間
From Db.Sales;
?
訂單明細(xì):
Load
???????? 訂單號,產(chǎn)品號,產(chǎn)品數(shù)量,產(chǎn)品單價,操作員 as 訂單明細(xì)_操作員,操作時間as 訂單明細(xì)_操作時間From Db.SalesDetails;
?
如果重復(fù)的字段較多,則可以采用Qualify關(guān)鍵字。寫法如下:
Qualify? 操作員,操作時間;
訂單:
Load
訂單號,訂單日期,訂單金額,操作員,操作時間
From Db.Sales;
?
訂單明細(xì):
Load
???????? 訂單號,產(chǎn)品號,產(chǎn)品數(shù)量,產(chǎn)品單價,操作員,操作時間
From Db.SalesDetails;
?
或者
Qualify *;
訂單:
Load
訂單號,訂單日期,訂單金額,操作員,操作時間
From Db.Sales;
?
訂單明細(xì):
Load
???????? 訂單號,產(chǎn)品號,產(chǎn)品數(shù)量,產(chǎn)品單價,操作員,操作時間
From Db.SalesDetails;
Unqualify *;
?
Qualify關(guān)鍵字支持?,*等通配符。
?
?
Case2:源數(shù)據(jù)中邏輯上存在多對多的組合鍵,可以采用創(chuàng)建Key進(jìn)行處理
例如:
訂單明細(xì):
Load
???????? 訂單號,產(chǎn)品號,產(chǎn)品數(shù)量,產(chǎn)品單價,操作員,操作時間
From Db.SalesDetails;
?
采購單:
訂單號,產(chǎn)品號,銷售商號,采購時間,采購數(shù)量,采購單價
From Db.Supply;
?
“訂單號,產(chǎn)品號”在訂單明細(xì)和采購單兩表中邏輯上存在多對多關(guān)系,這時可以采用創(chuàng)建一個新的鍵值來表示:
訂單明細(xì):
Load
???????? 訂單號,產(chǎn)品號,
???????? 訂單號&’-’&產(chǎn)品號 as SupplyKey,
產(chǎn)品數(shù)量,產(chǎn)品單價,操作員,操作時間
From Db.SalesDetails;
?
采購單:
訂單號&’-’&產(chǎn)品號 as SupplyKey,
,銷售商號,采購時間,采購數(shù)量,采購單價
From Db.Supply;
?
有時組合鍵很長,這樣也會多耗費(fèi)Qv的內(nèi)存,可以進(jìn)一步優(yōu)化:
AutoNumber(訂單號&’-’&產(chǎn)品號) as SupplyKey產(chǎn)生組合鍵值
AutoNumber會根據(jù)“訂單號&’-’&產(chǎn)品號”不同產(chǎn)生唯一的數(shù)值。該函數(shù)的缺點就是不能用于增量數(shù)據(jù)裝載的環(huán)境中,因為AutoNumber每次裝載會重新編號。
要解決這個問題,Qv8提供了Hash128()函數(shù),寫法如下:
Hash128(訂單號&’-’&產(chǎn)品號) as SupplyKey
?
?
Case2:源數(shù)據(jù)中邏輯上存在多對多的組合鍵,組合字段較多,可以采用合并大表的方式解決
例如:
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關(guān)鍵字:
?
XXX:
Load
???????? A,B,C,D,E,F
From Db.xxx;
?
Concatenate
Load
A,B,C,D,H,I
From Db.YYYY;
轉(zhuǎn)載于:https://www.cnblogs.com/hb56-QlikView/archive/2010/04/26/1720982.html
總結(jié)
以上是生活随笔為你收集整理的QlikView Script -组合键处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL内存优化-最大化使用内存
- 下一篇: 主机名修改 Oracle监听器,orac