資料清理
請注意,從不同表格載入資料時,代表相同事物的欄位值不一定命名會一致。因為缺乏一致性不僅很擾人,還會阻礙關聯,所以需要解決這個問題。透過建立欄位值比較的對應表,即可漂亮地解決此問題。
對應表
透過 mapping load 或 mapping select 載入的表格,與其他表格的處理方式有所不同。它們會儲存在記憶體的不同區域,並且僅在指令碼執行期間作為對應表之用。指令碼執行完畢之後,這些對應表就會自動卸除。
規則:
- 對應表必須有兩個資料行:第一個包含比較值,第二個包含所需的對應值。
- 必須對這兩個資料行加以命名,但名稱本身沒有相關性。該資料行名稱和一般內部表格的欄位名稱並無關聯。
使用對應表
在載入數個含國家/地區清單的表格時,可能會發現同一個國家有幾個不同的名稱。在此範例中,美國就列為 US、U.S. 及 United States。
為了避免在串連表格中出現三筆皆代表美國的不同記錄,可建立與所顯示表格類似的表格,然後將其載入為對應表。
完整的指令碼如下所示:
CountryMap:
Mapping LOAD x,y from MappingTable.txt
(ansi, txt, delimiter is ',', embedded
labels);
Map Country using CountryMap;
LOAD Country,City from CountryA.txt
(ansi, txt, delimiter is ',', embedded labels);
LOAD Country, City from CountryB.txt
(ansi, txt, delimiter is ',', embedded labels);
mapping 陳述式會將檔案 MappingTable.txt 載入為對應表,其標籤為 CountryMap。
map 陳述式會使用先前載入的對應表 CountryMap 來啟用欄位 Country 的對應。
LOAD 陳述式會載入表格 CountryA 和 CountryB。這些表格會因為有相同的一組欄位而進行串連,其中包含欄位 Country,其欄位值會與對應表中第一個資料行的值進行比較。找到的欄位值 US.、U.S. 及 United States,會由對應表中第二個資料行的值 (亦即 USA) 所取代。
自動對應是這一串連鎖事件中最後執行的動作,之後欄位即儲存在 QlikView 表格中。對於典型的 LOAD 或 SELECT 陳述式,事件的順序約略如下:
- 評估運算式
- 以 as 重新命名欄位
- 以 alias 重新命名欄位
- 限定表格名稱 (如適用)
- 如果欄位名稱相符,則對應資料
這表示,並不是每次在運算式中遇到欄位名稱就會進行對應,而是在要根據欄位名稱將值儲存在 QlikView 表格時才會進行對應。
若要停用對應,請使用 unmap 陳述式。
若要在運算式層級上進行對應,請使用 applymap 函數。
若要在子字串層級上進行對應,請使用 mapsubstring 函數。