QlikView Script 基礎教程3 -組合鍵處理
QlikView裝載資料時,如果有兩個或以上表中存在兩個或以上相同的欄位時就會自動產生組合鍵。
組合鍵實際上是產生了表間的多對多關係,這種關係邏輯上可能是對的。組合鍵會引起QlikView效能隱患,儲存所有出現的組合值,在資料量很大時會消耗太多的記憶體。組合鍵越多Qlikview的執行效能下降越厲害,百萬級資料量情況下如果4-5個組合鍵,系統可能執行都成問題。
如何處理出現的組合鍵呢?
Case1:源資料表中組合的欄位並不具有邏輯的組合含義,採用重新命名方式解決[@more@]例如:
訂單:
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;來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10158957/viewspace-1016623/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java基礎06 組合Java
- 【scipy 基礎】--影像處理
- 在QlikView中使用Neo4j處理圖形資料AUView
- 組合語言-基礎功能組合語言
- Python 基礎 3 - 元組Python
- Python基礎教程:Day15-影象和辦公文件處理Python
- C#基礎之前處理器,異常處理C#
- Python基礎 -- 異常處理Python
- 【scipy 基礎】--訊號處理
- 影像處理基礎篇(一)
- [資料處理]python基礎Python
- 處理器基礎知識
- 組合模式-統一的處理個別物件與組合物件模式物件
- Pandas 基礎 (9) - 組合方法 merge
- 組合語言-基礎知識組合語言
- 【scikit-learn基礎】--『預處理』之 缺失值處理
- 字串處理,push pop路徑,組合命令字串
- PHP基礎:異常處理ExceptionPHPException
- python 基礎之異常處理Python
- webpack基礎–css相關處理WebCSS
- sklearn基礎及資料處理
- MATLAB及其訊號處理基礎Matlab
- Flutter基礎-039-json處理FlutterJSON
- 《SQL基礎教程》筆記(3)SQL筆記
- jQuery內部對<script>標籤的處理jQuery
- Pandas 基礎 (8) - 用 concat 組合 dataframe
- lec 02 arm組合語言基礎組合語言
- 組合遊戲與博弈論基礎遊戲
- Java基礎-處理json字串解析案例JavaJSON字串
- Oracle開發基礎-異常處理Oracle
- Go語言基礎-錯誤處理Go
- C語言零基礎教程之預處理和巨集定義篇C語言
- 影像處理的基礎知識(3)——建立與編輯選取(2)
- Redux 基礎教程以及結合 React 使用方式ReduxReact
- SpringBoot基礎教程(十六)——與docker的結合Spring BootDocker
- 【自然語言處理篇】--以NLTK為基礎講解自然語⾔處理的原理和基礎知識自然語言處理
- Pandas 基礎 (5) - 處理缺失的資料
- Flink基礎:實時處理管道與ETL
- 圖形影像處理之繪圖基礎繪圖