Window Functions und Window Specification

Aus MattWiki
Version vom 26. April 2025, 22:15 Uhr von Matt (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== 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 → [https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/alphabetical-list-of-functions Alphabetical List Of Functions | SAP Help Portal] * Aggregate Fu…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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:

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