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