Die Liquiditätsplanung ist das Rückgrat jeder erfolgreichen Unternehmensführung. In der heutigen, schnelllebigen Geschäftswelt reicht die bloße Betrachtung historischer Daten nicht mehr aus. Unternehmen benötigen präzise, zukunftsgerichtete Cashflow-Prognosen, um strategische Entscheidungen fundiert treffen zu können.
Doch wie lassen sich die reichhaltigen, transaktionalen Daten aus SAP S/4HANA effizient mit modernen Machine-Learning (ML)-Funktionen in einer leistungsstarken, skalierbaren Umgebung wie SAP Databricks verbinden und die Ergebnisse nahtlos in die SAP-Landschaft, wie den BDC (Business Data Cloud) Cockpit und SAP Datasphere, zurückführen?
Dieser Blogbeitrag liefert eine End-to-End-Anleitung für genau dieses Szenario: die Cashflow Forecast für die kommenden sechs Monate. Wir beleuchten, wie ein Data Scientist den Cashflow-Datenprodukt aus S/4HANA nutzt, ML/AI-Modelle für das Forecasting anwendet und das angereicherte Datenprodukt zur Berichterstattung und weiteren Analyse bereitstellt.
Sharing Datenprodukt von SAP nach SAP Databricks
Anreicherung des Datenprodukts mit ML/AI Insights (z.B. Zeitreihen-Forecasting-Modelle trainieren und anwenden)
Re-Sharing des benutzerdefinierten Datenprodukts zurück in den BDC Data Catalog mittels sap-bdc-connect-sdk
Ein eingerichteter Unity Catalog z.B. uc_cash_liquidity_forecast, Zugriff auf das SAP Datenprodukt Cashflow, sowie die notwendigen Python-Pakete und ein konfigurierter SECRET SCOPE.
Das Herzstück unseres Cashflow-Forecast-Szenarios ist der einfache und sichere Zugriff auf die relevanten S/4HANA-Daten. Der BDC (Business Data Cloud) Cockpit dient hierbei als zentrale Drehscheibe für die Bereitstellung standardisierter SAP-Datenprodukte.
Dieses Video demonstriert den Zero-Copy Data Sharing Principle. Ziel ist es, den Data Scientists direkten Zugang zu den SAP-verwalteten Datenprodukten zu verschaffen, ohne dass eine aufwendige Datenkopie oder Replikation erforderlich ist.
Delta Sharing wird hiefür verwendet, ein offenes Protokoll, das von Databricks und Linux Foundation entwickelt wurde. Es ermöglicht den sicheren, plattformübergreifenden Datenaustausch in Echtzeit über Clouds und Regionen hinweg.
Für das Sharing des Datenprodukts Cashflow sind ADMIN-Rechte in der SAP Business Data Cloud erforderlich.
Anmeldung im SAP Business Data Cloud Cockpit und Navigation über Search zum Data Catalog.
Suche nach dem Datenprodukt Cashflow und Öffnen der Kachel.
Klick auf den Share-Button auf der Detailseite, um den Dialog zu öffnen.
Eingabe eines Share Name und Auswahl des Ziel-SAP Databricks Workspace, Klick auf Share.
Anmeldung bei SAP Databricks und Navigation zum Unity Catalog.
Navigation zu Delta Shares Received, Suchen der Tabelle cashflow und Klick auf den Tab Sample Data.
Klick auf Select Compute, Auswahl des Serverless Starter Warehouse, anschließend Start and Close.
Vorschau der cashflow Sample-Daten zur Validierung des Zugriffs.
Nachdem wir im ersten Schritt den sicheren Zugang zu den S/4HANA-Daten in unserer Databricks-Umgebung hergestellt haben, widmet sich dieser Abschnitt der Datenanreicherung und Vorbereitung für unser Zeitreihen-Forecasting-Modell.
Ziel ist es, das Cash Flow-Datenprodukt so umzuformen, dass es für die Vorhersage des Cashflows in den kommenden Perioden optimal nutzbar ist. Das folgende Notebook demonstriert den gesamten Workflow, der später in die SAP Datasphere in der SAP Business Data Cloud (BDC) zurückgespielt wird.
Den vollständigen Code, der in diesem Video demonstriert wird, ist hier zufinden: Notebook
Wichtig: Zur Isolierung der erstellten Daten-Assets erstellen wir einen Katalog (<CATALOG_NAME>, z.B. uc_cash_liquidity_forecast) und ein entsprechendes Schema (<SCHEMA_NAME>, z.B. grp041) im Databricks Unity Catalog.
Aus dem BDC stellen wir eine Delta-Enabled lokale Tabelle über die Delta-Share bereit, die uns eine Tabelle mit mehreren Einträgen für denselben Primärschlüssel liefert.
Der Datensatz enthält die Spalte __OPERATION_TYPE, die die Transaktionsart (Insert, Update, Delete) kennzeichnet, sowie die Spalte __TIMESTAMP, die angibt, wann diese Änderung erfolgt ist.
Da wir die Cashflow-Transaktionssätze verwenden möchten, transformieren wir unseren Datensatz so, dass pro Primärschlüssel der aktuellste Eintrag geliefert wird.
Falls der aktuellste Eintrag eine Löschung darstellt, wird dieser Datensatz herausgefiltert.
Die Datenvorbereitung ist entscheidend für die Qualität der Prognose. Wir modellieren die Daten auf einer monatlichen Zeitreihe, basierend auf dem Buchungsdatum (Posting date), da dieses den Zeitpunkt der Cashflow-Buchung markiert.
Folgende Transformationsschritte werden durchgeführt:
Ersetzen leerer Strings durch Nullwerte.
Auswahl notwendiger Spalten und Filtern ungültiger Datumsangaben/Nullwerte im Buchungsdatum.
Abrunden des Buchungsdatums auf den Monat (floor) und Umbenennung der Datums- und Wertspalten.
Gruppierung der Daten nach Datum und Summierung des Cashflows pro Monat.
Erzeugung einer kontinuierlichen Zeitreihe zwischen dem minimalen und maximalen Datum der Daten.
Verknüpfung der generierten Zeitsequenz mit den Cashflow-Daten, um eine lückenlose Zeitreihen-Datenstruktur zu erhalten.
Auffüllen von Nullwerten mit 0 (da an diesen Tagen kein Cashflow erfasst wurde).
Konvertierung des Spark Dataframes in einen Pandas Dataframe für die ML-Modellierung.
Um sicherzustellen, dass für das Training und die spätere Prediction exakt dieselben vorbereiteten Daten verwendet werden, speichern wir den transformierten Daten im Databricks Feature Store. Dies eliminiert die Notwendigkeit, das Datenvorbereitungsskript in beiden Notebooks zu wiederholen.
Nach erfolgreicher Ausführung ist die erstellte Tabelle prepared_cash_flow_time_series im Unity Catalog unter dem entsprechenden Schema Ihres Benutzers abrufbar.
Nach der gründlichen Datenvorbereitung in der zweiten Demo widmen wir uns nun dem Herzstück des Workflows: dem Training eines Zeitreihen-Forecast-Modells. In diesem Schritt erweitern wir das Cash Flow-Datenprodukt, indem wir die Prognosewerte für die kommenden Perioden berechnen.
Die Aufnahme demonstriert die Hyperparameter-Optimierung und die Modell-Selektion mithilfe der AutoTS-Bibliothek, sowie das nachgelagerte Tracking des besten Modells mit MLFlow.
Den vollständigen Code, der in diesem Video demonstriert wird, ist hier zufinden: Notebook
Für diesen Prozess sind zwei Hauptpakete erforderlich:
mlflow: Zur Verfolgung (Tracking) des Machine-Learning-Modell.
AutoTS: Eine Time-Series-Bibliothek, die automatisch die Hyperparameter-Optimierung über eine Vielzahl von Zeitreihenmodellen durchführt.
Die im Feature Store persistierte und bereinigte Tabelle aus dem vorangegangenen Schritt wird als Input verwendet. Wir laden die vorbereiteten Daten aus dem Unity Catalog, um sicherzustellen, dass das Training auf konsistenten Daten basiert.
<PREPARED_TABLE_NAME> prepared_cash_flow_time_series
Wir trainieren den Zeitreihen-Algorithmus unter Verwendung der AutoTS-Bibliothek. Der Vorteil von AutoTS liegt in seiner Fähigkeit, verschiedene Modelle und Datenvorbereitungsschritte parallel auszuführen und zu validieren, um so die optimale Konfiguration zu finden.
MLFlow Tracking: Alle relevanten Aspekte des Trainings werden unter dem MLflow Experiment namens Time Series protokolliert. Da das AutoTS-Paket kein automatisches Logging (Autologging) des Modells bereitstellt, erstellen wir eine spezielle Python-Klasse für den prediction, um die MLflow-prediction nutzen zu können.
Die Performance des Modells hängt von diesen Parametern ab:
Parameter | Beschreibung |
|---|---|
FORECAST_LENGTH | Die Anzahl der Perioden, über die der Forecast ausgewertet werden soll. |
MAX_GENERATIONS | Die Anzahl der zu durchlaufenden Generationen des genetischen Algorithmus. Mehr Läufe führen in der Regel zu einer höheren Genauigkeit, aber längeren Laufzeiten. |
NUM_VALIDATIONS | Die Anzahl der durchzuführenden Kreuzvalidierungen. 0 bedeutet nur ein Train/Test-Split. |
ENSEMBLE | Die Art des Ensemble-Modells. Mögliche Werte sind auto, simple, distance, horizontal, mosaic oder subsample. |
NUM_JOBS | Die Anzahl der parallelen Jobs, die für die Hyperparameter-Optimierung durch AutoTS verwendet werden. |
MODEL_LIST | Die Liste der zu verwendenden Modellnamen. |
Nach erfolgreicher Ausführung solltest du das trainierte Modell cashflow_ts_model im Unity Catalog unter deinem Schema finden.
Nach dem erfolgreichen Training unseres AutoTS-Modells geht es in diesem Schritt darum, die Cashflow-Prediction tatsächlich anzuwenden und die resultierenden, angereicherten Daten für die weitere Nutzung bereitzustellen.
In diesem Notebook verwenden wir das protokollierte und trainierte Modell aus MLflow, um den Cashflow für die kommenden Perioden zu forecasten und die Ergebnisse in einer Delta-Tabelle zu speichern.
Den vollständigen Code, der in diesem Video demonstriert wird, ist hier zufinden: Notebook
Zuerst werden alle notwendigen Pakete importiert, um die Spark Session einzurichten und das im vorherigen Schritt protokollierte Modell abrufen zu können.
Die Spark Session wird konfiguriert, um auf die notwendigen Ressourcen zuzugreifen. Hier konsumieren wir die prepared_cash_flow_time_series Tabelle, das als Input für den prediction dient.
Der zentrale Schritt ist die Anwendung der prediction Model.
MLflow Modell abrufen: Wir suchen in unserem MLflow Experiment die zuletzt erfolgreiche Run ID aus der Trainingsprozedur und verwenden diese, um das trainierte Modell zu laden. Dies gewährleistet, dass wir die beste Modellversion für die prediction verwenden.
Prediction: Das abgerufene Modell wird genutzt, um die Spark Dataframe mit den Cashflow-Daten an die predict-Funktion zu übergeben. Die Funktion liefert anschließend die Prediction-Werte zurück.
Die gewonnenen Daten werden in einer neuen Delta-Tabelle namens cashflow_prediction gespeichert.
Wichtig: Die erstellte Prediction-Tabelle enthält einen Constraint Key, der aus den Spalten "date" und "CompanyCode" besteht, um die Eindeutigkeit der Werte zu gewährleisten.
Nach erfolgreicher Ausführung validiere die neu erstellte Tabelle cashflow_prediction im Unity Catalog in deinem erstellten Schema und dort die Prediction-Daten in der Vorschau anzeigen lassen.
Wir haben die Cashflow-Daten erfolgreich vorbereitet, ein Forecast-Modell trainiert und die Cashflow Prediction Tabelle generiert. Im finalen Schritt muss dieses angereicherte Datenprodukt die cashflow_prediction den SAP-Systemen (BDC Data Catalog und Datasphere) wieder zur Verfügung gestellt werden.
Diese Aufnahme demonstriert, wie die Prognoseergebnisse zur Veröffentlichung in den Data Catalog der SAP Business Data Cloud gelangen. Wir erstellen hierfür ein benutzerdefiniertes Datenprodukt unter Verwendung der Python-Bibliothek sap-bdc-connect-sdk.
Der Schlüssel: Wir nutzen erneut das Delta Share Protokoll. Die Ergebnistabelle bleibt physisch in SAP Databricks gespeichert (Zero-Copy), ist aber über den BDC Data Catalog remote zugänglich.
Den vollständigen Code, der in diesem Video demonstriert wird, ist hier zufinden: Notebook
Um das erweiterte Datenprodukt in die SAP Business Data Cloud zurückzuspielen, ist die Installation und das Laden des SAP SDK (sap-bdc-connect-sdk) zwingend erforderlich.
Es werden zwei Client-Objekte initialisiert:
Der DatabricksClient, der die Databricks-Dienstprogramme (dbutils) zur Informationsbeschaffung aus der Databricks-Umgebung erhält.
Der BdcConnectClient, der wiederum den DatabricksClient als Parameter nutzt, um die Verbindung zur BDC aufzubauen.
Ein Share ist der Mechanismus für den plattformübergreifenden Zugriff auf die Daten. Die Erstellung oder Aktualisierung eines Shares beinhaltet die Aufnahme spezifischer Attribute (wie @openResourceDiscoveryV1) in den Anforderungstext, die mit dem Open Resource Discovery (ORD) Protokoll übereinstimmen müssen.
Um das Datenprodukt spezifisch für die BDC freizugeben, muss sap-business-data-cloud als Empfänger (Recipient) für den neu erstellten Share ausgewählt werden.
Das ORD-Protokoll stellt sicher, dass der Share ordnungsgemäß strukturiert und nach standardisierten Vorgaben beschrieben wird. Hierbei werden Parameter wie <DATA_PRODUCT_NAME>, <SHORT_DESCRIPTION> und <LONG_DESCRIPTION> ausgefüllt. Dies ist essenziell für die Auffindbarkeit im Data Catalog.
Die Core Schema Notation (CSN) dient als standardisiertes Format zur Konfiguration und Beschreibung von Shares. Es wird empfohlen, den CSN-Inhalt in einer separaten Datei vorzubereiten und diesen in den Anforderungstext aufzunehmen, um die Genauigkeit und die Einhaltung der CSN-Spezifikationen zu gewährleisten.
Ein Datenprodukt stellt eine Abstraktion dar, die Daten oder Datensätze innerhalb eines Systems repräsentiert. Es bündelt Ressourcen, um einen effizienten Datenzugriff und die Nutzung durch integrierte Systeme zu ermöglichen. Die Veröffentlichung erlaubt es den SAP-Systemen, auf die neu erzeugten Cashflow_Prediction zuzugreifen und diese zu konsumieren.
Nach erfolgreicher Veröffentlichung kann man das neue Datenprodukt (grp041 Cashflow Predictions Data Product) im BDC Data Catalog validieren. Es ist nun in der SAP-Landschaft zur weiteren Berichterstattung (z.B. in SAP Datasphere) verfügbar.
Dieser End-to-End-Workflow demonstriert eindrucksvoll, wie die Kombination von SAP Business Data Cloud (BDC) und SAP Databricks eine nahtlose, Zero-Copy-Datenanreicherung ermöglicht. Wir konnten das Cashflow-Datenprodukt effizient für ML-basiertes Forecasting nutzen und die Cashflow_Prediction-Daten über das sap-bdc-connect-sdk zur sofortigen Berichterstattung in die SAP-Landschaft zurückführen. Diese Integration über Delta Sharing legt den Grundstein für moderne, datengesteuerte Liquiditätsplanung.
Für tiefere Einblicke und alternative Model training methoden, oder detailliertere Beschreibungen der diskutierten Schritte, konsultiere bitte das offizielle SAP-Repository: SAP-Samples