Korzystanie z funkcji mapowania jako alternatywy dla funkcji sprzężenia
Prefiks Join w aplikacji QlikView to wydajny sposób łączenia kilku tabel danych w model danych. Jedyna wada polega na tym, że połączone tabele mogą stać się duże i spowalniać pracę. Alternatywą wobec prefiksu Join w sytuacjach, gdy wykonuje się wyszukiwanie wartości pojedynczej w innej tabeli, jest użycie mapowania. Pozwala to uniknąć ładowania niepotrzebnych danych, które spowalniają obliczenia i mogą spowodować błędy w obliczeniach, ponieważ sprzężenia zmieniają niekiedy liczbę rekordów w tabelach.
Tabela mapowania składa się z dwóch kolumn: pola porównania (wejściowego) i pola wartości mapowania (wyjściowego).
Na tym przykładzie mamy tabelę zamówień (Orders) i chcemy znać kraj klienta, który jest zapisany w tabeli klientów (Customers).
OrderID | OrderDate | ShipperID | Freight | CustomerID |
---|---|---|---|---|
12987 | 2007-12-01 | 1 | 27 | 3 |
12988 | 2007-12-01 | 1 | 65 | 4 |
12989 | 2007-12-02 | 2 | 32 | 2 |
12990 | 2007-12-03 | 1 | 76 | 3 |
CustomerID | Name | Country | ... |
---|---|---|---|
1 | DataSales | Spain | ... |
2 | BusinessCorp | Italy | ... |
3 | TechCo | Germany | ... |
4 | Mobecho | France | ... |
Aby wyszukać kraj (Country) klienta, potrzebujemy tabeli mapowania, która wygląda następująco:
CustomerID | Country |
---|---|
1 | Spain |
2 | Italy |
3 | Germany |
4 | France |
Tabela mapowania, którą nazwiemy MapCustomerIDtoCountry, jest określana w skrypcie w następujący sposób:
Następnym krokiem jest zastosowanie mapowania przy użyciu funkcji ApplyMap podczas ładowania tabeli z zamówieniami:
Trzeci parametr funkcji ApplyMap służy do definiowania, co ma być zwracane, gdy wartość nie zostanie znaleziona w tabeli mapowania (w tym przypadku Null()).
Otrzymana tabela będzie wyglądać następująco:
OrderID | OrderDate | ShipperID | Freight | CustomerID | Country |
---|---|---|---|---|---|
12987 | 2007-12-01 | 1 | 27 | 3 | Germany |
12988 | 2007-12-01 | 1 | 65 | 4 | France |
12989 | 2007-12-02 | 2 | 32 | 2 | Italy |
12990 | 2007-12-03 | 1 | 76 | 3 | Germany |