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
總結
以上是生活随笔為你收集整理的QlikView Script -组合键处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL内存优化-最大化使用内存
- 下一篇: 主机名修改 Oracle监听器,orac