Ansicht
Dokumentation

CL_RSDRI_POSTFLTR - Filtert Ergebnisse in RSDRI_INFOPROV_READ nach

CL_RSDRI_POSTFLTR - Filtert Ergebnisse in RSDRI_INFOPROV_READ nach

General Data in Customer Master   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

RSDRI-Postfilter:

Filtert Daten eines Infoproviders in der Methode 'Read' der Klasse CL_RSDRI_INFOPROV entsprechend den RSDRI Selektionsbedingungen (Parameter: 'i_t_range' und 'i_th_tablsel'), falls der Infoprovider selbst nicht die Filterung durchführen kann (z.B. externe Infoprovider).

Der RSDRI-Postfilter wird in 2 Phasen ausgeführt, die von folgenden Methoden umgesetzt werden:

  1. Phase 1 ('Constructor' und Methode 'build_filter'): Aus den Parametern 'i_t_range' und 'i_th_tablsel' wird ein opt. Ausführungsplan erstellt, der den Filter umsetzt. Der Ausführungsplan besteht aus einzelnen Operatoren. Als logische Operatoren werden die Selektion, der Semi-Join, der Sort und der Scan-Operator eingesetzt. Die Selektion führt die Filterung entsprechend des 'i_t_range' Parameters durch (inkl. Hierarchieselektion). Der Semi-Join Operator setzt eine Tabellenselektion (aus 'i_th_tablsel') um. Für jede logische Operation (Selektion und Semi-Join) gibt es mehrere physische Implementierungen (z.B. Hash- oder Sortmerge Semi-Join), die entsprechend den Daten gewählt werden, um eine optimale Ausführung zu erzielen. Siehe Methode 'build_filter' der Klasse CL_RSDRI_POSTFLTR.
  2. Phase 2 (Methode 'filter'): Anschließend wird der Ausführungsplan ausgeführt (d.h. die tatsächliche Filterung wird auf jedes Datenpacket angewendet). Siehe Methode 'filter' der Klasse CL_RSDRI _POSTFLTR.

Die folgenden physischen Operatoren sind aktuell umgesetzt:

  • CL_RSDRI_FLTROP_SELABAP: Der Operator setzt einen Filter auf einer internen Tabelle mit Hilfe von ABAP Mitteln (dyn. WHERE-Bedingung auf einer internen Tabelle).
  • CL_RSDRI_FLTROP_MDS: Der Operator setzt einen Filter auf einer internen Tabelle mit Hilfe der Klasse CL_RSMDS_FILTER Filter um, die Service-Methoden für multidimensionale Daten bietet. Diese Klasse kann als Alternative von CL_RSDRI_FLTROP_SELABAP verwendet werden, in denen es noch keine dyn. WHERE-Bedingung auf internen Tabellen gibt).
  • CL_RSDRI_FLTROP_SMSEMIJOIN: Die Klasse setzt einen Sort-Merge-Semijoin um, der die Nachfilterung der Tabellenseletkion (d.h. des Parameters 'i_th_tablsel') ermöglicht. Der Join ist ein Semi-Equi-Join auf einen Attribute der internen Tabelle und dem in 'i_th_tablsel' angegebenen Attribut der Datenbanktabelle.
  • CL_RSDRI_FLTROP_SMSEMIJOIN: Die Klasse setzt einen Hash-Semijoin um, der die Nachfilterung der Tabellenseletkion (d.h. des Parameters 'i_th_tablsel') ermöglicht. Die Semantik des Joins ist wie zuvor für die Klasse CL_RSDRI_FLTROP_SMSEMIJOIN beschrieben.
  • CL_RSDRI_FLTROP_SORT: Die Klasse setzt einen Sort-Operator auf einer internen Tabelle für ein Sortierattribut um. Dient zur Umsetzung des
  • Sort-Merge-Semijoins.
  • CL_RSDRI_FLTROP_MSORT: Die Klasse setzt einen Sort-Operator auf einer internen Tabelle für mehrere Sortierattribute um. Die zur Umsetzung einer Sortierreihenfolge, die in der 'i_th_sfc' angegeben ist.
  • CL_RSDRI_FLTROP_EMPTY: Liefert eine leere interne Tabelle mit den in 'i_th_sfc' angegeben Attributen. Dient zur Optimierung der Filterung, falls bekannt ist, dass der Filter ein leeres Ergebnis liefern muss (z.B. bei Join-Attributen mit unterschiedlichen Datentypen).
  • CL_RSDRI_FLTROP_SCAN: Die Klasse setzt einen Scan-Operator für ein Datenpacket um, das von einem Infoprovider zurückgeliefert wird. Die Klasse implementiert eine Methode 'push_data' die ein neues Datenpacket dem Postfilter zur Filterung bereitstellt.

Jeder der o.g. Operatoren ist als Iterator umgesetzt (Methoden: 'open', 'next', 'close'):

  • Die Methode 'open' bereitet die Filterung vor (z.B. Erzeugen von Hash-Tabellen).
  • Die Methode 'next' wendet den Operator auf ein Datenpacket an.
  • Die Methode 'close' räumt nach der Filterung auf (z.B. leert gepufferte Hash-Tabellen).

Beziehungen

Der RSDRI-Postfilter wird in der Klasse CL_RSDRI_INFOPROV verwendet.

Beispiel

Eine RSDRI Selektionsbedingung mit:

  • i_t_range:
  • i_th_tablesel:

kann als folgender Ausführungsplan umgesetzt werden (Datenfluss vom Blatt zur Wurzel):

Hash-Semijoin (Bedingung: 0product = tmptbl1-product)
|            |
|            tmptbl1
|
ABAP-Selektion (Bedingung: 0customer = 'SAP')
|
Scan (Lesen der RSDRI Datenpackete)

Hinweise

Weiterführende Informationen






Fill RESBD Structure from EBP Component Structure   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 5549 Date: 20240426 Time: 170504     sap01-206 ( 61 ms )