Direct Update DSOs und InfoCube-ähnliche ADSOs sind vielfältig in der Planung einsetzbar. Über die Zeit sammeln sich jedoch viele Null-Datensätze an, die nicht gelöscht werden können. In diesem Artikel zeige ich Ihnen einen Trick, wie Sie diese Nullsätze loswerden können.
Direct Update DSOs werden gerne in der Planung als Steuertabellen genutzt, um zum Beispiel dem Benutzer die Möglichkeit zu geben zwischen Planungszyklen umzuschalten oder flexibel Datenscheiben zu setzen. Darüber hinaus werden sie auch als Speicherort für Kommentare und besonders bei der Planung von Bestandskennzahlen (z.B. Preisplanung) verwendet.
Allerdings sammelt sich über die Zeit viel Datenmüll an - sprich, es existieren viele Datensätze mit dem Kennzahlwert 0. Möchte man diese nun löschen und denkt dabei an die Funktion ‘Selektives Löschen’ ist dies jedoch nur anhand von Merkmalen möglich. In unserem Fall wollen wir aber merkmalsunabhängig alle Datensätze löschen, bei denen die Kennzahl 0 ist.
Die Lösung ist ganz einfach. Da bei einem Direct Update DSO nur die Tabelle für aktive Daten existiert, können die darin enthaltenen Datensätze mit einer Zeile ABAP gelöscht werden.
In unserem Beispiel wird das aDSO ZDRDFLAG als Steuertabelle für den Planungszyklus verwendet. Die Kennzahl ZDRFLAG gilt als Indikator für das Jahr, welches geplant werden soll (1 = aktiv, 0 = inaktiv).
Die aktive Tabelle des ADSOs lautet /BIC/AZDRDFLAG2. Sie können alle Tabellen des ADSOs auflisten, indem Sie in ABAP Dictionary (Transaktion SE11) eine Wildcard-Suche nach dem DSO-Namen durchführen: *ZDRDFLAG*.
Diesen Tabellennamen können wir nun im Coding verwenden. Dazu legen wir ein Programm (Transaktion SE38) mit der folgenden Zeile an:
DELETE FROM /bic/azdrdflag2 WHERE /bic/zdrflag = 0.
Nach der Ausführung ist der Datensatz mit dem Flag = 0 gelöscht und der Datensatz mit Flag = 1 ist weiterhin vorhanden.
Hinweis:
Bitte beachten Sie, dass das Löschen auf der Datenbankebene irreparabel ist und die Daten nur durch eine Backup-Einspielung wiederherstellbar sind. Testen Sie daher Ihr Programm ausgiebig auf der Entwicklungsumgebung, bevor Sie es auf dem Produktivsystem einsetzen.
Leider können Sie bei InfoCube ähnlichen ADSOs keine Komprimierung mit Null-Elimination durchführen, wie es bei normalen InfoCubes der Fall war. Allerdings können Sie den oben beschriebenen Ansatz nutzen, um auch Datensätze aus einem InfoCube-ähnlichen ADSO zu löschen.
Beachten Sie jedoch, dass bei einem InfoCube-ähnlichen ADSO neben der aktiven Tabelle auch eine Eingangstabelle genutzt wird. Dort werden die für InfoCubes typischen Delta-Sätze geschrieben.
Nach einer Aktivierung der Requests werden die Datensätze komprimiert und in die aktive Tabelle verlagert. Dazu müssen Sie das ADSO in den Lademodus umschalten.
Nun können Sie folgendes Coding nutzen, um die Nullsätze aus dem ADSO zu entfernen:
DELETE FROM /bic/azdrtest62 WHERE amount = 0.
Hinweis:
Bitte beachten Sie, dass das Löschen auf der Datenbankebene irreparabel ist und die Daten nur durch eine Backup-Einspielung wiederherstellbar sind. Testen Sie daher Ihr Programm ausgiebig auf der Entwicklungsumgebung, bevor Sie es auf dem Produktivsystem einsetzen.
Wie Sie sehen, gibt es immer Lösungen zu Problemen, die bisher von SAP noch nicht angegangen wurden. Lösungen wie die hier dargestellte sind jedoch mit großer Vorsicht zu genießen, da Sie direkt auf der Datenbank operieren und solche Änderungen in den Daten irreparabel sind.