Zelfstudie: een metrische weergave bouwen met joins en gegevensmodellering

In deze zelfstudie bouwt u een metrische weergave voor verkoopanalyse op de TPC-H gegevensset. Aan het einde hebt u een metrische weergave die:

  • Hiermee worden orders en klanten samengevoegd in meerdere tabellen met behulp van een snowflake-schema.
  • Definieert velden (ook wel dimensies genoemd) voor kenmerken voor tijd, geografie en volgorde.
  • Hiermee worden eenvoudige en complexe metingen berekend, waaronder verhoudingen, gefilterde aggregaties en venstermetingen.
  • Maakt gebruik van composabiliteit om complexe metrische gegevens te bouwen op basis van eenvoudigere metingen.
  • Hiermee definieert u een parameter om een kortingstarief toe te passen op het moment van de query.
  • Bevat metagegevens van agents voor dashboards en AI-hulpprogramma's.

Als metrische weergaven nieuw voor u zijn, begint u met Een metrische weergave maken om de basis te leren. In deze handleiding wordt die basis uitgebreid met reële complexiteit.

Requirements

U hebt het volgende nodig om deze zelfstudie te voltooien:

  • Een werkruimte waarvoor Unity Catalog is ingeschakeld.
  • Een SQL Warehouse- of rekenresource met Databricks Runtime 17.3 of hoger.

Zie Vereisten voor de volledige lijst met bevoegdheden die zijn vereist voor het maken van een metrische weergave.

Note

Het maken van een metrische weergave wordt ondersteund in Databricks Runtime 16.4 en hoger. In deze zelfstudie worden functies gebruikt waarvoor Databricks Runtime 17.3 of hoger is vereist. Voor sommige stappen is een latere runtime vereist. Zie beschikbaarheid van metrische weergavefuncties voor de minimale runtime voor elke functie.

Het gegevensmodel

De TPC-H gegevensset modelleert een groothandelsvoorzieningsketen. In deze zelfstudie worden drie tabellen gebruikt die zijn gekoppeld aan een snowflake-schema:

  • orders wordt verbonden met customer op o_custkey = c_custkey
  • customer wordt verbonden met nation op c_nationkey = n_nationkey
Table Role Sleutelkolommen
orders Feitentabel (ordertransacties) o_orderkey, o_custkey, o_totalprice, o_orderdate, , o_orderstatus
customer Dimensietabel (klantgegevens) c_custkey,c_name,c_mktsegment,c_nationkey
nation Dimensietabel (verwijzing naar land of regio) n_nationkey, , n_namen_regionkey

Stap 1: De metrische weergave maken en de editor openen

U kunt deze metrische weergave maken in de gebruikersinterface van Catalog Explorer, deze genereren met Genie Code of de volledige YAML-definitie rechtstreeks schrijven. Alle drie de methoden worden omgezet in één YAML-definitie die de metrische weergave modellt. Selecteer in elke stap die volgt het tabblad Catalog Explorer UI of YAML-editor om de gewenste methode te volgen. Als u de YAML-editor gebruikt, is de voorbeeldcode in elke stap het gedeelte van de YAML-definitie dat overeenkomt met wat u in die stap bouwt.

Note

In de YAML-voorbeelden in deze zelfstudie wordt het fields trefwoord gebruikt. Wanneer u een metrische weergave in de editor met weinig code maakt, wordt in plaats daarvan het equivalente dimensions trefwoord gebruikt voor de YAML die wordt gegenereerd. Zie Velden.

Zie Een metrische weergave maken als u niet bekend bent met de gebruikersinterface voor het maken van metrische weergaven.

Ga als volgende te werk om de metrische weergave te maken in Catalog Explorer:

  1. Zoek naar samples.tpch.orders.
  2. Klik op de tabelnaam.
  3. Klik op Maken>Metriekweergave en geef de weergave een naam.

Zie Een metrische weergave maken voor gedetailleerde stappen. Wanneer de editor wordt geopend, gebruikt u het tabblad UI om interactief te bouwen of klikt u op de <> knop om de YAML-definitie rechtstreeks te bewerken.

Stap 2: De metrische weergave instellen

Stel een versie en een beschrijving in voor de metrische weergave. De version bepaalt de versie van de YAML-specificatie en de comment documenteert het doel van de metriekweergave, dat wordt weergegeven in Catalog Explorer. Azure Databricks beheert de versie voor u.

Gebruikersinterface van Catalog Explorer

De versie is voor u gedefinieerd. De beschrijving toevoegen of bewerken nadat u de metrische weergave hebt opgeslagen:

  1. Zoek in Catalog Explorer naar de metrische weergave en klik op de naam ervan.
  2. Klik op Beschrijving en voer een beschrijving in van de metrische weergave. U kunt de voorbeeldbeschrijving gebruiken die wordt weergegeven op het tabblad YAML-editor .

Deze tekst komt overeen met het comment veld in de YAML-definitie. Zie Een metrische weergave bewerken voor meer manieren om een metrische weergave te bewerken.

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

Stap 3: De bron en de Joins definiëren

Geef de primaire brontabel op en koppel gerelateerde tabellen:

  • source stelt de feitentabel (orders) in als het graan.
  • joins brengt klantgegevens met behulp van een veel-op-een-relatie in.
  • De geneste nation-join demonstreert een snowflake-schemapatroon en koppelt via customer om geografische gegevens te ontsluiten, waarbij nation een subdimensie van customer is.

Gebruikersinterface van Catalog Explorer

In dit voorbeeld worden twee koppelingen, beide veel-op-één, toegevoegd om het snowflake-schema te modelleren.

Om de samenvoeging customer toe te voegen:

  1. Klik in de editor in de rechterbovenhoek op Deelnemen om het dialoogvenster Join toevoegen te openen.
  2. Zoek naar samples.tpch.customer, klik op de tabelnaam en klik vervolgens op Toevoegen.
  3. Stel de joinvoorwaarde in op o_custkey = c_custkey.
  4. Onder Join-kardinaliteit, selecteer Veel-op-een. Zie Join-kardinaliteit voor hulp bij het kiezen van een kardinaliteit.

Voeg vervolgens de geneste nation-join toe. Herhaal de stappen van de customer-join en voeg samples.tpch.nation samen op basis van c_nationkey = n_nationkey. Door de join onder customer te nesten, wordt nation gemodelleerd als een subdimensie van customer.

Zie stap 2: Een join toevoegen voor de volledige stappen voor het dialoogvenster Join.

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

Stap 4: Een filter definiëren

Een filter beperkt de brongegevens en is van toepassing op alle query's in de metriekweergave. In deze zelfstudie wordt de metrische weergave beperkt tot recente gegevens.

Gebruikersinterface van Catalog Explorer

Het filter definiëren:

  1. Klik in de editor op filterpictogram.Filter in de rechterbovenhoek.
  2. Gebruik de vervolgkeuzelijsten om de kolomo_orderdatein te stellen op, de operator op >=en de waarde op 1995-01-01.

Zie stap 3 voor meer informatie over filters : Een filter definiëren.

YAML-editor

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

Stap 5: Velden definiëren

Velden zijn de kenmerken die gebruikers groeperen en filteren op. Een veld kan een categorische kolom (zoals regio of status) of een niet-geaggregeerde numerieke kolom (zoals leeftijd of hoeveelheid) zijn die gebruikers op het moment van de query aggregeren.

Metagegevens van agent

Elk veld en elke meting in deze zelfstudie bevat eigenschappen voor metagegevens van agents die de werking van uw metrische weergave verbeteren met dashboards en AI-hulpprogramma's:

  • display_name: Een leesbaar label dat wordt weergegeven in visualisaties in plaats van de naam van de technische kolom.
  • synonyms: Alternatieve namen die AI-hulpprogramma's zoals Genie helpen velden en metingen te ontdekken via query's in natuurlijke taal.
  • format: Hoe waarden worden weergegeven in onderliggende onderdelen zoals dashboards, notebooks en resultaten van SQL-query’s, bijvoorbeeld als valuta, getal of percentage.

Deze eigenschappen zijn optioneel, maar worden aanbevolen. De definities van velden en metingen in de volgende stappen zijn inline opgenomen.

Velddefinities

Deze zelfstudie voegt het volgende toe:

  • Tijdvelden:order_date, order_monthen order_year op meerdere granulariteiten om verschillende analysebehoeften te ondersteunen.
  • Getransformeerde velden:order_status en order_priority, die CASE en SPLIT gebruiken om broncodes om te zetten in leesbare labels.
  • Gekoppelde velden:customer_name, market_segmenten customer_nation, die verwijzen naar gekoppelde tabellen met behulp van de joinnaam. Geneste joinkolommen gebruiken aaneengeschakelde puntnotatie, zoals customer.nation.n_name, om door het snowflake-schema te navigeren.

Gebruikersinterface van Catalog Explorer

De editor voegt automatisch alle bronkolommen toe aan het tabblad Velden . U kunt velden bewerken, de naam ervan wijzigen, verwijderen en toevoegen, zodat de metrische weergave precies het volgende definieert. Klik voor elk veld op de naam om het te bewerken of klik op Toevoegen of pluspictogram Toevoegen om het te maken en stel vervolgens de expressie in de opbouwfunctie of aangepaste modus in. Stel de weergavenaam en synoniemen in voor elk veld, zoals wordt weergegeven.

  1. order_date: Selecteer de kolom in de o_orderdate-modus. Stel de weergavenaam in op Order Date.

  2. order_month: Voer in de aangepaste modus in DATE_TRUNC('MONTH', order_date). Stel de weergavenaam in op Order Month.

  3. order_year: Voer in de aangepaste modus in YEAR(order_date). Stel de weergavenaam in op Order Year.

  4. order_status: Voer in de aangepaste modus de volgende expressie in. Stel de weergavenaam in op Order Status en synoniemen op status, fulfillment status.

    CASE o_orderstatus
      WHEN 'O' THEN 'Open'
      WHEN 'P' THEN 'Processing'
      WHEN 'F' THEN 'Fulfilled'
    END
    
  5. order_priority: Voer in de aangepaste modus in SPLIT(o_orderpriority, '-')[0]. Stel de weergavenaam in op Priority.

  6. customer_name: Selecteer in de opbouwmodus de c_name kolom in de gekoppelde customer tabel. Stel de weergavenaam in op Customer Name.

  7. market_segment: Selecteer in de opbouwfunctiemodus de c_mktsegment kolom in de gekoppelde customer tabel. Stel de weergavenaam in op Market Segment en synoniemen op segment, industry.

  8. customer_nation: Voer in de modus Aangepastcustomer.nation.n_name in om te verwijzen naar de geneste nation-join. Stel de weergavenaam in op Country en synoniemen op nation, country.

Zie stap 4 voor de volledige veldstappen : Velden toevoegen.

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

Stap 6: Parameters definiëren

Met parameters kunt u waarden doorgeven in de metrische weergave wanneer u er query's op uitvoert, zodat één definitie veel queryvarianten kan leveren. In deze tutorial wordt de parameter discount toegevoegd die een latere maatstaf gebruikt om de gedisconteerde omzet te berekenen. De standaardwaarde van de parameter is 0, dus query's die geen waarde doorgeven, retourneren omzet zonder korting. Zie Parameters gebruiken met metrische weergaven voor meer informatie over parameters.

Gebruikersinterface van Catalog Explorer

Klik in de kop van de editor op Parameter toevoegen. Voer discount de naam in en voer vervolgens een standaardwaarde in van 0 en selecteer het double gegevenstype.

YAML-editor

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

Stap 7: Metingen definiëren

Metingen zijn de berekeningen die gebruikers willen analyseren. Definieer eerst atomische metingen en gebruik vervolgens composabiliteit om complexe metrische gegevens te bouwen die verwijzen naar eerder gedefinieerde metingen met de MEASURE() functie. Stel de display_name, formaten synonyms voor elke meting in zoals beschreven in metagegevens van agent. Deze zelfstudie voegt het volgende toe:

  • Atomische metingen:order_count, total_revenueen unique_customers, de eenvoudige aggregaties die de bouwstenen vormen.
  • Samengestelde metingen:avg_order_value en revenue_per_customer, die verwijzen naar eerder gedefinieerde metingen met MEASURE() in plaats van aggregatielogica te dupliceren. Als total_revenue er wijzigingen worden aangebracht, wordt voor deze metingen automatisch de bijgewerkte definitie gebruikt. Zie Composability.
  • Gefilterde metingen:open_order_revenue en fulfilled_order_revenue, die gebruiken FILTER (WHERE ...) om voorwaardelijke metrische gegevens te maken zonder afzonderlijke velden.
  • Geparameteriseerde meting:discounted_revenue, die verwijst naar de discount parameter om een kortingstarief toe te passen. Zie Parameters gebruiken met metrische weergaven.
  • Venstermaatstaf:t7d_customers, waarmee een voortschrijdend aantal over 7 dagen van unieke klanten wordt berekend. Zie Venstermetingen voor meer venstermetingspatronen.

Gebruikersinterface van Catalog Explorer

De editor voegt automatisch een voorbeeldmeting COUNT(*) toe. Bewerk of verwijder deze en voeg metingen toe, zodat de metrische weergave precies het volgende definieert. Klik voor elke meting op Toevoegen of pluspictogram Toevoegen en stel vervolgens de expressie in de opbouwfunctie of aangepaste modus in. Stel de weergavenaam, opmaak en synoniemen in zoals weergegeven. Gebruik 2 decimalen voor valutanotaties en 0 decimalen voor getalnotaties.

  1. order_count: Selecteer in de opbouwmodus het aantal afzonderlijke aggregaties op o_orderkey. Stel de weergavenaam in op Order Count en de notatie op Getal.
  2. total_revenue: Selecteer in de opbouwmodus de aggregatie Som op o_totalprice. Stel de weergavenaam in op Total Revenue, de indeling op Valuta (USD), en de synoniemen op revenue, sales.
  3. discounted_revenue: Voer in de aangepaste modus in SUM(o_totalprice * (1 - discount)). Stel de weergavenaam in op Discounted Revenue, de indeling op Valuta (USD).
  4. unique_customers: Selecteer in de opbouwmodus het aantal afzonderlijke aggregaties op o_custkey. Stel de weergavenaam in op Unique Customers en de notatie op Getal.
  5. avg_order_value: Voer in de aangepaste modus in MEASURE(total_revenue) / MEASURE(order_count). Stel de weergavenaam in op Avg Order Value, de notatie op Valuta (USD) en de synoniemen op AOV.
  6. revenue_per_customer: Voer in de aangepaste modus in MEASURE(total_revenue) / MEASURE(unique_customers). Stel de weergavenaam in op Revenue per Customer, de indeling op Valuta (USD).
  7. open_order_revenue: Voer in de aangepaste modus in SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O'). Stel de weergavenaam in op Open Order Revenue, de notatie op Valuta (USD) en de synoniemen op backlog.
  8. fulfilled_order_revenue: Voer in de aangepaste modus in SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F'). Stel de weergavenaam in op Fulfilled Revenue, de indeling op Valuta (USD).
  9. t7d_customers: Voer in de aangepaste modus in COUNT(DISTINCT o_custkey). Klik vervolgens op + Window en configureer een venster dat op order_date is gesorteerd, met bereik trailing 7 day en last semi-additieve aggregatie. Stel de weergavenaam in op 7-Day Rolling Customers en de notatie op Getal.

Zie stap 5: Metingen toevoegen voor de volledige metingsstappen.

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

De volledige definitie controleren

Nadat u de bovenstaande stappen hebt voltooid, heeft uw metrische weergave de volgende volledige definitie:

De volledige YAML-definitie weergeven
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
De metrische weergave maken met behulp van SQL

Als u deze definitie buiten Catalog Explorer bouwt, voert u de volgende SQL uit om de metrische weergave te maken:

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
$$;

Zie Een metrische weergave maken voor andere manieren om een metrische weergave te maken.

Stap 8: Een query uitvoeren op uw metrische weergave

Voer een query uit voor de metrische weergave met behulp van bedrijfsvriendelijke syntaxis. De MEASURE()-functie aggregeert een meetwaarde op het granulariteitsniveau van de velden die u selecteert.

Metingen aggregeren per dimensie

In dit voorbeeld worden metingen voor meerdere velden samengevoegd. Het retourneert de totale omzet, het aantal orders en de gemiddelde orderwaarde per klantland en marktsegment, gerangschikt op de hoogste omzet eerst:

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;

Een maandelijkse trend analyseren

In dit voorbeeld wordt een tijdveld gecombineerd met metingen om een trend bij te houden. Het retourneert de totale omzet en openstaande orderopbrengsten (achterstand) per maand en orderstatus:

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;

Een parameterwaarde doorgeven

Omdat de metrische weergave een parameter definieert, kunt u deze aanroepen als een tabelwaardefunctie en een waarde doorgeven tijdens de query. De volgende query past een korting van 10% toe. Omdat discount standaard de waarde 0 heeft, retourneren query’s die het argument weglaten omzet zonder korting:

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;

Wat u hebt geleerd

U hebt een metrische weergave gemaakt die het volgende laat zien:

Feature Voorbeeld
Snowflake-schema-joins Orders naar klant en natie (geneste veel-op-een koppelingen)
Tijdvelden Datum, maand, jaargranulariteit
Getransformeerde velden CASE instructies, SPLIT functies
Eenvoudige metingen COUNT, SUM
Composabiliteit avg_order_value en revenue_per_customer verwijzen naar eerder gedefinieerde metingen met behulp van MEASURE()
Gefilterde metingen FILTER (WHERE ...) voor voorwaardelijke aggregaties
Vensterafmetingen Zevendaags rollend klantenaantal met behulp van trailing 7 day
Parameters discount parameter toegepast in de discounted_revenue meting
Metagegevens van agent display_name, format, synonyms op velden en meetwaarden

Aanvullende informatiebronnen