Erweiterte Techniken für Metrikansichten

Erweiterte Techniken für Metrikansichten ermöglichen anspruchsvolle Berechnungen wie gleitende Mittelwerte, Period-over-Period-Änderungen, laufende Summen und komplexe abgeleitete KPIs, wobei Konsistenz und Wiederverwendbarkeit auf der semantischen Ebene beibehalten werden. Auf dieser Seite wird erläutert, wie Sie Fenstermaße für Zeitreihenanalyse und Erstellung komplexer Metriken aus einfacheren Measures verwenden.

Diese Seite setzt voraus, dass Sie mit grundlegenden Konzepten der Metrikansichtsmodellierung vertraut sind. Siehe Modellmetrikansichten.

Hinweis

Die Beispiele auf dieser Seite verwenden das TPC-H Beispiel-Dataset, das eine Großhandels-Lieferkette modelliert. Weitere Informationen zum TPC-H-Datasets finden Sie unter tpch. Ein ende-to-End-Lernprogramm, das dieses Dataset mit Metrikansichten verwendet, finden Sie unter Lernprogramm: Erstellen einer vollständigen Metrikansicht mit Verknüpfungen.

Fenstermaße

Von Bedeutung

Dieses Feature ist experimentell.

Mithilfe von Fenstermaßen können Sie Measures mit Fenstern, kumulierten oder semi-additiven Aggregationen in Ihren Metrikansichten definieren und Berechnungen wie gleitende Mittelwerte, Periodenüberlaufänderungen und laufende Summen unterstützen. Dieser Abschnitt enthält praktische Beispiele.

Definieren eines Fenstermaßs

Fensterfunktionen ermöglichen das Definieren von Kennzahlen mithilfe von Fenstern, kumulierten oder semi-additiven Aggregationen. Ein Fenstermaß enthält die folgenden erforderlichen Werte:

  • order: Die Dimension, die die Reihenfolge des Fensters bestimmt.

  • bereich: Definiert den Umfang des Fensters, z. B. nachgestellte, kumulierte oder alle Daten. Mögliche Bereichswerte umfassen die Folgenden:

    • current: Enthält Zeilen, bei denen der Fensterreihenfolgewert dem Wert der aktuellen Zeile entspricht.
    • cumulative: Enthält alle Zeilen, bei denen der Fensterreihenfolgewert kleiner oder gleich dem Wert der aktuellen Zeile ist.
    • trailing <value> <unit>: Enthält Zeilen aus der aktuellen Zeile, die um die angegebene Anzahl von Zeiteinheiten rückwärts geht, z trailing 3 months. B. . Dies schließt nicht die aktuelle Einheit ein. Schließt beispielsweise trailing 3 months den aktuellen Monat aus.
    • leading <value> <unit>: Enthält Zeilen ab der aktuellen Zeile, die um die angegebene Anzahl von Zeiteinheiten, z. B. leading 7 days, vorwärts gehen. Dies schließt nicht die aktuelle Einheit ein.
    • all: Schließt alle Zeilen unabhängig vom Fensterwert ein.
  • semiadditive: Gibt an, wie das Measure aggregiert wird, wenn das Bestellfeld nicht in die Abfrage GROUP BYeinbezogen wird. Mögliche Werte sind first und last.

Beispiel für nachfolgendes, verschiebendes oder führendes Fenstermaß

Im folgenden Beispiel wird eine fortlaufende 7-tägige Anzahl eindeutiger Kunden berechnet, die Bestellungen getätigt haben. Diese Metrik hilft, Kundenengagement-Trends im Laufe der Zeit nachzuverfolgen, indem sie zeigt, wie viele unterschiedliche Kunden in der Woche vor jedem Datum Einkäufe getätigt haben.

version: 1.1

source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'

dimensions:
  - name: date
    expr: o_orderdate

measures:
  - name: t7d_customers
    expr: COUNT(DISTINCT o_custkey)
    window:
      - order: date
        range: trailing 7 day
        semiadditive: last

In diesem Beispiel gilt die folgende Konfiguration:

  • order: date Gibt an, dass die Datumsdimension das Fenster anordnet.
  • Bereich: Das Fenster wird von der trailing 7 day Spezifikation als die sieben Tage vor jedem Datum definiert, wobei das Datum selbst ausgeschlossen ist.
  • semiadditive: last Gibt den letzten Wert im 7-Tage-Fenster an, wenn das Datum keine Gruppierungsspalte ist.

Beispiel für Perioden-zu-Perioden-Fenstermessung

Im folgenden Beispiel wird das tägliche Umsatzwachstum berechnet, indem der Umsatz von heute (Summe aller Bestellpreise) mit dem Umsatz von gestern verglichen wird. Diese Metrik hilft bei der Identifizierung der täglichen Verkaufstrends und zeigt die prozentuale Umsatzänderung an, die für die Überwachung der Geschäftsleistung und das Erkennen von Anomalien nützlich ist.

version: 1.1

source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'

dimensions:
  - name: date
    expr: o_orderdate
measures:
  - name: previous_day_sales
    expr: SUM(o_totalprice)
    window:
      - order: date
        range: trailing 1 day
        semiadditive: last
  - name: current_day_sales
    expr: SUM(o_totalprice)
    window:
      - order: date
        range: current
        semiadditive: last
  - name: day_over_day_growth
    expr: (MEASURE(current_day_sales) - MEASURE(previous_day_sales)) / MEASURE(previous_day_sales) * 100

Für dieses Beispiel gelten die folgenden Bedingungen:

  • Es werden zwei Zeitfenster verwendet: eines für die Berechnung des Gesamtumsatzes am Vortag und eines für den aktuellen Tag.

  • Ein drittes Maß berechnet die prozentuale Änderung (Wachstum) zwischen den aktuellen und vorherigen Tagen.

Beispiel für kumulatives (laufendes) Gesamtmaß

Im folgenden Beispiel werden die kumulierten Umsatzerlöse vom Anfang des Datasets bis zu jedem Datum berechnet. Diese laufende Summe zeigt, wie viel Gesamtumsatz im Laufe der Zeit generiert wurde, nützlich für die Verfolgung des Fortschritts in Richtung jährlicher Umsatzziele oder die Analyse langfristiger Wachstumsmuster.

version: 1.1
source: samples.tpch.orders

filter: o_orderdate > DATE'1998-01-01'

dimensions:
  - name: date
    expr: o_orderdate
  - name: customer
    expr: o_custkey

measures:
  - name: running_total_sales
    expr: SUM(o_totalprice)
    window:
      - order: date
        range: cumulative
        semiadditive: last

Die folgenden Details heben die wichtigsten Teile dieser Definition hervor:

  • order: Gibt die Dimension an, die die Sortierung von Datensätzen innerhalb des Fensters definiert. In diesem Beispiel date wird das Fenster chronologisch sortiert.

  • bereich: cumulative Definiert das Fenster als alle Daten vom Anfang des Datasets bis einschließlich jedes Datums.

  • semiadditive: last Steuert, wie das Maß aggregiert wird, wenn date nicht in der Abfrage enthalten ist. Wenn die Datumsdimension nicht in die Abfrage GROUP BYeinbezogen wird, gibt das Measure den letzten (aktuellsten) kumulativen Wert zurück, anstatt alle Datumsangaben zu addieren.

Beispiel für Punkt-zu-Datum-Maß

Im folgenden Beispiel wird der Umsatzumsatz (Year-to-Date, YTD) berechnet. Diese Maßnahme zeigt den kumulierten Umsatz, der vom 1. Januar jedes Jahres bis zum aktuellen Datum generiert wurde und zu Beginn jedes neuen Jahres zurückgesetzt wird. Diese Metrik ist unerlässlich, um die Performance des aktuellen Jahres mit den Vorjahren zu vergleichen und den Fortschritt in Richtung der jährlichen Ziele zu verfolgen.

version: 1.1

source: samples.tpch.orders
filter: o_orderdate > DATE'1997-01-01'

dimensions:
  - name: date
    expr: o_orderdate
  - name: year
    expr: DATE_TRUNC('year', o_orderdate)
measures:
  - name: ytd_sales
    expr: SUM(o_totalprice)
    window:
      - order: date
        range: cumulative
        semiadditive: last
      - order: year
        range: current
        semiadditive: last

Die folgenden Details heben die wichtigsten Teile dieser Definition hervor:

  • Es werden zwei Fenstermaße verwendet: eine für die kumulierte Summe über die date Dimension und eine weitere, um die Summe auf das current Jahr zu begrenzen.

  • Die year Dimension beschränkt die kumulierte Summe, um sie nur innerhalb des aktuellen Jahres zu berechnen.

Beispiel einer semiadditiven Kennzahl

Im folgenden Beispiel werden Kontosaldos berechnet, die nicht über Datumsangaben addiert werden sollten (Sie können den Saldo von Montag nicht zum Guthaben am Dienstag hinzufügen, um den Gesamtsaldo zu erhalten). Stattdessen gibt die Maßnahme beim Aggregieren über mehrere Tage hinweg den letzten Saldo zurück. Die Maßnahme kann jedoch weiterhin über Kunden hinweg addiert werden, um das Gesamtguthaben für alle Konten an einem bestimmten Tag anzuzeigen.

version: 1.1

dimensions:
  - name: date
    expr: date
  - name: customer
    expr: customer_id

measures:
  - name: semiadditive_balance
    expr: SUM(balance)
    window:
      - order: date
        range: current
        semiadditive: last

Die folgenden Details heben die wichtigsten Teile dieser Definition hervor:

  • order: Gibt die Dimension an, die die Sortierung von Datensätzen innerhalb des Fensters definiert. In diesem Beispiel date wird das Fenster chronologisch sortiert.

  • Bereich: current Beschränkt das Fenster auf einen einzelnen Tag ohne Aggregation über Tage hinweg.

  • Semiadditive: last Gibt den letzten Saldo zurück, wenn er über mehrere Tage aggregiert wird.

Fenstergröße abfragen

Sie können eine Metrikansicht mit einem Fenstermaß genauso abfragen wie jede andere Metrikansicht. Im folgenden Beispiel wird eine Metrikansicht abgefragt.

SELECT
   state,
   DATE_TRUNC('month', date),
   MEASURE(t7d_customers) as m
FROM my_metric_view
WHERE date >= DATE'2024-06-01'
GROUP BY ALL

Kombinierbarkeit

Metrikansichten sind kombinierbar. Sie können neue Dimensionen und Kennzahlen erstellen, die auf vorhandene Dimensionen verweisen, anstatt die Logik von Grund auf neu zu schreiben. Dadurch wird die Duplizierung reduziert und die Verwaltung komplexer Metrikdefinitionen vereinfacht.

Die Komponierbarkeit funktioniert auf zwei Ebenen: innerhalb einer einzelnen Metrikansicht und über mehrere Metrikansichten hinweg. Eine Metrikansicht kann eine andere Metrikansicht als Quelle verwenden, sodass Sie Layerdefinitionen erstellen und schrittweise umfangreichere semantische Modelle erstellen können, ohne Logik zu duplizieren.

Die Komponierbarkeit unterstützt die folgenden Referenzmuster:

  • Frühere Dimensionen in neuen Dimensionen.
  • Dimensionen und frühere Messgrößen in neuen Messgrößen.
  • Dimensionen aus Metrikansichten, die als Quelle in neuen Dimensionen verwendet werden.
  • Dimensionen und Messungen aus metrischen Ansichten, die als Quelle in neuen Messungen verwendet werden.

Maßnahmen mit Komponierbarkeit definieren

Im measures-Abschnitt können Sie auf Maßnahmen aus der Quellmetrikansicht oder auf Maßnahmen verweisen, die zuvor in derselben Metrikansicht definiert wurden. Dieser Ansatz verbessert Konsistenz, Auditierbarkeit und Wartung Ihrer semantischen Ebene.

Typ der steuerlichen Maßnahme Beschreibung Beispiel
Atomic Eine einfache, direkte Aggregation in einer Quellspalte. Diese bilden die Bausteine. SUM(o_totalprice)
Zusammengesetzt Ein Ausdruck, der eine oder mehrere andere Kennzahlen mithilfe der MEASURE()-Funktion mathematisch kombiniert. MEASURE(total_revenue) / MEASURE(order_count)

Beispiel: Durchschnittlicher Bestellwert (AOV)

Im folgenden Beispiel wird der durchschnittliche Bestellwert (Average Order Value, AOV) mithilfe von zwei Atommaßen definiert: total_revenue (Summe der Auftragspreise) und order_count (Anzahl der Bestellungen). Die avg_order_value Messung bezieht sich auf beide atomaren Messungen.

version: 1.1

source: samples.tpch.orders

measures:
  # Total Revenue
  - name: total_revenue
    expr: SUM(o_totalprice)

  # Order Count
  - name: order_count
    expr: COUNT(1)

  # Composed Measure: Average Order Value (AOV)
  - name: avg_order_value
    # Defines AOV as Total Revenue divided by Order Count
    expr: MEASURE(total_revenue) / MEASURE(order_count)

Wenn sich die total_revenue Definition ändert (z. B. um Steuern auszuschließen), avg_order_value wird automatisch die aktualisierte Definition verwendet.

Kompositierbarkeit mit bedingter Logik

Sie können die Komponierbarkeit verwenden, um komplexe Verhältnisse, bedingte Prozentsätze und Wachstumsraten zu erstellen, ohne sich auf Fensterfunktionen für einfache Periodenberechnungen zu verlassen.

Beispiel: Erfüllungsrate

Im folgenden Beispiel wird die Erfüllungsrate berechnet: der Prozentsatz der Bestellungen mit dem Status 'F' (erfüllt). Die Maßnahme teilt die erfüllten Bestellungen durch die Gesamtaufträge.

version: 1.1

source: samples.tpch.orders

measures:
  # Total Orders (denominator)
  - name: total_orders
    expr: COUNT(1)

  # Fulfilled Orders (numerator)
  - name: fulfilled_orders
    expr: COUNT(1) FILTER (WHERE o_orderstatus = 'F')

  # Composed Measure: Fulfillment Rate (Ratio)
  - name: fulfillment_rate
    expr: MEASURE(fulfilled_orders) / MEASURE(total_orders)
    format:
      type: percentage

Bewährte Methoden für die Komponierbarkeit

  1. Definieren Sie zuerst atomare Maßeinheiten: Legen Sie grundlegende Maßeinheiten (SUM, COUNT, AVG) fest, bevor Sie Maßnahmen definieren, die auf diese Bezug nehmen.
  2. Verwenden Sie für VerweiseMEASURE(): Verwenden Sie die MEASURE()-Funktion zum Verweisen auf ein anderes Maß innerhalb eines expr. Wiederholen Sie die Aggregationslogik nicht manuell. Beispielsweise vermeiden Sie SUM(a) / COUNT(b), wenn Maßnahmen für beide Werte bereits vorhanden sind.
  3. Lesbarkeit priorisieren: Verfassen von Maßnahmen mit klaren mathematischen Formeln. Ist beispielsweise MEASURE(gross_profit) / MEASURE(total_revenue) klarer als ein einzelner komplexer SQL-Ausdruck.
  4. Fügen Sie semantische Metadaten hinzu: Verwenden Sie semantische Metadaten, um zusammengesetzte Measures (z. B. Prozentsätze oder Währungen) für nachgeschaltete Tools zu formatieren. Siehe Agentmetadaten in Metrikansichten.

Nächste Schritte