Review der File Upload Funktionalität aus einer Story in der SAC 

Einführung

Seit dem Q3 2004 Release der SAP Analytics Cloud (SAC) können Planungsuser über einen Button in einer Story Daten aus einem File starten und das Ergebnis sofort sehen. Diese Möglichkeit erlaubt es den Business-Usern, viele Daten direkt aus der Story zu laden, ohne über den Modeler gehen zu müssen. Dies verschlankt den Datenladeprozess beachtlich und reduziert die Abhängigkeit von einem Administrator bei Routine-Datenimporten. 

In diesem Blog wird erklärt, wie man diese neue Upload-Funktionalität einrichtet, wie sie in der SAC Story funktioniert und wo wir noch Verbesserungsmöglichkeiten sehen. 

In folgenden Blogs gibt es noch mehr Information zu diesem Thema: 

Plan Data Upload Starter – Directly upload plan da… – SAP Community
New End User File Upload in SAP Analytics Cloud QR… – SAP Community
How to configure a dynamic file upload in SAP Anal… – SAP Community 

Einrichten des Uploads

Im ersten Schritt richtet der Administrator oder Modellierer den Upload-Job in der datenverwaltung ein. Hier muss ein Template-File (.csv/ xlsx und .txt sind unterstützt) hochgeladen werden, wobei gegebenenfalls nötige Transformationen definiert werden können. Im letzten Schritt ordnet man die Spalten des Files den Dimensionen des Modells zu. In den Job-Einstellungen wird zusätzlich festgelegt, ob der Import als Update/Aktualisieren oder als Anfügen/Anhängen erfolgen soll und ob das Vorzeichen nach Kontotyp gedreht werden soll.

Abbildung 1: Jobeinstellungen Import Job

Seit dem Q3/2025-Release kann man hier auch einstellen, ob und nach welcher Hierarchie sichergestellt werden soll, dass nur Daten für Blätter und keine Knoten geladen werden. 

Abbildung 2: Jobeinstellungen Import Job – Validierung

In der Datenzeitleiste der Datenverwaltung sieht man alle durchgeführten Ladejobs, auch die eines PlanungsUsers und kann hier erneut den Bericht der abgelehnten Zeilen laden. 

Abbildung 3: Neue Option für die Definition von Upload Jobs in der Datenverwaltung mit demn Potokollen in der Datenzeitleiste

Wenn der UploadJob angelegt ist, muss der Story Designer einen „Starter für Upload“Button in die Story einfügen. Der Button funktioniert ähnlich wie ein DataActionWidget für konsistente BenutzerErfahrung. Beim Konfigurieren der Story muss für diesen Starter zuerst das Modell ausgewählt und anschließend der zuvor angelegte UploadJob selektiert werden. Ebenso kann festlegt werden, wie die Zielversion bestimmt wird und ob die Daten automatisch veröffentlicht werden sollen oder nicht. Diese Optionen können entweder fest vorgegeben oder über ein Prompt den User bei der Ausführung bestimmen lassen. Wenn Planungsbereiche bei großem Datenvolumen verwendet werden, kann das Verhalten beim Upload weiter spezifiziert werden. Ist alles eingerichtet, ist die Story bereit für einen Daten-Upload. 

Abbildung 4: Einstellungen für den Datenupload Starter

Upload Prozess

Aus Endbenutzersicht ist der Prozess einfach: Wenn die Story geöffnet wird, erscheint ein Button zum Laden von Daten – versehen mit einer zuvor definierten Beschreibung, z. B. „Hochladen Vertriebsplanung“.  
Wird der Button gedrückt, öffnet sich ein Fenster, in dem die Datei – und falls nötig die Zielversion – ausgewählt werden kann. Unterstützt werden folgende Formate: CSV, XLSX und TXT. 

Wie oben bereits erwähnt, kann beim Anlegen des Upload-Jobs definiert werden, ob die Daten beim Laden aktualisiert oder angehängt werden sollen. Sehen wir uns nun an, wie sich diese beiden Methoden im Upload-Vorgang verhalten. 

Nehmen wir an, wir haben ein File, das die Zahlen enthält, die nach einem ersten Laden im Aktualisieren-Modus zu folgendem Bild führt: 

Abbildung 5: Laden eines Files mit „aktualisieren“, das alle angezeigte Daten enthält

Wird dasselbe File im Modus „Aktualisieren“ ein weiteres Mal geladen, bleiben die Zahlen in der SAC so, wie sie im File stehen – sie werden entsprechend aktualisiert. 

Wenn dieselben Daten hingegen ein zweites Mal im Modus „Anhängen“ geladen werden, werden die Inhalte zusätzlich eingefügt – die Werte verdoppeln sich dadurch. 

Was passiert nun, wenn im Modus „Aktualisieren“ ein File geladen wird, das nicht alle Zahlen ändert und z.B. die Daten für das Produkt A001 nicht beinhaltet? In diesem Fall werden alle Daten aus dem File als geändert markiert. Die Zahlen für das Produkt A001 bleiben jedoch unverändert (s. folgende Abbildung). 

Abbildung 6: Geänderte Zahlen nach em Laden eines Files ohne die Daten für A011 und Non_PRD_SRV

Im Aktualisieren-Modus erwartet man, dass die Daten ersetzt werden. Aber Achtung mit fehlenden Zeilen, diese werden nicht geändert. 

Jetzt liegt es am Anwender oder Entwickler wie fehlende Zeilen bei einem zweiten Laden im Aktualisieren-Modus behandelt werden sollen. Wenn erwartet wird, dass alle Zahlen aktualisiert werden, müssen die bestehenden Daten vorher manuell gelöscht werden. Erfolgt dies per Skript, ist besondere Vorsicht geboten: Der Fall, dass der Benutzer den Upload abbricht, muss dabei berücksichtigt werden (s. unten). SAP hat angekündigt, diese Verhalten mit dem Q4/2025-Release zu verbessern. 

Nach jedem Ladenvorgang erscheint eine Meldung, ob die Daten erfolgreich geladen wurden oder nicht: 

Abbildung 7: Meldung nach erfolgreichem Laden

Abbildung 8: Meldung nach dem Laden mit abgelehnten Zeilen

Wenn die Daten nur teilweise geladen wurden, kann eine Zusammenfassung der abgelehnten Zeilen als CSV – File heruntergeladen werden. Dieses File gibt einen Überblick über die abgelehnten Zeilen mit einem Grund für die Ablehnung. Typische Fehlerursachen sind Berechtigungsprobleme, fehlende oder falsche Stammdaten, Sperren oder im System definierte Datenprüfungen. In diesen Fällen muss der Planer die Fehler identifizieren, beheben und das File anschließend erneut über die SAC-Story laden. 

Die Zusammenfassung der abgelehnten Zeilen ist ein nützliches Hilfsmittel für eine erste Analyse und die Gründe für die Ablehnung. In der Praxis kann dies zeitaufwendig werden, die tatsächliche Ursache zu finden. Die Zusammenfassung zeigt zwar, welche Zeile fehlerhaft war, aber spezifiziert nicht, welche Stammdaten betroffen sind und ob dies eine Dimension betrifft oder mehrere. 

Lädt man beispielsweise ein File mit 10 Dimensionen und 200 Zeilen, von denen die Hälfte der Zeilen wegen Stammdatenproblemen abgelehnt wurde, wird die Suche nach den Fehlern aufwendig. Genauere Informationen zu den Ablehnungsgründen würden die Benutzerfreundlichkeit deutlich verbessern. 

Skript – Optionen

Beim Upload-Job gibt es zwei Zeitpunkte, bei denen man per Skript eingreifen kann: onBeforeExecute und onAfterExecute. Das onBeforeExecute Skript wird ausgeführt, bevor der Upload Bildschirm erscheint, das onAfterExecute Skript läuft, nachdem der Ladeprozess beendet ist. 

Als Entwickler ist es wichtig zu beachten, dass die Skripte auch ausgeführt werden, wenn der Anwender den Prozess im Popup abbricht oder wenn die Daten nur teilweise geladen werden oder der Upload komplett fehlschlägt. Um sicherzustellen, dass die Befehle nur ausgeführt werden, wenn der Prozess vollständig erfolgreich war, kann man folgendes Coding in der onAfterExecute-Methode verwenden (oder natürlich den Status Warnung bzw. Fehler entsprechend abfragen): 

if (status === DataUploadExecutionResponseStatus.Success ) { 

…; 

} 

Dieser Status ist im Event onBeforeExecute nicht bekannt! Achten Sie daher darauf, dass Änderungen aus dem onBeforeExecute-Skript wieder rückgängig gemacht werden, wenn der Anwender den Vorgang abbricht oder es Probleme mit abgelehnten Zeilen gab. 

Leider steht die Information zu den Ablehnungen nicht im Skript zur Verfügung. 

Release Q3/2025

Data Upload: control visibility to rejected records in end-user data upload and data load jobs 

Anwender können nicht abgehlehnte Sätze herunterladen, wenn sie die Daten nicht sehen dürfen 

 

Plan Entry: enforce loading to leaf members during data file upload 

Sicherstellen, dass nur Blätter und nicht Knoten eines Merkmals geladen werden können. 

Bessere Fehlerbearbeitung 

Die Fehlerbearbeitung ist umständlich. Es wäre wünschenswert, fehlerhafte Zeilen direkt in einem Popup-Fenster korrigieren zu können: 

https://influence.sap.com/sap/ino/#/idea/221946 

Beispiel für die File-Struktur

Anwender müssen wissen, wie das File aufgebaut sein muss. Daher sollte ihnen ein Beispiel-File zur Verfügung gestellt werden – idealerweise über einen Link in der Story. Aktuell bietet SAC keine Möglichkeit, ein solches Beispiel-File automatisch aus der Definition des Ladeprozesses zu generieren. 

Kein Laden von Stammdaten möglich 

In der aktuellen Lösung können während des Ladevorgangs nur Bewegungsdaten geändert werden. Stammdaten müssen hingegen vorab in einem separaten Prozess angelegt werden. Derzeit besteht lediglich die Möglichkeit, eine Story anzulegen, in der Stammdaten per Script hinzugefügt werden. SAP hat diese Einschränkung in einem Blog bereits thematisiert und eine Lösung in einem zukünftigen Update angekündigt: 

New End User File Upload in SAP Analytics Cloud QRC3 2024  

Nur feste Spalten im File möglich

In dem Fall, dass z.B. Daten für einen rollierenden Forecast geladen werden sollen, enthalten die Spalten die zu planenden Quartale. Diese ändern sich mit jedem Zyklus. In der aktuellen Lösung müssen die Spaltenüberschriften jedoch fest definiert sein.  

Dies ist in folgendem Blog mit einem Workaround erklärt: 

How to configure a dynamic file upload in SAP Analytics Cloud 

Neben dem Workaround, der hier erklärt wird, kann auch mit einem Hilfs-Datenmodell arbeiten, das beispielsweise immer vier zu planende Quartale enthält. Im Skript nach dem Hochladen könnten die Daten dann aus dem Hilfs-Datenmodell in die aktuellen Planperioden des richtigen Modells geladen werden. 

Die Verbesserungswünsche zu diesem Problem: 

Data Upload Starter with updating Local Dimension Member Option 

Import Job – pivoting on Date dimension doesn’t allow dynamic values 

Daten löschen während des Ladeprozesses 

Bessere Verarbeitung von fehlenden Daten im File im „Aktualisieren“ Fall, wie oben schon erwähnt: 

Data Upload Starter Clean/Replace and Clean/Replace Subset not available 

Dies ist für das Release Q4/2025 geplant: 

Plan Entry: clean and replace for data file upload 

Fazit

Die Lade-Aktivität ist vollständig nachvollziehbar und bietet Transparenz und Nachvollziehbarkeit für alle von Endbenutzern vorgenommenen Datenänderungen. Administratoren können den Verlauf der Daten-Uploads auf der Registerkarte „Datenverwaltung“ einsehen, während das Aktivitätsprotokoll eine detaillierte Nachverfolgung der durch den Upload-Prozess vorgenommenen Änderungen ermöglicht. Derzeit ist es jedoch nicht möglich, die spezifische Zelle zu ermitteln, die das Problem verursacht hat. Dies würde den Benutzern helfen, die Ursache für Ablehnungen leichter zu identifizieren und den gesamten Fehlerbehebungsprozess deutlich verbessern. 

Schließlich erlaubt die Ablehnungsübersicht keine direkten Datenkorrekturen. Benutzer müssen die fehlerhaften Daten manuell in einer neuen Datei anpassen und anschließend über die SAC-Story-Oberfläche erneut hochladen. 

Insgesamt verbessert der neue integrierte Story-Trigger für Flatfile-Uploads in SAC den Planungsworkflow erheblich, da Planer Daten direkt aus Stories hochladen können, ohne auf Modellierer oder Administratoren angewiesen zu sein. Dies rationalisiert den Prozess, unterstützt eine flexible Konfiguration und gewährleistet die Rückverfolgbarkeit durch Upload-Verlauf und Aktivitätsprotokolle. Der Ablehnungsübersicht fehlen jedoch detaillierte Einblicke in Stammdatenfehler, was die Fehlerbehebung bei komplexen Datensätzen zeitaufwändig macht.  

 

Erstellt im August 2025

Ansprech­partner

Frank Liebrand
Head of Sales
Ilya Kirzner
Consultant
Dr. Ulrich Meseth
Senior Consultant
Michael Ochmann
Michael Ochmann
Consultant
Burcin Ince
Consultant
Ahmet-Ömer Özgen
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.