Lernprogramm: Erstellen einer Metrikansicht mit Verknüpfungen und Datenmodellierung

In diesem Lernprogramm erstellen Sie eine Metrikansicht der Vertriebsanalyse für das TPC-H-Dataset. Am Ende haben Sie eine Metrikansicht, die:

  • Verknüpft Bestellungen und Kunden über mehrere Tabellen hinweg mithilfe eines Schneeflockenschemas.
  • Definiert Felder (auch als Dimensionen bezeichnet) für Zeit-, Geografie- und Reihenfolgeattribute.
  • Berechnet einfache und komplexe Kennzahlen, darunter Verhältniszahlen, gefilterte Aggregationen und Fensterkennzahlen.
  • Verwendet die Kompositierbarkeit, um komplexe Metriken aus einfacheren Measures zu erstellen.
  • Definiert einen Parameter, um einen Rabattsatz zur Abfragezeit anzuwenden.
  • Enthält Agentmetadaten für Dashboards und KI-Tools.

Wenn Sie mit metrischen Ansichten noch nicht vertraut sind, beginnen Sie mit " Erstellen einer Metrikansicht" , um die Grundlagen zu erlernen. Dieses Tutorial erweitert diese Grundlage mit praktischer Komplexität.

Anforderungen

Für dieses Tutorial benötigen Sie Folgendes:

  • Ein Arbeitsbereich, der für den Unity-Katalog aktiviert ist.
  • Ein SQL Warehouse oder eine Computeressource mit Databricks Runtime 17.3 oder höher.

Die vollständige Liste der Berechtigungen, die zum Erstellen einer Metrikansicht erforderlich sind, finden Sie unter "Voraussetzungen".

Note

Das Erstellen einer Metrikansicht wird für Databricks Runtime 16.4 und höher unterstützt. In diesem Lernprogramm werden Features verwendet, die Databricks Runtime 17.3 oder höher erfordern, und einige Schritte erfordern eine spätere Laufzeit. Die Mindestlaufzeit für jedes Feature finden Sie unter Verfügbarkeit der Metrikansichtsfeatures.

Das Datenmodell

Das TPC-H-Dataset modelliert eine Großhandels-Lieferkette. In diesem Lernprogramm werden drei Tabellen verwendet, die in einem Schneeflockenschema verknüpft sind:

  • orders verbindet sich mit customer an o_custkey = c_custkey
  • customer verbindet sich mit nation an c_nationkey = n_nationkey
Tabelle Rolle Schlüsselspalten
orders Faktentabelle (Bestelltransaktionen) o_orderkey, o_custkey, o_totalprice, o_orderdate, , o_orderstatus
customer Dimensionstabelle (Kundendetails) c_custkey, c_name, c_mktsegment, c_nationkey
nation Dimensionstabelle (Referenz für Länder oder Regionen) n_nationkey, n_namen_regionkey

Schritt 1: Erstellen der Metrikansicht und Öffnen des Editors

Sie können diese Metrikansicht in der Benutzeroberfläche des Katalog-Explorers erstellen, mit Genie Code generieren oder die vollständige YAML-Definition direkt schreiben. Alle drei Methoden werden in eine einzelne YAML-Definition aufgelöst, die die Metrikansicht modelliert. Wählen Sie in jedem folgenden Schritt die Registerkarte "Katalog-Explorer-Benutzeroberfläche " oder "YAML-Editor " aus, um Ihrer bevorzugten Methode zu folgen. Wenn Sie den YAML-Editor verwenden, ist der Beispielcode in jedem Schritt der Teil der YAML-Definition, der dem entspricht, was Sie in diesem Schritt erstellen.

Note

Die YAML-Beispiele in diesem Lernprogramm verwenden das fields Schlüsselwort. Wenn Sie eine Metrikansicht im Low-Code-Editor erstellen, verwendet das generierte YAML stattdessen das entsprechende dimensions Schlüsselwort. Siehe Felder.

Wenn Sie mit der Benutzeroberfläche zum Erstellen von Metrikansichten noch nicht vertraut sind, lesen Sie "Erstellen einer Metrikansicht".

So erstellen Sie die Metrikansicht im Katalog-Explorer:

  1. Suchen Sie nach samples.tpch.orders.
  2. Klicken Sie auf den Tabellennamen.
  3. Klicken Sie auf "Metrische Ansicht>", und benennen Sie die Ansicht.

Die detaillierten Erstellungsschritte finden Sie unter Erstellen einer Metrikansicht. Wenn der Editor geöffnet wird, nutzen Sie die Registerkarte UI, zum interaktiven Erstellen, oder klicken Sie auf die Schaltfläche <>, um die YAML-Definition direkt zu bearbeiten.

Schritt 2: Einrichten der Metrikansicht

Legen Sie eine Version und eine Beschreibung für die Metrikansicht fest. Das version bestimmt die YAML-Spezifikationsversion, und das comment dokumentiert den Zweck der Metrikansicht, der im Catalog Explorer angezeigt wird. Azure Databricks verwaltet die Version für Sie.

Benutzeroberfläche des Katalog-Explorers

Die Version ist für Sie definiert. So fügen Sie die Beschreibung nach dem Speichern der Metrikansicht hinzu oder bearbeiten sie:

  1. Suchen Sie im Catalog Explorer nach der Metrikansicht und klicken Sie auf ihren Namen.
  2. Klicken Sie auf "Beschreibung", und geben Sie dann eine Beschreibung der Metrikansicht ein. Sie können die Beispielbeschreibung verwenden, die auf der Registerkarte YAML-Editor angezeigt wird.

Dieser Text entspricht dem comment Feld in der YAML-Definition. Weitere Möglichkeiten zum Bearbeiten einer Metrikansicht finden Sie unter Bearbeiten einer Metrikansicht.

YAML-Editor

version: 1.1

comment: |-
  Sales analytics metric view for order performance analysis.
  Joins orders with customers and geography.
  Owner: Analytics Team
  Last updated: 2025-01-15

Schritt 3: Definieren der Quelle und Verknüpfungen

Definieren Sie die primäre Quelltabelle, und verknüpfen Sie verwandte Tabellen:

  • source setzt die Faktentabelle (Bestellungen) als Granularität fest.
  • joins bringt Kundendaten mithilfe einer viele-zu-eins-Beziehung ein.
  • Die verschachtelte nation-Verknüpfung veranschaulicht ein Schneeflockenschema, bei dem über customer verknüpft wird, um auf geografische Daten zuzugreifen, wobei die Nation eine Unterdimension des Kunden ist.

Benutzeroberfläche des Katalog-Explorers

Dieses Beispiel fügt zwei Joins hinzu, beide Many-to-one, um das Snowflake-Schema zu modellieren.

So fügen Sie die customer Verknüpfung hinzu:

  1. Klicken Sie im Editor auf "Beitreten" in der oberen rechten Ecke, um das Dialogfeld " Verknüpfung hinzufügen " zu öffnen.
  2. Suchen Sie nach samples.tpch.customer, klicken Sie auf den Tabellennamen und dann auf Hinzufügen.
  3. Legen Sie die Verknüpfungsbedingung auf o_custkey = c_custkey.
  4. Wählen Sie unter VerknüpfungskardinalitätViele-zu-eins aus. Anleitung zur Auswahl einer Kardinalität finden Sie unter Verbundkardinalität.

Fügen Sie dann die geschachtelte nation Verknüpfung hinzu. Wiederholen Sie die Schritte aus dem customer Join und verknüpfen Sie samples.tpch.nation über c_nationkey = n_nationkey. Das Verschachteln des Joins unter customer modelliert Nation als Unterdimension des Kunden.

Die vollständigen Verknüpfungsdialogschritte finden Sie unter Schritt 2: Hinzufügen einer Verknüpfung.

YAML-Editor

source: SELECT * FROM samples.tpch.orders

joins:
  - name: customer
    source: samples.tpch.customer
    'on': o_custkey = c_custkey
    joins:
      - name: nation
        source: samples.tpch.nation
        'on': c_nationkey = n_nationkey

Schritt 4: Definieren eines Filters

Ein filter schränkt die Quelldaten ein und gilt für alle Abfragen auf die Metrikansicht. Dieses Tutorial begrenzt die Metrikansicht auf aktuelle Daten.

Benutzeroberfläche des Katalog-Explorers

So definieren Sie den Filter:

  1. Klicken Sie im Editor auf das Symbol Filter in der oberen rechten Ecke.
  2. Verwenden Sie die Drop-down-Menüs, um die Spalte auf o_orderdate, den Operator auf >= und den Wert auf 1995-01-01 festzulegen.

Weitere Informationen zu Filtern finden Sie in Schritt 3: Definieren eines Filters.

YAML-Editor

filter: o_orderdate >= '1995-01-01'

Schritt 5: Definieren von Feldern

Felder sind die Attribute, nach denen Benutzer gruppiert und gefiltert werden. Ein Feld kann eine kategorisierte Spalte (z. B. Region oder Status) oder eine nicht aggregierte numerische Spalte (z. B. Alter oder Menge) sein, die Benutzer zur Abfragezeit aggregieren.

Agent-Metadaten

Jedes Feld und jede Kennzahl in diesem Tutorial enthält Eigenschaften für Agent-Metadaten, die verbessern, wie Ihre Metrikansicht mit Dashboards und KI-Tools funktioniert:

  • display_name: Eine lesbare Bezeichnung, die in Visualisierungen anstelle des technischen Spaltennamens angezeigt wird.
  • synonyms: Alternative Bezeichnungen, die KI-Tools wie Genie dabei helfen, Felder und Kennzahlen mithilfe natürlicher Sprachabfragen zu finden.
  • format: Darstellung von Werten in nachgelagerten Oberflächen wie Dashboards, Notizbüchern und SQL-Abfrageergebnissen, z. B. Währung, Zahl oder Prozentsatz.

Diese Eigenschaften sind optional, aber empfohlen. Die folgenden Schritte enthalten die Definitionen für Felder und Kennzahlen direkt.

Felddefinitionen

Dieses Lernprogramm fügt Folgendes hinzu:

  • Zeitfelder:order_date, order_monthund order_year bei mehreren Granularitäten zur Unterstützung verschiedener Analyseanforderungen.
  • Transformierte Felder:order_status und order_priority, die CASE und SPLIT verwenden, um Quellcodes in lesbare Bezeichnungen zu konvertieren.
  • Verknüpfte Felder:customer_name, market_segmentund customer_nation, die verknüpfte Tabellen mit dem Verknüpfungsnamen referenzieren. Geschachtelte Verknüpfungsspalten verwenden eine verkettete Punktnotation, wie etwa customer.nation.n_name, um das Schneeflockenschema zu durchlaufen.

Benutzeroberfläche des Katalog-Explorers

Der Editor fügt automatisch alle Quellspalten zum Felder-Tab hinzu. Bearbeiten, Umbenennen, Entfernen und Hinzufügen von Feldern, sodass die Metrikansicht genau folgendes definiert. Klicken Sie für jedes Feld auf den Namen, um es zu bearbeiten, oder klicken Sie auf hinzufügen ", um es zu erstellen, und legen Sie dann den Ausdruck im Generator- oder benutzerdefinierten Modus fest. Legen Sie den Anzeigenamen und die Synonyme für jedes Feld wie dargestellt fest.

  1. order_date: Wählen Sie im Generatormodus die o_orderdate Spalte aus. Festlegen des Anzeigenamens auf Order Date.

  2. order_month: Geben Sie im benutzerdefinierten Modus DATE_TRUNC('MONTH', order_date) ein. Festlegen des Anzeigenamens auf Order Month.

  3. order_year: Geben Sie im Modus BenutzerdefiniertYEAR(order_date) ein. Festlegen des Anzeigenamens auf Order Year.

  4. order_status: Geben Sie im benutzerdefinierten Modus den folgenden Ausdruck ein. Legen Sie den Anzeigenamen auf Order Status und Synonyme auf status, fulfillment status.

    CASE o_orderstatus
      WHEN 'O' THEN 'Open'
      WHEN 'P' THEN 'Processing'
      WHEN 'F' THEN 'Fulfilled'
    END
    
  5. order_priority: Geben Sie im SPLIT(o_orderpriority, '-')[0] Modus ein. Festlegen des Anzeigenamens auf Priority.

  6. customer_name: Wählen Sie im Generatormodus die c_name Spalte aus der verknüpften customer Tabelle aus. Festlegen des Anzeigenamens auf Customer Name.

  7. market_segment: Wählen Sie im Generatormodus die c_mktsegment Spalte aus der verknüpften customer Tabelle aus. Legen Sie den Anzeigenamen auf Market Segment und Synonyme auf segment, industry.

  8. customer_nation: Geben Sie im customer.nation.n_name Modus ein, um auf die geschachtelte nation Verknüpfung zu verweisen. Legen Sie den Anzeigenamen auf Country und Synonyme auf nation, country.

Die vollständigen Feldschritte finden Sie unter Schritt 4: Hinzufügen von Feldern.

YAML-Editor

fields:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date

  - name: order_month
    expr: "DATE_TRUNC('MONTH', order_date)"
    display_name: Order Month

  - name: order_year
    expr: YEAR(order_date)
    display_name: Order Year

  - name: order_status
    expr: |-
      CASE o_orderstatus
        WHEN 'O' THEN 'Open'
        WHEN 'P' THEN 'Processing'
        WHEN 'F' THEN 'Fulfilled'
      END
    display_name: Order Status
    synonyms:
      - status
      - fulfillment status

  - name: order_priority
    expr: "SPLIT(o_orderpriority, '-')[0]"
    display_name: Priority

  - name: customer_name
    expr: customer.c_name
    display_name: Customer Name

  - name: market_segment
    expr: customer.c_mktsegment
    display_name: Market Segment
    synonyms:
      - segment
      - industry

  - name: customer_nation
    expr: customer.nation.n_name
    display_name: Country
    synonyms:
      - nation
      - country

Schritt 6: Definieren von Parametern

Mithilfe von Parametern können Sie Werte beim Abfragen in die Metrikansicht übergeben, sodass eine einzelne Definition viele Abfragevarianten erfüllen kann. Dieses Tutorial fügt einen discount-Parameter hinzu, den eine spätere Kennzahl zur Berechnung des diskontierten Umsatzes verwendet. Der Parameter hat standardmäßig den Wert 0, sodass Abfragen, die keinen Wert übergeben, nicht rabattierte Einnahmen zurückgeben. Weitere Informationen zu Parametern finden Sie unter Verwenden von Parametern mit Metrikansichten.

Benutzeroberfläche des Katalog-Explorers

Klicken Sie in der Editorüberschrift auf "Parameter hinzufügen". Geben Sie discount als Namen ein, geben Sie dann den Standardwert 0 ein und wählen Sie den double-Datentyp aus.

YAML-Editor

parameters:
  - name: discount
    data_type: double
    default: 0

Schritt 7: Kennzahlen definieren

Measures sind die Berechnungen, die Benutzer analysieren möchten. Definieren Sie zunächst atomische Measures, und verwenden Sie dann die Komponierbarkeit, um komplexe Metriken zu erstellen, die auf zuvor definierte Measures mit der MEASURE() Funktion verweisen. Legen Sie das display_name, formatund synonyms für jedes Measure fest, wie in Agent-Metadaten beschrieben. Dieses Lernprogramm fügt Folgendes hinzu:

  • Atommaße:order_count, total_revenueund unique_customers, die einfachen Aggregationen, die die Bausteine bilden.
  • Zusammengesetzte Kennzahlen:avg_order_value und revenue_per_customer, die mit MEASURE() auf zuvor definierte Kennzahlen verweisen, anstatt die Aggregationslogik zu duplizieren. Wenn total_revenue Änderungen vorgenommen werden, verwenden diese Measures automatisch die aktualisierte Definition. Siehe Kompositierbarkeit.
  • Gefilterte Kennzahlen:open_order_revenue und fulfilled_order_revenue, die FILTER (WHERE ...) verwenden, um bedingte Kennzahlen ohne separate Felder zu erstellen.
  • Parametrisierte Kennzahl:discounted_revenue, die auf den Parameter discount verweist, um einen Rabattsatz anzuwenden. Siehe Verwenden von Parametern mit Metrikansichten.
  • Fenstermetrik:t7d_customers, die eine rollierende 7-Tage-Anzahl eindeutiger Kunden berechnet. Weitere Fenstermaßmuster finden Sie unter "Fenstermaße ".

Benutzeroberfläche des Katalog-Explorers

Der Editor fügt automatisch ein Beispielmaß COUNT(*) hinzu. Bearbeiten oder entfernen Sie sie, und fügen Sie Kennzahlen hinzu, damit die Metrikansicht genau Folgendes definiert. Klicken Sie für jede Kennzahl auf Hinzufügen oder das Plus-SymbolHinzufügen und legen Sie dann den Ausdruck im Builder- oder benutzerdefinierten Modus fest. Legen Sie den Anzeigenamen, das Format und die Synonyme wie dargestellt fest. Verwenden Sie 2 Dezimalstellen für Währungsformate und 0 Dezimalstellen für Zahlenformate.

  1. order_count: Wählen Sie im Builder-Modus die Aggregation Anzahl unterschiedlicher Werte auf o_orderkey aus. Legen Sie den Anzeigenamen auf Order Count und das Format auf Zahl fest.
  2. total_revenue: Im Builder-Modus wählen Sie die Aggregation „Summe“ auf o_totalprice. Legen Sie den Anzeigenamen auf Total Revenue, das Format auf Währung (USD) und die Synonyme auf revenue, sales fest.
  3. discounted_revenue: Im Benutzerdefiniert-Modus geben Sie SUM(o_totalprice * (1 - discount)) ein. Legen Sie den Anzeigenamen auf Discounted Revenue,Format auf Währung (USD)' fest.
  4. unique_customers: Wählen Sie im Builder-Modus die Aggregation Anzahl unterschiedlicher Werte für o_custkey aus. Legen Sie den Anzeigenamen auf Unique Customers und das Format auf Zahl fest.
  5. avg_order_value: Geben Sie im Benutzerdefinierten Modus MEASURE(total_revenue) / MEASURE(order_count) ein. Legen Sie den Anzeigenamen auf Avg Order Value,Format auf Währung (USD), Synonyme auf AOV.
  6. revenue_per_customer: Geben Sie im MEASURE(total_revenue) / MEASURE(unique_customers) Modus ein. Legen Sie den Anzeigenamen auf Revenue per Customer,Format auf Währung (USD)' fest.
  7. open_order_revenue: Geben Sie im benutzerdefinierten Modus SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O') ein. Legen Sie den Anzeigenamen auf Open Order Revenue,Format auf Währung (USD), Synonyme auf backlog.
  8. fulfilled_order_revenue: Geben Sie im Modus BenutzerdefiniertSUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F') ein. Legen Sie den Anzeigenamen auf Fulfilled Revenue,Format auf Währung (USD)' fest.
  9. t7d_customers: Geben Sie im COUNT(DISTINCT o_custkey) Modus ein. Klicken Sie dann auf + Fenster und konfigurieren Sie ein Fenster, das nach order_date geordnet ist, mit dem Bereich trailing 7 day und der semiadditiven Aggregation last. Legen Sie den Anzeigenamen auf 7-Day Rolling Customers und das Format auf Zahl fest.

Die vollständigen Schritte zum Erstellen von Measures finden Sie unter Schritt 5: Measures hinzufügen.

YAML-Editor

measures:
  - name: order_count
    expr: COUNT(DISTINCT o_orderkey)
    display_name: Order Count
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact

  - name: total_revenue
    expr: SUM(o_totalprice)
    display_name: Total Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - revenue
      - sales

  - name: discounted_revenue
    expr: SUM(o_totalprice * (1 - discount))
    display_name: Discounted Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact

  - name: unique_customers
    expr: COUNT(DISTINCT o_custkey)
    display_name: Unique Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact

  - name: avg_order_value
    expr: MEASURE(total_revenue) / MEASURE(order_count)
    display_name: Avg Order Value
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - AOV

  - name: revenue_per_customer
    expr: MEASURE(total_revenue) / MEASURE(unique_customers)
    display_name: Revenue per Customer
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact

  - name: open_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')
    display_name: Open Order Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - backlog

  - name: fulfilled_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F')
    display_name: Fulfilled Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact

  - name: t7d_customers
    expr: COUNT(DISTINCT o_custkey)
    window:
      - order: order_date
        semiadditive: last
        range: trailing 7 day
    display_name: 7-Day Rolling Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0

Überprüfen der vollständigen Definition

Nach Abschluss der vorstehenden Schritte weist Ihre Metrikansicht die folgende vollständige Definition auf:

Anzeigen der vollständigen YAML-Definition
version: 1.1

parameters:
  - name: discount
    data_type: double
    default: 0

source: SELECT * FROM samples.tpch.orders

joins:
  - name: customer
    source: samples.tpch.customer
    'on': o_custkey = c_custkey
    joins:
      - name: nation
        source: samples.tpch.nation
        'on': c_nationkey = n_nationkey

filter: o_orderdate >= '1995-01-01'

comment: |-
  Sales analytics metric view for order performance analysis.
  Joins orders with customers and geography.
  Owner: Analytics Team
  Last updated: 2025-01-15

fields:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date
  - name: order_month
    expr: "DATE_TRUNC('MONTH', order_date)"
    display_name: Order Month
  - name: order_year
    expr: YEAR(order_date)
    display_name: Order Year
  - name: order_status
    expr: |-
      CASE o_orderstatus
        WHEN 'O' THEN 'Open'
        WHEN 'P' THEN 'Processing'
        WHEN 'F' THEN 'Fulfilled'
      END
    display_name: Order Status
    synonyms:
      - status
      - fulfillment status
  - name: order_priority
    expr: "SPLIT(o_orderpriority, '-')[0]"
    display_name: Priority
  - name: customer_name
    expr: customer.c_name
    display_name: Customer Name
  - name: market_segment
    expr: customer.c_mktsegment
    display_name: Market Segment
    synonyms:
      - segment
      - industry
  - name: customer_nation
    expr: customer.nation.n_name
    display_name: Country
    synonyms:
      - nation
      - country

measures:
  - name: order_count
    expr: COUNT(DISTINCT o_orderkey)
    display_name: Order Count
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: total_revenue
    expr: SUM(o_totalprice)
    display_name: Total Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - revenue
      - sales
  - name: discounted_revenue
    expr: SUM(o_totalprice * (1 - discount))
    display_name: Discounted Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: unique_customers
    expr: COUNT(DISTINCT o_custkey)
    display_name: Unique Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: avg_order_value
    expr: MEASURE(total_revenue) / MEASURE(order_count)
    display_name: Avg Order Value
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - AOV
  - name: revenue_per_customer
    expr: MEASURE(total_revenue) / MEASURE(unique_customers)
    display_name: Revenue per Customer
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: open_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')
    display_name: Open Order Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - backlog
  - name: fulfilled_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F')
    display_name: Fulfilled Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: t7d_customers
    expr: COUNT(DISTINCT o_custkey)
    window:
      - order: order_date
        semiadditive: last
        range: trailing 7 day
    display_name: 7-Day Rolling Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
Erstellen der Metrikansicht mit SQL

Wenn Sie diese Definition außerhalb des Katalog-Explorers erstellen, führen Sie die folgende SQL-Datei aus, um die Metrikansicht zu erstellen:

CREATE OR REPLACE VIEW catalog.schema.tpch_sales_analytics
WITH METRICS
LANGUAGE YAML
AS $$
version: 1.1

parameters:
  - name: discount
    data_type: double
    default: 0

source: SELECT * FROM samples.tpch.orders

joins:
  - name: customer
    source: samples.tpch.customer
    'on': o_custkey = c_custkey
    joins:
      - name: nation
        source: samples.tpch.nation
        'on': c_nationkey = n_nationkey

filter: o_orderdate >= '1995-01-01'

comment: |-
  Sales analytics metric view for order performance analysis.
  Joins orders with customers and geography.
  Owner: Analytics Team
  Last updated: 2025-01-15

fields:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date
  - name: order_month
    expr: "DATE_TRUNC('MONTH', order_date)"
    display_name: Order Month
  - name: order_year
    expr: YEAR(order_date)
    display_name: Order Year
  - name: order_status
    expr: |-
      CASE o_orderstatus
        WHEN 'O' THEN 'Open'
        WHEN 'P' THEN 'Processing'
        WHEN 'F' THEN 'Fulfilled'
      END
    display_name: Order Status
    synonyms:
      - status
      - fulfillment status
  - name: order_priority
    expr: "SPLIT(o_orderpriority, '-')[0]"
    display_name: Priority
  - name: customer_name
    expr: customer.c_name
    display_name: Customer Name
  - name: market_segment
    expr: customer.c_mktsegment
    display_name: Market Segment
    synonyms:
      - segment
      - industry
  - name: customer_nation
    expr: customer.nation.n_name
    display_name: Country
    synonyms:
      - nation
      - country

measures:
  - name: order_count
    expr: COUNT(DISTINCT o_orderkey)
    display_name: Order Count
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: total_revenue
    expr: SUM(o_totalprice)
    display_name: Total Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - revenue
      - sales
  - name: discounted_revenue
    expr: SUM(o_totalprice * (1 - discount))
    display_name: Discounted Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: unique_customers
    expr: COUNT(DISTINCT o_custkey)
    display_name: Unique Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: avg_order_value
    expr: MEASURE(total_revenue) / MEASURE(order_count)
    display_name: Avg Order Value
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - AOV
  - name: revenue_per_customer
    expr: MEASURE(total_revenue) / MEASURE(unique_customers)
    display_name: Revenue per Customer
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: open_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')
    display_name: Open Order Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - backlog
  - name: fulfilled_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F')
    display_name: Fulfilled Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: t7d_customers
    expr: COUNT(DISTINCT o_custkey)
    window:
      - order: order_date
        semiadditive: last
        range: trailing 7 day
    display_name: 7-Day Rolling Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
$$;

Weitere Möglichkeiten zum Erstellen einer Metrikansicht finden Sie unter Erstellen einer Metrikansicht.

Schritt 8: Die Metrikansicht abfragen

Fragen Sie die Metrikansicht mit fachanwenderfreundlicher Syntax ab. Die MEASURE()-Funktion aggregiert einen Messwert auf der Granularität der Felder, die Sie auswählen.

Kennzahlen nach Dimension aggregieren

Dieses Beispiel aggregiert Kennzahlen über mehrere Felder hinweg. Sie gibt den Gesamtumsatz, die Auftragsanzahl und den durchschnittlichen Auftragswert nach Kundenland und Marktsegment zurück, der zuerst nach dem höchsten Umsatz bewertet wird:

SELECT
  customer_nation,
  market_segment,
  MEASURE(total_revenue) AS total_revenue,
  MEASURE(order_count) AS order_count,
  MEASURE(avg_order_value) AS avg_order_value
FROM catalog.schema.tpch_sales_analytics
GROUP BY customer_nation, market_segment
ORDER BY total_revenue DESC;

Analysieren eines monatlichen Trends

In diesem Beispiel wird ein Zeitfeld mit Measures kombiniert, um einen Trend nachzuverfolgen. Sie gibt den Gesamtumsatz und den Offenauftragsumsatz (Backlog) nach Monat und Bestellstatus zurück:

SELECT
  order_month,
  order_status,
  MEASURE(total_revenue) AS total_revenue,
  MEASURE(open_order_revenue) AS open_order_revenue
FROM catalog.schema.tpch_sales_analytics
GROUP BY order_month, order_status
ORDER BY order_month;

Übergeben eines Parameterwerts

Da die Metrikansicht einen Parameter definiert, können Sie ihn als Tabellenwertfunktion aufrufen und einen Wert zur Abfragezeit übergeben. Die folgende Abfrage wendet einen Rabatt von 10% an. Da discount standardmäßig auf 0 festgelegt ist, geben Abfragen, die das Argument weglassen, nicht diskontierte Umsätze zurück:

SELECT
  customer_nation,
  MEASURE(total_revenue) AS total_revenue,
  MEASURE(discounted_revenue) AS discounted_revenue
FROM catalog.schema.tpch_sales_analytics(discount => 0.1)
GROUP BY customer_nation
ORDER BY discounted_revenue DESC;

Was Sie gelernt haben

Sie haben eine Metrikansicht erstellt, die Folgendes veranschaulicht:

Funktion Example
Snowflake-Schemabeitritte Bestellungen an Kunden zu Nation (geschachtelte n:1-Joins)
Zeitfelder Datum, Monat, Jahres granularität
Transformierte Felder CASE Anweisungen, SPLIT Funktionen
Einfache Maßnahmen COUNT, SUM
Kompositierbarkeit avg_order_value und revenue_per_customer verweisen auf zuvor definierte Measures unter Verwendung von MEASURE()
Gefilterte Messungen FILTER (WHERE ...) für bedingte Aggregationen
Fenstermaße 7-tägige rollierende Kundenzählung mit trailing 7 day
Parameter discount Parameter, der im discounted_revenue Maß angewendet wird
Agentmetadaten display_name, format zu synonyms Feldern und Kennzahlen

Weitere Ressourcen