Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit erweiterten Techniken für Metrikansichten können Sie komplexe Geschäftslogik ausdrücken und Definitionen auf der semantischen Ebene wiederverwenden. Auf dieser Seite werden zwei solche Techniken erläutert:
- Fenstermaße: für Zeitreihenberechnungen wie gleitende Mittelwerte, laufende Summen und Periodenüberlaufzeitänderungen.
- Komponierbarkeit: zum Erstellen komplexer Kennzahlen durch Verweis auf andere Kennzahlen, anstatt ihre Logik neu zu schreiben.
Diese Seite setzt voraus, dass Sie mit grundlegenden Konzepten der Metrikansichtsmodellierung vertraut sind. Siehe Modellmetrikansichten.
Note
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 End-to-End-Lernprogramm zur Verwendung dieses Datasets mit Metrikansichten finden Sie im Lernprogramm: Erstellen einer Metrikansicht mit Verknüpfungen und Datenmodellierung.
Fenstermaße
Important
Dieses Feature ist experimentell.
Mit Windows-Measures können Sie in Ihren Metrik-Ansichten Kennzahlen mit windowed, kumulativen oder semiadditiven Aggregationen definieren. Sie unterstützen Berechnungen wie gleitende Durchschnittswerte, Periodenüberlaufzeitänderungen und laufende Summen.
Sie können ein Fenstermaß im Katalog-Explorer-Editor oder in YAML hinzufügen.
Hinzufügen eines Fenstermaßs im Editor
Klicken Sie beim Bearbeiten einer Kennzahl auf der Registerkarte „UI“ des Editors für die Metrikansicht auf + Window. + Fenster ist sowohl im Builder- als auch im Benutzerdefiniert-Modus verfügbar. Die Fensteroptionen im Editor entsprechen den yaML-Feldern, die in "Fenstermaß definieren" beschrieben sind.
Weitere Informationen zum Erstellen und Bearbeiten von Measures finden Sie unter Erstellen einer Metrikansicht.
Definieren eines Fenstermaßs
Ein Fenstermaß enthält die folgenden erforderlichen Felder:
order: Das Feld, das die Reihenfolge des Fensters bestimmt.
range: Definiert den Umfang des Fensters. Unterstützte Werte:
current,cumulative,trailing,leadingundall. Vollständige Syntax und Beschreibungen finden Sie unter "UnterstützterangeWerte". Weitere Informationen zu den Modifikatoreninclusiveundexclusivebeitrailingundleadingfinden Sie unter Ein- oder Ausschließen der Ankerzeile.semiadditive: Gibt an, wie das Measure aggregiert wird, wenn das Bestellfeld nicht in die Abfrage
GROUP BYeinbezogen wird. Mögliche Werte:firstundlast.
Ein Fenstermaß unterstützt auch das folgende optionale Feld:
-
offset: Verschiebt den Fensterrahmen um ein festes Intervall rückwärts oder vorwärts entlang des
orderFelds. Verwenden Sie diese für Kennzahlen im Periodenvergleich wie im Monats- oder Jahresvergleich. Informationen zu Syntax, unterstützten Einheiten und Einschränkungen finden Sie unter Window-Measures.
Wie offset den Fensterrahmen verschiebt
Informationen zu Verfügbarkeit der Funktion „Metrikansicht“ finden Sie unter Mindestanforderungen an Compute und die Version der YAML-Spezifikation.
Das Feld range definiert die Form des Fensters relativ zur Verankerungszeile, und offset verschiebt diesen Rahmen um das angegebene Intervall entlang order. Die folgende Tabelle zeigt den Frame für jeden range-Wert mit und ohne ein offset von k, relativ zur Ankerzeile t:
| range | Rahmen ohne Offset | Rahmen mit offset: k |
|---|---|---|
current |
[t, t] |
[t + k, t + k] |
cumulative |
(-infinity, t] |
(-infinity, t + k] |
trailing N |
[t - N, t) |
[t + k - N, t + k) |
leading N |
(t, t + N] |
(t + k, t + k + N] |
all |
die gesamte Partition | gesamte Partition (unverändert) |
offset ist unabhängig von semiadditive. Die Auswahl first oder last steuert weiterhin, wie das Measure zusammengefasst wird, wenn sich order nicht im GROUP BY der Abfrage befindet.
Passen Sie offset für optimale Ergebnisse an die natürliche Maserung von order an. Bei monatlichen Daten wird offset: -12 month gegenüber offset: -365 day bevorzugt, da die Arithmetik mit Monaten und Jahren unterschiedlich lange Monate und Schaltjahre berücksichtigt, während dies bei der Arithmetik mit day nicht der Fall ist.
Ankerzeile ein- oder ausschließen
Informationen zu Verfügbarkeit der Funktion „Metrikansicht“ finden Sie unter Mindestanforderungen an Compute und die Version der YAML-Spezifikation.
Für die Bereiche trailing und leading steuert das optionale Schlüsselwort inclusive oder exclusive, ob der Fensterwert der Ankerzeile (z. B. heute) Teil des gleitenden Fensters ist:
| Keyword | Bedeutung | Ankerzeile im Bereich? |
|---|---|---|
inclusive |
n Einheiten einschließlich der Ankerzeile. | Ja |
exclusive (Standardwert) |
n Einheiten ohne die Ankerzeile. | No |
Das folgende Beispiel zeigt, wie sich inclusive und exclusive auf das rollierende Fenster für das Ankerdatum 2025-01-05 mit trailing 3 day auswirken.
Gehen Sie davon aus, dass die zugrunde liegenden Daten pro Tag eine Zeile mit den folgenden Werten aufweisen:
| Datum | Wert |
|---|---|
2025-01-02 |
1 |
2025-01-03 |
4 |
2025-01-04 |
2 |
2025-01-05 (Anker) |
5 |
Jeder Modifizierer wählt die Zeilen von drei Tagen relativ zum Ankerpunkt aus und summiert deren Werte:
| Modifikator | Datumsangaben im Fenster | Werte | Summe |
|---|---|---|---|
trailing 3 day inclusive |
01-03, 01-0401-05 |
4 + 2 + 5 |
11 |
trailing 3 day exclusive |
01-02, 01-0301-04 |
1 + 4 + 2 |
7 |
Die leading Bereiche folgen derselben Logik in die entgegengesetzte Richtung.
Beispiel für nachfolgendes, verschiebendes oder führendes Fenstermaß
Im folgenden Beispiel wird eine fortlaufende 7-Tage-Anzahl von Kunden berechnet, die Bestellungen getätigt haben. Diese Metrik verfolgt Trends der Kundeninteraktion im Zeitverlauf, indem sie zeigt, wie viele unterschiedliche Kunden in der Woche vor dem jeweiligen Datum Käufe getätigt haben.
version: 1.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'
fields:
- 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: dateGibt an, dass das Feld dasdateFenster sortiert. -
range: trailing 7 daydefiniert das Fenster als die sieben Tage vor jedem Datum, mit Ausnahme des Datums selbst. -
semiadditive: lastgibt den letzten Wert im 7-Tage-Fenster zurück, wenndatekeine Gruppierungsspalte ist.
Erstellen der Metrikansicht mit SQL
Um diese Metrikansicht außerhalb des Katalog-Explorers zu erstellen, schließen Sie das YAML in CREATE OR REPLACE VIEW ... WITH METRICS LANGUAGE YAML AS ein und platzieren Sie die Definition zwischen den Trennzeichen $$:
CREATE OR REPLACE VIEW catalog.schema.rolling_customers WITH METRICS LANGUAGE YAML AS
$$
version: 1.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'
fields:
- name: date
expr: o_orderdate
measures:
- name: t7d_customers
expr: COUNT(DISTINCT o_custkey)
window:
- order: date
range: trailing 7 day
semiadditive: last
$$
Die anderen vollständigen Definitionen auf dieser Seite folgen demselben Muster.
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 identifiziert tagesaktuelle Umsatztrends und zeigt die prozentuale Umsatzänderung an.
version: 1.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'
fields:
- 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
In diesem Beispiel gilt die folgende Konfiguration:
- Im Beispiel werden zwei Fenstermaße verwendet: eine für die Berechnung des Gesamtumsatzes am vorherigen Tag und eine für den aktuellen Tag.
- Ein drittes Maß berechnet die prozentuale Änderung (Wachstum) zwischen den aktuellen und vorherigen Tagen.
Beispiel für ein Fenstermesswert im Jahresvergleich mit offset
Der offset-Modifikator ist der Grundbaustein für Kennzahlen im Periodenvergleich. Definieren Sie eine verschobene Kopie eines Basismaßes, und erstellen Sie dann die beiden, um Deltas, Verhältnisse oder Wachstumsraten direkt in der Metrikansicht auszudrücken.
Im folgenden Beispiel wird das Umsatzwachstum im Jahr über das Jahr berechnet, indem der Umsatz jedes Monats mit dem gleichen Monat im Vorjahr verglichen wird. Das verschobene Maß verwendet offset: -12 month, um im Feld month 12 Monate zurückzublicken.
version: 1.1
source: main.default.monthly_sales
fields:
- name: month
expr: month
- name: category
expr: category
measures:
- name: monthly_sales
expr: SUM(sales)
window:
- order: month
range: current
semiadditive: last
- name: monthly_sales_py
expr: SUM(sales)
window:
- order: month
range: current
semiadditive: last
offset: -12 month
- name: yoy_growth
expr: MEASURE(monthly_sales) - MEASURE(monthly_sales_py)
- name: yoy_growth_pct
expr: (MEASURE(monthly_sales) - MEASURE(monthly_sales_py))
/ NULLIF(MEASURE(monthly_sales_py), 0)
In diesem Beispiel gilt die folgende Konfiguration:
-
monthly_salesist das Basismaß, das den Umsatz für den aktuellen Monat addiert. -
monthly_sales_pyist dasselbe Maß, um 12 Monate nach hinten verschoben mitoffset: -12 month. Für Januar 2025 gibt sie den Wert für Januar 2024 zurück. -
yoy_growthundyoy_growth_pctbilden die beiden Measures, mit denen die absolute und prozentuale Änderung ausgedrückt wird. Die VerwendungNULLIFvermeidet Divid-by-Zero-Fehler, wenn der Wert des Vorherigen Jahres null ist.
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'
fields:
- 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
In diesem Beispiel gilt die folgende Konfiguration:
-
order: datesortiert das Fenster chronologisch. -
range: cumulativedefiniert das Fenster als alle Daten vom Anfang des Datasets bis einschließlich jedes Datums. -
semiadditive: lastgibt den aktuellsten kumulierten Wert zurück, wenndatenicht imGROUP BYder Abfrage enthalten ist, anstatt die Werte über alle Datumsangaben hinweg zu summieren.
Beispiel für eine Kennzahl seit Periodenbeginn
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.
version: 1.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1997-01-01'
fields:
- name: date
expr: o_orderdate
- name: month
expr: DATE_TRUNC('MONTH', date)
- name: year
expr: DATE_TRUNC('year', date)
measures:
- name: ytd_sales
expr: SUM(o_totalprice)
window:
- order: date
range: cumulative
semiadditive: last
- order: year
range: current
semiadditive: last
In diesem Beispiel gilt die folgende Konfiguration:
- Im Beispiel werden zwei Fensterspezifikationen verwendet: eine für die kumulierte Summe über das
dateFeld und eine andere, um die Summe auf dascurrentJahr zu begrenzen. - Das
yearFeld schränkt die kumulierte Summe so ein, dass sie zu Beginn jedes neuen Jahres zurückgesetzt wird. - Die Felder
monthundyearbilden für das Bestellfelddateeine Datumshierarchie: Jedes wird im Felddateüber den Namen definiert, nicht in der zugrunde liegenden Spalteo_orderdate, sodass Abfragen diese Kennzahl nach diesen Feldern gruppieren können. Siehe Gruppieren nach einem Datumshierarchiefeld.
Beispiel einer semiadditiven Kennzahl
Im folgenden Beispiel werden Kontosaldos berechnet, die nicht über Datumsangaben summiert werden dürfen (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
fields:
- name: date
expr: date
- name: customer
expr: customer_id
measures:
- name: semiadditive_balance
expr: SUM(balance)
window:
- order: date
range: current
semiadditive: last
In diesem Beispiel gilt die folgende Konfiguration:
-
order: datesortiert das Fenster chronologisch. -
range: currentBeschränkt das Fenster auf einen einzelnen Tag ohne Aggregation über Tage hinweg. -
semiadditive: lastgibt den letzten Saldo zurück, wenn er über mehrere Tage aggregiert wird.
Note
Dieses Fenster summiert weiterhin für alle Kunden, um den täglichen Gesamtsaldo zu erhalten.
Fenstergröße abfragen
Sie können eine Metrikansicht mit einem Fenstermaß genauso abfragen wie jede andere Metrikansicht. Ein Fenstermesswert wird entlang seines Felds order berechnet, sodass eine Abfrage, die Ergebnisse im Zeitverlauf aufschlüsselt, auf dieses Feld Bezug nehmen muss, entweder direkt oder über ein darauf definiertes Datumshierarchiefeld. Wenn die Abfrage nicht auf das Bestellfeld verweist, bestimmt das semiadditive Schlüsselwort den zurückgegebenen Wert, wie im Beispiel für semiadditives Measure beschrieben.
Im folgenden Beispiel wird ein Fenstermaß nach state und nach einem Monatsausdruck über das Bestellfeld dategruppiert:
SELECT
state,
DATE_TRUNC('month', date),
MEASURE(t7d_customers) as m
FROM my_metric_view
WHERE date >= DATE'2024-06-01'
GROUP BY ALL
Gruppieren nach einem Datumshierarchiefeld
Eine Datumshierarchie fasst das Sortierfeld auf gröbere Granularitäten wie Woche, Monat oder Jahr zusammen. Definieren Sie jede Ebene als Feld über den Namen des Sortierfelds, nicht über die zugrunde liegende Quellspalte:
fields:
- name: date
expr: o_orderdate
# Date hierarchy: each level is defined on the order field `date`,
# not on the underlying o_orderdate column.
- name: month
expr: DATE_TRUNC('MONTH', date)
- name: year
expr: DATE_TRUNC('year', date)
Die Gruppierung eines Fenstermaßes nach einer Hierarchieebene liefert das Maß auf dieser Granularitätsebene. Wenn das Period-to-date-Beispiel wie im ytd_metric_view als erstellt wird, gibt die folgende Abfrage den YTD-Wert zum letzten Datum eines jeden Monats zurück:
SELECT month, MEASURE(ytd_sales) AS ytd_sales
FROM ytd_metric_view
GROUP BY month
ORDER BY month;
Warning
Das Definieren einer Hierarchieebene in der zugrunde liegenden Quellspalte, beispielsweise DATE_TRUNC('MONTH', o_orderdate), unterbricht die Verknüpfung mit dem Sortierfeld date, obwohl die Ausdrücke äquivalent erscheinen. Das Gruppieren eines Fenstermaßs nach einem solchen Feld gibt falsche Ergebnisse zurück.
Kombinierbarkeit
Metrikansichten sind kombinierbar. Sie können neue Felder und Measures erstellen, die auf vorhandene Felder verweisen, anstatt Logik von Grund auf neu zu schreiben. Dadurch wird die Duplizierung reduziert und die Verwaltung komplexer Metrikdefinitionen vereinfacht.
Die Kombinierbarkeit funktioniert auf zwei Ebenen: innerhalb einer einzelnen Metrikansicht und über mehrere Metrikansichten hinweg, wenn eine Metrikansicht als Quelle für eine andere verwendet wird.
Die Komponierbarkeit unterstützt die folgenden Referenzmuster:
- Frühere Felder in neuen Feldern.
- Felder und frühere Messungen in neuen Messungen.
- Felder aus Metrikansichten, die als Quelle in neuen Feldern verwendet werden.
- Felder und Kennzahlen aus Metrikansichten, die in neuen Kennzahlen als Quelle 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 | Description | Example |
|---|---|---|
| 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
-
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. - Verwenden Sie für Verweise
MEASURE(): Verwenden Sie dieMEASURE()-Funktion zum Verweisen auf ein anderes Maß innerhalb einesexpr. Wiederholen Sie die Aggregationslogik nicht manuell. Beispielsweise vermeiden SieSUM(a) / COUNT(b), wenn Maßnahmen für beide Werte bereits vorhanden sind. -
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. - 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.