Window Functions und Window Specification
Welche Arten von Functions gibt es in SAP Datasphere und SAP HANA?
Analytic Model:
- Nur kurierte Auswahl von Funktionen in Datasphere
- Keine Window Functions
SQL Views und Calculated Columns in Graphical Views unterstützen:
- Alle HANA Funktionen → Alphabetical List Of Functions | SAP Help Portal
- Aggregate Functions → Aggregate Functions | SAP Help Portal
- Window Functions → Windows Functions | SAP Help Portal
- Window Aggregate Functions → Window Aggregate Functions | SAP Help Portal
- Window Aggregate Functions und Window Specifications → Window Functions and the Window Specification | SAP Help Portal
Was ist eine Window Specification?
Window Functions mit einfachen Window Specifications
MIN("CPUDT") OVER (PARTITION BY "KUNNR", "MATNR") AS "ZMINDATE"
MAX("CPUDT") OVER (PARTITION BY "KUNNR", "MATNR") AS "ZMAXDATE"
SUM("KWMENG") OVER (PARTITION BY "KUNNR", "MATNR", "VBELN") AS "ZORDERQTY"
SUM("MEINS") OVER (PARTITION BY "KUNNR", "MATNR", "VBELN") AS "ZORDERQTYBME"
SUM("KWMENG") OVER (PARTITION BY "KUNNR", "MATNR") AS "ZTOTALQTY"
SUM("MEINS") OVER (PARTITION BY "KUNNR", "MATNR") AS "ZTOTALQTYBME"
Window Functions mit komplexen Window Specifications
LAST_VALUE("ZORDERQTY") OVER(PARTITION BY "KUNNR","MATNR" ORDER BY "CPUDT", "VBELN" ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS "ZLASTORDERQTY"
MIN("CPUDT") OVER(PARTITION BY "KUNNR", "MATNR" ORDER BY "CPUDT" ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS "ZPREVDATE"
Man kann mit dem Ergebnis einer Window Function in der gleichen View nicht arbeiten, daher wird das Ergebnis auch in der nachfolgenden Zeile nochmal gerechnet.
Im HANA SQL Analyzer sehen wir später, dass das Feld trotzdem nur ein Mal berechnet wird.
DAYS_BETWEEN( (MIN("CPUDT") OVER(PARTITION BY "KUNNR", "MATNR" ORDER BY "ERDAT" ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)), "ERDAT") AS "ZDATEDIFF"
Laufzeitanalyse
Vorgehen
HANA Database Explorer öffnen
SQL Console öffnen
Zu Column Views gehen → Analytic Model View rechtsklick → Generate SQL Select Statement
Menü Analyze → Generate SQL Analyzer Plan File → File Prefix eingeben, z.B. AM Name. → Save → Download
Business Application Studio öffnen → Dev Space HANA benutzen
In Explorer Prespektive → Rechtsklick → Hochladen → SQL Analyzer Plan File auswählen
SQL Analyzer Plan File doppelklicken um HANA SQL Analyzer zu öffnen
Beobachtungen
- Table Scan auf der Basistabelle über gesamten Tabelleninhalt
- Filter werden erst angewendet, nachdem Window Aggregate Functions berechnet wurden
Lessons Learned
- Window Aggregate Function Ergebnisse müssen wie materialisierte Tabellendaten betrachtet werden. D.h.:
- Window Aggregate Functions und Window Specification arbeitet immer auf den Basis-Daten der WHERE Clause des SQL Views.
- Vom Analytic Model auf das SQL Statement runtergedrückte Filter werden nur auf dem Endergebnis der Window Aggregate Function angewendet. Sie beeinflussen das Endergebnis nicht. → Beeinflußung nur möglich durch entsprechende SQLScript Codings innerhalb der SQL View.
- Window Aggregate wird für alle Datensätze ausgerechnet vor dem anwenden des vom Analytic Model runtergedrücken Filters → Laufzeit beachten bei großen Datenmengen.
- Innerhalb einer View keine Möglichkeit mit dem Ergebnis einer Window Aggregate Function zu arbeiten
- Layer bilden, vergleichbar mit internen Tabellen mit Zwischenergebnissen