Erfahrungsbericht GeoEnrichment

Einführung

Wenn Sie Ihre Daten auf einer Karte anzeigen oder Clusteranalysen betreiben möchten, benötigen Sie Geo-Informationen, wie Längen- und Breitengrade. Da diese Informationen oftmals nicht erfasst werden, bedarf es einer Lösung, die sich dieser Thematik widmet. Neben den Längen- und Breitengraden können noch weitere Zusatzinformationen erhoben werden, wie Gebäudetypen, Rezensionen, Öffnungszeiten, Kontaktdaten und weitere.

Dieser Blog versteht sich als Vertiefung zu dem ersten Blog zum Thema „SAP DATA Intelligence: GeoEnrichment per API“. Während sich der letzte Blog auf einen einfachen Anwendungsfall konzentriert hat, behandelt dieser Blog Erfahrungen und Lessons Learned, die in dem Prozess beachtet werden sollten. Hierbei wird besondere Aufmerksamkeit auf mögliche Fallstricke gelegt, die es zu beachten gilt.

Zunächst werden Anwendungsszenarien betrachtet und im Anschluss rechtliche und strukturelle Aspekte der API-Nutzung sowie die Unterschiede zwischen den verschiedenen API’s vorgestellt. Im Anschluss werden Abdeckungsraten und Suchparameter beleuchtet und schlussendlich die Verarbeitung der Ergebnisse vorgestellt.

Fallstricke und Erfahrungen

Was für ein Szenario liegt vor?

Bevor ein Projekt konkretisiert wird, muss ein Konsens darin bestehen, welches Szenario verfolgt wird. Diese Aussage ist insbesondere im Kontext von GeoEnrichment relevant.

Dabei wird sich auf die zwei bekanntesten Szenarien beschränkt:

Szenario Beschreibung
Enrichment Es liegen bereits Points of Interests vor, zu denen Längen- und Breitengraden hinzugelesen werden sollen.
Sourcing

Es sollen neue Points of Interests gesucht und abgespeichert werden.

Ein Enrichment-Szenario könnte die Veranschaulichung der Lage aller Kunden auf einer Map in der SAP Analytics Cloud veranschaulicht sein, um herauszufinden, in welchen Gegenden noch keine eigenen Kunden vertreten sind. Die untere Abbildung zeigt vereinfacht eine entsprechende Karte. Ein anderes Szenario kann die Optimierung der Lieferwege und -strecken darstellen. Dazu bedarf es Längen- und Breitengrade, bevor kalkuliert werden kann, welches die schnellste oder die kraftstoffärmste Strecke ist.

Abbildung 1: Quelle: https://samples.azuremaps.com/controls/bring-data-into-view-control

Ein Sourcing-Szenario könnte das Aufspüren neuer Verkaufsstandorte sein. Dies beinhaltet die explizite Suche nach neuen Orten oder solchen, an denen viele Menschen aufeinandertreffen.

Abhängig von dem Szenario sollte die API gewählt werden, da diese stark differieren und großen Einfluss auf die Kostenstruktur haben können. Das bedeutet, dass beispielsweise für ein Enrichment-Szenario, bei dem es nur um das Hinzulesen von Längen- und Breitengraden geht, nicht eine API gewählt werden muss, die neben Längen- und Breitengraden auch viele weitere Informationen (Gebäudetyp, Website, Telefonnummer etc.) bereithält. Dies verursacht höhere Kosten als eine API, die lediglich die Längen- und Breitengrade zurückliefert.

Darf ich Daten speichern?

Das Wichtigste ist die Evaluierung, ob die Speicherung der Daten erlaubt ist. Um in der SAP Analytics Cloud die Geo-Maps zu nutzen, bedarf es Längen- und Breitengrade, die zwangsweise irgendwo gespeichert werden müssen. Wenn außerdem weitere potenzielle Points of Interests gefunden werden, wird die Information nur dann ihr volles Potenzial entfalten können, wenn die Daten abgespeichert werden können.

Die Speicherung von Daten ist eher die Ausnahme als die Regel. Die Datenprovider lassen sich auf eine Speicherung ein, wenn zugesichert ist, dass der kostenpflichtige Dienst (API Aufruf) regelmäßig genutzt wird. Für eine Einordnung können die Terms of Use genutzt werden. Google verbietet generell das Speichern von Daten, macht jedoch auch Ausnahmen, wenn eine regelmäßige Nutzung des Service zugesichert wird. Azure Maps bietet teilweise auch freie Speicherungen an. Hierbei hängt es jedoch von dem verwendeten Service ab. Bing ist ähnlich angesiedelt wie Azure Maps. Bei Open Source Map wird ein eigener Server aufgesetzt. Somit entstehen bei der Speicherung keine Schwierigkeiten, jedoch aber eine mögliche Restriktion beim Volumen je Abruf.

Welche Daten brauche ich und welche API ist dafür geeignet?

Diese Frage hängt stark von der Wahl des Szenarios ab. Danach sollte evaluiert werden, welche Daten benötigt werden, welche Daten optional sind und welche Daten auch in Zukunft nicht gebraucht werden. Wichtig hierbei ist der Blick in die Zukunft, damit alle Möglichkeiten weiterhin genutzt werden können, ohne jedoch das eigentliche Szenario aus den Augen zu verlieren.

Die untere Tabelle beantwortet zweierlei Fragen.

  1. Welche API nutze ich in welchem Anwendungsfall?
  2. Welche Alternative gibt es für einen Anwendungsfall?
Anwendungsfälle Google Service Azure Map Service Bing Maps Service

Freitextsuche nach eine Point of Interest:

„Theater, Dortmund“

Find Place

 

Text Search

Get Search POI

 

Get Search Fuzzy

Find a Location by Query

Adresssuche:

„Theaterkarree 1-3, 44137 Dortmund“

Geocoding Get Search Address Find a Location by Address

Freitextsuche nach neuen Point of Interest:

„Italienisches Restaurant, Dortmund“

Nearby Search

 

Text Search

Get Nearby Search Location Search

Detailsuche zu einem Point of Interest:

„Interne_ID“

Place Details Location Data

Generell gilt, dass nur ein kleiner Ausschnitt von den möglichen APIs gezeigt wurde. Distanz- oder Routen- APIs wurden beispielsweise nicht verglichen. Bei den Azure Maps Service ist zu betonen, dass viele auch als Batch Service ausgeführt werden können, was die Verarbeitung vereinfachen kann. Im direkten Vergleich gibt es Unterschiede. Azure Map stellt bei der Suche nach Längen- und Breitengraden eine Alternative zu Google Maps dar. Bei der freien Suche zeigt Google deutlich mehr Erfahrung und Leistung. Bei Suchen im Umkreis ist es beschwerlich, die Qualität der beiden APIs zu bewerten. Bing schneidet in allen Punkten schlechter als die Konkurrenten ab. Es wird nicht mehr weiterentwickelt, da Azure Maps weiterentwickelt wird.

Bei der API-Wahl sollte mit Bedacht vorgegangen und das Szenario detailliert getestet werden, damit Zeit und Arbeit effizient eingesetzt werden.

Es gibt auch Open Source Maps, die nur Längen- und Breitengrade liefern. Jedoch ist es schwierig, eine Aussage über die Abdeckung und Validität der Daten zu treffen, da die Open Source Maps oftmals von der Community selbst gefüllt werden.

Wie hoch ist die Abdeckungsrate?

Die Geo-APIs haben unterschiedliche Abdeckungsgrade. Somit kommt es auf stark auf den Anwendungsfall an, wann was genutzt werden sollte. Das Stichwort beim Suchen ist die Coverage. Hier kann die Abdeckung verglichen werden. Dabei beeinflusst die Abdeckung die Ausgabegenauigkeit genauso wie die Suchparameter.

Data Provider Amerikanischer Raum Europäischer Raum Asiatischer Raum Südamerikanischer Raum
Google Maps ++ ++ 0
Azure Maps ++ ++ 0
Bing Maps + + 0 0
Baidu Maps ? ? ++ ?
MapMyIndia ? ? ++ ?

Der europäische und amerikanische Raum ist von den großen Anbietern wie Azure und Google sehr gut abgedeckt. Die asiatischen Länder werden vom chinesischen Anbieter Baidu sowie von einem indischen Pendant dominiert. Hier müssen Länder-Restriktionen beachtet werden. Baidu Maps kann zum Beispiel nur mit einer chinesischen Telefonnummer genutzt werden.

Open Source Maps werden oftmals von Communities gepflegt. Hier ist vor allem im europäischen und amerikanischen Raum mit validen Ergebnissen zu rechnen, außerhalb sind die Ergebnisse jedoch oftmals weniger aussagekräftig als die von Google oder Azure. Bing wird nicht weiterentwickelt, kann jedoch immer noch genutzt werden. Im Vergleich zu Azure ist es aber Bing möglich, seine Dienste für Japan anzubieten. Das ist Azure noch nicht möglich.

Wie erstelle ich sinnvolle Suchparameter?

Bei dem Suchparameter muss unterschieden werden, welches Szenario und welche Daten vorliegen.

Szenario Suchparameter Beschreibung
Enrichment „Theaterkarree 1-3, 44137 Dortmund, Deutschland“ Die Struktur der Postanschrift ändert sich von Land zu Land in ihrer Struktur.
Sourcing „Theater, Deutschland“

Es wird oft nach Schlagworten gesucht und es liegt keine Adresse vor. Das Land und ggf. die Stadt sollten dabei sein.

Wenn es möglich ist, kann auch als weiterer Parameter ein Gebiet als ausgewählt werden.

Wenn weitere Informationen zu einem Point of Interest gesucht werden, kommt es immer auf die Inputparameter der jeweiligen API an. Die Place Details API von Google bedarf der Google-internen ID (placeid), die nur mit einem anderen API-Aufruf eingeholt werden kann. Die Get Location API von Bing benötigt die Adresse. Hier muss die korrekte Adresse gewählt werden, andernfalls werden das falsche Haus und somit auch die falsche Information gesourced.

Wie werden Ergebnisse beeinflusst?

Die verschiedenen APIs weisen oftmals eine Standort-Verzerrung (location bias) auf, die die Ergebnisse in Bezug auf den eigenen Standort beeinflusst. Das bedeutet, dass bei einer Suche nach einer türkischen Adresse, wenn die eigene IP von Deutschland ausgeht, zunächst nach einem deutschen Ergebnis gesucht und eventuell ausgegeben wird. Hier muss gegengesteuert werden, damit die gewünschten Ergebnisse in anderen Ländern gefunden werden.

Eine weitere Verzerrung bezieht sich auf die Sprache, in der gesucht wird. Die Suchergebnisse können in einem weiteren Schritt verbessert werden, wenn sie in der richtigen Sprache geschrieben werden. Hierbei sollte eine geeignete Lösung eingeplant werden, die das Übersetzen in die richtige Landessprache gewährleistet. Durch die Nutzung steigt jedoch auch der Aufwand.

Wie überprüfe ich meine Ergebnisse?

Die Genauigkeit lässt sich manuell als auch automatisch kontrollieren.

Szenario Beschreibung
Enrichment Manuelle Kontrolle dringend nötig.
Sourcing

Manuelle Kontrolle kommt auf das Szenario an.

Die zurückgelieferten Daten sind in sich stimmig.

Mögliche Fehlerquelle: Kategoriefehler. Nach „Theater in Dortmund“ wird gesucht, es wurde aber eine Oper in Dortmund zurückgeliefert. Die Informationen zur Oper sind an sich stimmig, sie passt jedoch nicht zur Kategorie.

Um die manuellen Kontrollen so gering wie möglich zu halten, gibt es automatisierte Logiken:

Die automatische Kontrolle muss in der Verarbeitungslogik der zurückgebenden Ergebnisse eingebaut werden. Es bedarf immer der Prüfung, ob die gesuchten Ergebnisse in dem richtigen Land sind. Hierbei gilt es, dies programmatisch zu überprüfen und die Weiterverarbeitung zu kontrollieren. Leider lässt es sich nicht nur auf ein Land beschränken. Bei der Stadt muss dies auch berücksichtigt werden, wobei die Überprüfung auf Stadtbasis deutlich komplexer wird.

Es bestehen verschiedene Möglichkeiten, dies zu verarbeiten. Eine Evaluierung kann aufzeigen, in welchem Anwendungsfall welche Verarbeitung Sinn ergibt.

Wie verarbeite ich Ergebnisse?

Außerdem muss eine fehlerfreie Verarbeitung gewährleistet sein. Bei den Verarbeitungen von Get-Requests treten verschiedene Fehlerquellen auf, die beachtet werden müssen.

Beispielsweise wird von APIs nicht immer nur ein Ergebnis geliefert. Mehrere gelieferte Ergebnisse für einen Suchparameter müssen geprüft und weiterverarbeitet werden. Dies kann über selbst geschriebene Kriterien, mit speziellen Algorithmen oder aber auch über fertige Bibliotheken umgesetzt werden.

Daneben muss auch die Fehlerbehandlung beachtet werden. Hier reicht es nicht mit dem Status der Response zu arbeiten. In einigen Fällen ändert sich das zurückgegebene Paket von Informationen und enthält nicht mehr die Informationen, die erwartet werden. Dies muss abgegriffen und verarbeitet werden.

Zusammenfassend lässt sich Folgendes feststellen:

Die Evaluierung, ob und wie lange die Daten gespeichert werden dürfen, ist essenziell wichtig. Nachdem klar ist, mit welchem Suchparameter und nach welchen Daten gesucht wird, müssen verschiedene Anbieter gegenübergestellt werden, um die beste API für das vorliegende Szenario zu definieren. Die Abdeckungsrate sollte genutzt werden, um die Suche der besten Ergebnisse zu gewährleisten. Des Weiteren gilt es zu beachten, wie das Ergebnis beeinflusst wird, wie dagegen gesteuert werden kann und wie die Qualität und Genauigkeit der Ergebnisse gesteigert werden kann.

Grundsätzlich gilt: Je besser die Datenqualität eines Suchparameters und je genauer die Vorstellung, welches Ergebnis erreicht werden soll, desto besser kann das GeoEnrichment umgesetzt werden.

Das Ranking in der unteren Abbildung baut auf den oben beschriebenen Punkten auf und versucht, diese stark vereinfacht darzustellen.

Kriterium Google Maps Azure Maps Bing Maps Open Street View
Datenumfang +++ + + +
Datenvalidität ++ ++ 0 0
Datenspeicherung 0 + + +
Kosten 0 +++
Datenabdeckung ++ ++ 0 0

 

Fazit

Auch wenn dieser Blog vor allem die Fallstricke des GeoEnrichment beschreibt, sollte nicht darüber hinweggesehen werden, dass GeoEnrichment ein enormes Potential mit sich bringt. Es können mit den bestehenden Anbietern sehr gute Ergebnisse erzielt werden, die einen Mehrwert bieten.

Bei der Entscheidung für eine Anreicherung der Daten kann dieser Blog als Hilfestellung genutzt werden. Viele Probleme treten erst bei dem Verarbeiten der Daten auf und können viel Zeit in Anspruch nehmen. Deswegen ist zu betonen, dass beim GeoEnrichment nicht der Aufwand unterschätzt werden darf. Die Möglichkeiten sind jedoch erstaunlich. Insbesondere die Google Maps API bietet durch die differenzierten Funktionalitäten eine breite Palette von verschiedenen Anwendungsfällen an.

 

Wenn Sie interessiert sind und evaluieren möchten, ob GeoEnrichment für Ihre Projekte sinnvoll ist, sprechen Sie uns gerne an. Auch wenn Sie weitere Fragen haben, stehen wir Ihnen gerne zur Verfügung!

Ansprechpartner

Julius Nordhues

Consultant

Data Products Setup

I’ll start with Data Products setup. If you’re new to the concept, this recent video is a great starting point, but here’s a short summary. A data product is a well-described, easily discoverable, and consumable collection of data sets.

Creating a Data Product in Datasphere

Note that in this article I create Data Products in the Data Sharing Cockpit in Datasphere. This functionality is expected to move into the Data Product Studio, but that had not taken place at the time writing.

Before creating a Data Product in Datasphere, I need to set up a Data Provider profile, collecting descriptive metadata like contact and address details, industry, regional coverage, and importantly define Data Product Visibility. Enabling Formations allows me to share the Data Product with systems across your BDC Formation – Databricks, in this case.

With the Data Provider set up, I can go ahead and create a Data Product. As with the Data Provider, I’ll need to add metadata about the product and define its artifacts – the datasets it contains. Only datasets from a space of SAP HANA Data Lake Files type can be selected. Since this Data Product is visible across the Formation, it is available free of charge.

For this demo, the artifact is a local table containing ten years of Ice Cream sales data. Since this is a File type space, importing a CSV file directly to create a local table isn’t an option (see documentation).

I used a Replication Flow to perform an initial load from a BW aDSO table into a local table.

Once Data Product is created and listed, it becomes available in the Catalog & Marketplace, from where it can be shared with Databricks by selecting the appropriate connection details.

Jump into Databricks

To use the shared object In Databricks, I need to mount it to the Catalog – either by creating a new Catalog or using an existing one.

Databricks appends a version number to the end of the schema – ‘:v1’ – to maintain versioning in case of any future changes to the Data Product.

Once the share is mounted, the schema is created automatically, and the Sales actual data table becomes available within it. From there, I can access the shared table directly in a Notebook.

Creating a Data Product in Databricks

To create a Data Product in Databricks, I first need to create a Share – which I can either do via the Delta Sharing settings in the Catalog:

Or directly out of the table which is going to become a part of the Share:

Since a single Share can contain multiple tables, I have the option to either add the table to an existing Share, or create a new one:

To publish the Share as a Data Product, I run a Python script where I define the target table for the forecast and describe the Share in CSN notation, setting the Primary Keys. Primary Keys are required for installing Data Products in Datasphere.

Jump back into Datasphere

Once the Databricks Data Product is available in Datasphere, I install it into a Space configured as a HANA Database space – since my intention is to build a view on top of the table and use it for planning in SAC.

There are two installation options: as a Remote table for live data access, or as a Replication Flow, in which case the data is physically copied into the object store in Datasphere.

Since I want live access, I install it as a Remote Table:

and build a Graphical view of type Fact on top:

Forecast calculation

With my Data Products set up and Sales actual data are available in Databricks, I create a Notebook to calculate the Sales Forecast.

The approach combines Sales and Weather data to train a Linear Regression model. I import the Weather data *https://zenodo.org/records/4770937 from an external server directly into Databricks, select the relevant features from the weather dataset, and combine them with the Sales actual data:

* Klein Tank, A.M.G. and Coauthors, 2002. Daily dataset of 20th-century surface
air temperature and precipitation series for the European Climate Assessment.
Int. J. of Climatol., 22, 1441-1453.
Data and metadata available at http://www.ecad.eu

Using the “sklearn” library, I build and train a Linear regression model:

Once trained, the model predicts the Sales forecast for Rome in June 2026 based on the weather forecast, and I save the results to my Catalog table:

Seamless planning data model

Seamless planning concept is built around physically storing planning data and public dimensions directly in Datasphere, keeping them alongside the actual data.

Since the QRC4 2025 SAC release, it has also been possible to use live versions and bring reference data into planning models without replication.

In this scenario, I build a seamless planning model on top of the Graphical view I created over the Remote table. This lets me use the forecast generated in Databricks as a reference for the final SAC Forecast version.

 

The model setup follows these steps:

Create a new model:

Start with data:

Select Datasphere as the data storage:

From there, I define the model structure and can review the data in the preview.

For a deeper dive into Seamless Planning, I recommend this biX blog.

Process Flow automation

Multi-action triggers Datasphere task chain

The final step is automating the entire forecast generation by using SAC Multi-actions and a Task-Chain in Datasphere – so that my user can trigger the calculation with a single button click from an SAC Story.

The model setup follows these steps:

Create a new model:

Triggering Task Chains from Multi-actions is a recent release. This blog post walks through how to set it up.

For details on how to trigger a Databricks Notebook from Datasphere, I recommend referring to this blog.

With everything in place, I create a Story, add my Seamless planning Model, and attach the Multi-action:

Running the Multi-action triggers the Task Chain, which in turn triggers the Databricks Notebook.

I can monitor the execution details in Datasphere:

and in Databricks:

Once the calculation completes, the updated forecast appears in the Story:

The end-to-end calculation took 2 minutes 45 seconds in total. The Task Chain in Datasphere is triggered almost instantly by the Multi-action, the Databricks Notebook execution itself took 1 minute 29 seconds, with the remaining time spent on Serverless Cluster startup.   

 

From here, I can copy the calculated forecast into a new private version:

adjust the numbers as needed, and publish it as a new public version to Datasphere:

Conclusion

With SAP Business Data Cloud, it is possible to build a forecasting workflow that feels seamless to the end user — even though it spans multiple systems under the hood.

Companies using BW as the main Data Warehouse and Databricks for ML calculations or Data Science tasks can benefit from using the platform, as the data no longer needs to be physically copied out of BW.

What this scenario demonstrates is that once wrapped as a Data Product, BW sales data can be shared with Databricks via the Delta Share protocol. Databricks, in turn, can then create its own Data Products on top of the calculation results and share them back with Datasphere as a Remote Table.

A Seamless Planning model in SAC sits on top of that Remote Table, giving planners live access to the generated forecast. A single Multi-action in an SAC Story ties it all together, triggering a Datasphere Task Chain that kicks off the Databricks Notebook — completing the full cycle in under three minutes.

As SAP Business Data Cloud continues to mature, scenarios like this one are becoming achievable – leaving the complexity in the architecture and not in the workflow.

Ansprech­partner

Ilya Kirzner
Consultant
biX Consulting
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.