# Migracja z Łącznik GeoAnalytics do Qlik GeoOperations

Qlik GeoOperations w Qlik Cloud oferuje podobne funkcje i operacje co Łącznik GeoAnalytics w Qlik Sense Enterprise on Windows. Obsługują one również wiele takich samych formatów danych. Różnice są następujące:

* Qlik GeoOperations to integracja analiz zaawansowanych (AAI), która jest bardziej odpowiednia do wysyłania i przetwarzania danych niż łącznik.

* Składnia skryptu jest inna w przypadku integracji analiz zaawansowanych niż w przypadku łączników.

* Część GeoOperations można też stosować w wyrażeniach wykresu.

* Qlik GeoOperations zwraca pojedynczą tabelę. W porównaniu z tym, co zwraca Łącznik GeoAnalytics, tabele są łączone w Qlik GeoOperations.

* W Qlik GeoOperations niektóre pola i parametry mają zmienione nazwy w celu zwiększenia spójności.

Poniżej opisano, jak przekonwertować skrypt utworzony przez kreatora Łącznik GeoAnalytics na Qlik GeoOperations:

1. W Edytorze ładowania danych, w kodzie skryptu Łącznik GeoAnalytics, skopiuj wszystko po `SQL` aż do drugiego wystąpienia SELECT lub „`;`” w zależności od tego, co następuje wcześniej.

2. Zamień wszystkie wystąpienia `'` w skrypcie Łącznik GeoAnalytics na `"`.

3. Dodaj wybrane nazwy pól z drugorzędnej instrukcji SELECT w skrypcie Łącznik GeoAnalytics do pierwszej instrukcji SELECT w skrypcie GeoOperations. Pomiń wszystkie pola, które już tam są. Dodaj nazwę tabeli źródłowej do nazw pól, oddzielając je kropką. Na przykład tabela.pole. Spowoduje to utworzenie pojedynczej połączonej tabeli zamiast kilku tabel.

4. Przejrzyj dokumentację referencyjną operacji oraz zestawu danych i w razie potrzeby dostosuj nazwy parametrów lub pól.

   [Operacja](https://help.qlik.com/pl-PL/cloud-services/Content/Ref-GeoOperationsService/connector-geoanalytics_reference-Operation.htm)

   [Zestaw danych](https://help.qlik.com/pl-PL/cloud-services/Content/Ref-GeoOperationsService/connector-geoanalytics_reference-Dataset.htm)

   Aby zapoznać się z podsumowaniem głównych różnic, zobacz [Różnice między polami GeoOperations i GeoAnalytics](https://help.qlik.com/pl-PL/migration/Content/Migration/migrate-geo-analytics.htm#GeoOperationsAndGeoAnalyticsFieldDifferences)

5. Dodaj następujący kod na początku skryptu GeoOperations:

   `Load * Extension GeoOperations.ScriptEval('`

6. Dodaj następujący kod na końcu skryptu GeoOperations:

   `');`

Jeśli używasz załadowanej tabeli z Łącznik GeoAnalytics, wyślij ją jako drugi parametr do `GeoOperations.ScriptEval`.

Ponieważ Qlik GeoOperations zwraca tabelę połączoną, z tabel pomocniczych zwracane są tylko wartości pól, które mają odpowiednią wartość w tabeli podstawowej. Jeżeli na przykład chcesz znaleźć najbliższe lotniska w Niemczech dla niektórych punktów, zwracane są tylko dane o lotniskach, które są najbliżej punktów. Jeśli chcesz uzyskać dane wszystkich lotnisk w Niemczech, musisz je załadować osobno przy użyciu operacji LOAD.

W przypadku ładowania z bazy danych SQL za pomocą łącznika dane należy zamiast tego ładować za pomocą jednego z łączników bazy danych, takiego jak łącznik ODBC. Pamiętaj, aby załadować geometrie jako WKT (zastosuj funkcję zwykle zwaną `st_asText()` w zapytaniu SQL). Następnie przekonwertuj pole WKT, wysyłając tabelę do Qlik GeoOperations. Następnie zostanie zwrócone pole z geometriami w formacie Qlik Sense.

## Przykładowa konwersja skryptu

W tym przykładzie konwersji skryptu zostanie użyty następujący skrypt Łącznik GeoAnalytics:

```
/* Generated by GeoAnalytics for operation Cluster ---------------------- */
[ClusterAssociations]:
SQL SELECT [LocationDbId], [Clusters_ClusterID] FROM Cluster(distance='10000', points='Points')
DATASOURCE Points LOCATIONSERVICE geometry='POINT', type='XIATA', country='de', serviceName='default'
SELECT [Clusters_ClusterID], [Clusters_ClusterCenter] FROM Clusters;
[Clusters]:
SQL LOAD * FROM Clusters;
tag field [LocationDbId] with '$primarykey';
tag field [Clusters_ClusterID] with '$primarykey';
tag field [Clusters_ClusterCenter] with '$geopoint';
tag field [Clusters_ClusterID] with '$geoname';
tag field [Clusters_ClusterCenter] with '$relates_Clusters_ClusterID';
tag field [Clusters_ClusterID] with '$relates_Clusters_ClusterCenter';
/* End GeoAnalytics operation Cluster ----------------------------------- */
```

Wykonaj następujące czynności:

1. Użyj skryptu między SQL a drugą instrukcją SELECT.

   ```
   SELECT [LocationDbId], [Clusters_ClusterID] FROM Cluster(distance='10000', points='Points')
   DATASOURCE Points LOCATIONSERVICE geometry='POINT', type='XIATA', country='de', serviceName='default'
   ```

2. Zastąp cudzysłowy:

   ```
   SELECT [LocationDbId], [Clusters_ClusterID] FROM Cluster(distance="10000", points="Points")
   DATASOURCE Points LOCATIONSERVICE geometry="POINT", type="XIATA", country="de", serviceName="default"
   ```

3. Dodaj pola z tabel pomocniczych:

   ```
   SELECT [LocationDbId], [Clusters_ClusterID], [Clusters.Clusters_ClusterCenter] FROM Cluster(distance="10000", points="Points")
   DATASOURCE Points LOCATIONSERVICE geometry="POINT", type="XIATA", country="de", serviceName="default"
   ```

4. Dostosuj nazwy parametrów i pól:

   SELECT [LocationDbId], [ClusterID], [Clusters.ClusterPoint] as [Clusters\_ClusterCenter] FROM Cluster(distance="10000", points="Points") DATASOURCE Points LOCATIONSERVICE geometry="POINT", type="XIATA", country="de", serviceName="default"

5. Użyj w kodzie wzorcowym:

   Load \* Extension GeoOperations.ScriptEval(' SELECT [LocationDbId], [ClusterID], [Clusters.ClusterPoint] as [Clusters\_ClusterCenter] FROM Cluster(distance="10000", points="Points") DATASOURCE Points LOCATIONSERVICE geometry="POINT", type="XIATA", country="de", serviceName="default" ');

Ten kod skryptu może być teraz używany z Qlik GeoOperations.

## Różnice między polami GeoOperations i GeoAnalytics

Domyślne pola w skryptach GeoOperations i GeoAnalytics różnią się, zwykle przedrostkami. Podczas migracji skryptów GeoAnalytics do GeoOperations może być konieczne dostosowanie niektórych nazw pól.

AddressToPoint

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: &lt;id&gt;, Address, AddressPoint, CountryIso2, Adm1, City, PostalCode, Street, HouseNumber, Match

* GeoAnalytics: [&lt;id&gt;], [Dataset\_Address], [Dataset\_Geometry], [CountryIso2], [Dataset\_Adm1], [Dataset\_City], [Dataset\_PostalCode], [Dataset\_Street], [Dataset\_HouseNumber], [Dataset\_Match]

Między GeoAnalytics a GeoOperations są następujące różnice:

* GeoAnalytics pola mają prefiksy z zestawu danych.

* Dataset\_Geometry nazywa się AddressPoint w GeoOperations.

Grupowanie

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: &lt;id&gt;, BinId, BinTable.BinPolygon, BinTable.CenterPoint

* GeoAnalytics: [&lt;id&gt;], [RH2W3], [RH2W3\_CenterPoint]

Między GeoAnalytics a GeoOperations są następujące różnice:

* W GeoAnalytics RH2W3 jest polem wielokątnym, a jego nazwa jest generowana na podstawie rozmiaru/współczynnika siatki. W GeoOperations polem tym jest BinTable.BinPolygon.

* GeoAnalytics nie zawiera pola BinId.

Najbliższe

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: dataset\_dataset2\_RelationId, dataset.&lt;ds1 id&gt;, dataset2.&lt;ds2 id&gt;, Distance

* GeoAnalytics: [Dataset1\_Dataset2\_RelationId], [Dataset1.&lt;ds1 id&gt;], [Dataset2.&lt;ds2 id&gt;], [Dataset1\_Dataset2\_Distance]

Między GeoAnalytics a GeoOperations są następujące różnice:

* GeoOperations nie ma prefiksów dla pola Distance.

Klaster

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: &lt;id&gt;, ClusterID, Clusters.ClusterPoint, Clusters.PointCount

* GeoAnalytics: [&lt;id&gt;], [Clusters\_ClusterID], [Clusters\_ClusterCenter], [Clusters\_PointCount]

Między GeoAnalytics a GeoOperations są następujące różnice:

* Przedrostki różnią się między GeoOperations a GeoAnalytics.

Zagreguj

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: &lt;id&gt;, DissolvedPolygon

* GeoAnalytics: [&lt;id&gt;], [&lt;id&gt;\_Geometry]

Między GeoAnalytics a GeoOperations są następujące różnice:

* Nazwa kolumny geometrii

Przecięcia

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: dataset\_dataset2\_RelationId, dataset.&lt;dataset1 id&gt;, dataset2.&lt;dataset2 id&gt;, dataset.RelativeOverlap, dataset2.RelativeOverlap

* GeoAnalytics: [Dataset1\_Dataset2\_RelationKey], [Dataset1.&lt;ds1 id&gt;], [Dataset2.&lt;ds1 id&gt;], [Dataset1\_RelativeOverlap], [Dataset2\_RelativeOverlap]

Między GeoAnalytics a GeoOperations występują następujące główne różnice:

* Prefiksy w GeoOperations i GeoAnalytics różnią się.

IpLookup

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: &lt;id&gt;, IpPoint, CountryIso2, Adm1Code, City

* GeoAnalytics: [&lt;id&gt;], [IpTable\_Geometry], [CountryIso2], [IpTable\_Adm1Code], [IpTable\_City]

Między GeoAnalytics a GeoOperations są następujące różnice:

* IpTable\_Geometry w GeoAnalytics to IpPoint w GeoOperations.

* Prefiksy w GeoOperations i GeoAnalytics różnią się.

Load (zestaw danych lokalizacji)

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations (obszar): LocationDbId, LocationPolygon, Name, CountryIso2, Adm1Code, Adm2Code, LocationDbType

* GeoOperations (punkt): LocationDbId, LocationPoint, Name, CountryIso2, Adm1Code, Adm2Code, LocationDbType

* GeoAnalytics: [LocationDbId], [Dataset\_Geometry], [Dataset\_Name], [CountryIso2], [Dataset\_Adm1Code], [Dataset\_Adm2Code], [LocationDbType]

Między GeoAnalytics a GeoOperations są następujące różnice:

* Pola geometrii (LocationPolygon i LocationPoint) w GeoAnalytics to Dataset\_Geometry w GeoOperations.

* Prefiksy w GeoOperations i GeoAnalytics różnią się.

PointToAddress

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: &lt;id&gt;, Address, AddressPoint, CountryIso2, Adm1, City, PostalCode, Street, HouseNumber, Distance

* GeoAnalytics: [&lt;id&gt;], [Dataset\_Address], [Dataset\_Geometry], [CountryIso2], [Dataset\_Adm1], [Dataset\_City], [Dataset\_PostalCode], [Dataset\_Street], [Dataset\_HouseNumber], [Dataset\_Match]

Między GeoAnalytics a GeoOperations są następujące różnice:

* Prefiksy w GeoOperations i GeoAnalytics różnią się.

Trasy

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: &lt;id&gt;, Distance, Duration, Status, LowResLine

* GeoAnalytics: [&lt;id&gt;], [Dataset\_Distance], [Dataset\_Duration], [Dataset\_Status], [Dataset\_PathLowRes]

Między GeoAnalytics a GeoOperations są następujące różnice:

* Pole geometrii Dataset\_PathLowRes w GeoAnalytics to LowResLine w GeoOperations.

* Prefiksy w GeoOperations i GeoAnalytics różnią się.

Uprość

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: &lt;id&gt;, Simplified\_&lt;nazwa pola geograficznego&gt;

* GeoAnalytics: [&lt;id&gt;], [Dataset\_Simplified\_Geometry]

.GeoAnalytics i GeoOperations mają następujące różnice:

* Nazwy pól geometrii różnią się między GeoOperations a GeoAnalytics.

TravelAreas

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: &lt;id&gt;, TravelArea, Cost, CostUnit, Status

* GeoAnalytics: [&lt;id&gt;], [Dataset\_TravelArea], [Dataset\_Origin], [Dataset\_Cost], [Dataset\_CostUnit], [Dataset\_Status]

Między GeoAnalytics a GeoOperations są następujące różnice:

* GeoOperations nie zawiera pola pochodzenia.

* Prefiksy w GeoOperations i GeoAnalytics różnią się.

W

GeoOperations i GeoAnalytics zwracają następujące pola:

* GeoOperations: dataset\_dataset2\_RelationId, dataset.&lt;id zestawu danych1&gt;, dataset2.&lt;id zestawu danych2&gt;

* GeoAnalytics: [Enclosed\_Enclosing\_RelationId], [Enclosed.&lt;dataset 1/2 id&gt;], [Enclosing.&lt;datasets 1/2 id&gt;]

Między GeoAnalytics a GeoOperations są następujące różnice:

* Prefiksy w GeoOperations obejmują nazwy zestawów danych, a w GeoAnalytics jest także prefiks Enclosed.