Samouczek: tworzenie widoku metryk za pomocą sprzężeń i modelowania danych

W tym samouczku utworzysz widok metryk analizy sprzedaży na zbiorze danych TPC-H. Na koniec będziesz mieć widok metryczny, który:

  • Łączy zamówienia i klientów w wielu tabelach przy użyciu schematu płatka śniegu.
  • Definiuje pola (nazywane również wymiarami) dla atrybutów czasu, geografii i kolejności.
  • Oblicza proste i złożone miary, w tym współczynniki, przefiltrowane agregacje i miary okien.
  • Wykorzystuje składalność do tworzenia złożonych metryk z prostszych miar.
  • Definiuje parametr, aby zastosować stawkę rabatu w czasie zapytania.
  • Zawiera metadane agenta dla pulpitów nawigacyjnych i narzędzi sztucznej inteligencji.

Jeśli dopiero zaczynasz korzystać z widoków metryk, zacznij od sekcji Tworzenie widoku metryki , aby poznać podstawy. Ten samouczek rozszerza tę podstawę o rzeczywistą złożoność.

Wymagania

Do ukończenia tego samouczka niezbędne są następujące elementy:

  • Obszar roboczy z włączonym Unity Catalog.
  • Usługa SQL Warehouse lub zasób obliczeniowy z uruchomionym środowiskiem Databricks Runtime w wersji 17.3 lub nowszej.

Aby uzyskać pełną listę uprawnień wymaganych do utworzenia widoku metryki, zobacz Wymagania wstępne.

Note

Tworzenie widoku metryk jest dostępne w Databricks Runtime 16.4 i nowszych. Ten samouczek wykorzystuje funkcje, które wymagają środowiska Databricks Runtime w wersji 17.3 lub nowszej, a niektóre kroki wymagają jeszcze nowszej wersji środowiska Databricks Runtime. Aby sprawdzić minimalną wersję środowiska uruchomieniowego dla poszczególnych funkcji, zobacz Dostępność funkcji widoku metryk.

Model danych

Zestaw danych TPC-H modeluje hurtowy łańcuch dostaw. Samouczek używa trzech tabel połączonych w schemacie płatka śniegu.

  • orders łączy się z customer na o_custkey = c_custkey
  • customer łączy się z nation na c_nationkey = n_nationkey
Tabela Rola Kolumny kluczy
orders Tabela faktów (transakcje zamówień) o_orderkey, o_custkey, , o_totalprice, o_orderdateo_orderstatus
customer Tabela wymiarowa (szczegóły klienta) c_custkey, , c_name, , c_mktsegmentc_nationkey
nation Tabela wymiarowa (odniesienie do kraju lub regionu) n_nationkey, , n_namen_regionkey

Krok 1. Utwórz widok metryki i otwórz edytor

Ten widok metryki można utworzyć w interfejsie użytkownika Eksploratora wykazu, wygenerować go przy użyciu kodu Genie lub napisać pełną definicję YAML bezpośrednio. Wszystkie trzy metody sprowadzają się do pojedynczej definicji YAML, która opisuje widok metryki. W każdym z poniższych kroków wybierz kartę Interfejs użytkownika eksploratora wykazu lub edytor YAML , aby postępować zgodnie z preferowaną metodą. Jeśli używasz edytora YAML, przykładowy kod w każdym kroku jest częścią definicji YAML, która odpowiada kompilacji w tym kroku.

Note

Przykłady YAML w tym samouczku używają słowa kluczowego fields. Podczas tworzenia widoku metrycznego w edytorze low-code generowany plik YAML zamiast tego używa równoważnego słowa kluczowego dimensions. Zobacz Pola.

Jeśli nie znasz interfejsu użytkownika służącego do tworzenia widoku metryki, zobacz Utwórz widok metryki.

Aby utworzyć widok metryczny, w Eksploratorze katalogu:

  1. Wyszukaj samples.tpch.orders.
  2. Kliknij nazwę tabeli.
  3. Kliknij pozycję Utwórz>widok metryki i nadaj widokowi nazwę.

Szczegółowe instrukcje tworzenia znajdziesz w artykule Tworzenie widoku metryk. Po otwarciu edytora użyj karty UI, aby tworzyć interaktywnie, lub kliknij przycisk <>, aby edytować definicję YAML bezpośrednio.

Krok 2. Konfigurowanie widoku metryki

Ustaw wersję i opis widoku metryk. Element version określa wersję specyfikacji YAML, a element comment opisuje cel widoku wskaźnika, widoczny w Catalog Explorer. Azure Databricks zarządza wersją za ciebie.

Interfejs użytkownika Eksploratora wykazu

Wersja jest zdefiniowana dla Ciebie. Aby dodać lub edytować opis po zapisaniu widoku metryki:

  1. W Catalog Explorer wyszukaj widok miary i kliknij jego nazwę.
  2. Kliknij element Opis, a następnie wprowadź opis widoku metryki. Możesz użyć przykładowego opisu pokazanego na karcie edytora YAML .

Ten tekst odpowiada comment polu w definicji YAML. Aby uzyskać więcej sposobów edytowania widoku metryki, zobacz Edytowanie widoku metryki.

Edytor YAML

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

Krok 3. Definiowanie źródła i sprzężeń

Zdefiniuj główną tabelę źródłową i połącz powiązane tabele:

  • source ustawia tabelę faktów (zamówienia) jako ziarno.
  • joins umożliwia korzystanie z danych klientów przy użyciu relacji wiele-do-jednego.
  • Sprzężenie zagnieżdżone nation demonstruje wzorzec schematu płatka śniegu, łącząc się w customer celu uzyskania dostępu do danych geograficznych, gdzie naród jest podwymiarowym klientem.

Interfejs użytkownika Eksploratora wykazu

W tym przykładzie dodano dwa połączenia, oba typu wiele do jednego, w celu zamodelowania schematu śnieżynki.

Aby dodać sprzężenie customer :

  1. W edytorze kliknij pozycję Złączenie w prawym górnym narożniku, aby otworzyć okno dialogowe Dodaj złączenie.
  2. Wyszukaj samples.tpch.customer, kliknij nazwę tabeli, a następnie kliknij Dodaj.
  3. Ustaw warunek łączenia na o_custkey = c_custkey.
  4. W obszarze Dołącz kardynalność wybierz pozycję Wiele do jednego. Aby uzyskać wskazówki dotyczące wybierania kardynalności, zobacz Łączenie kardynalności.

Następnie dodaj zagnieżdżone połączenie nation. Powtórz kroki dla sprzężenia customer, łącząc samples.tpch.nation na c_nationkey = n_nationkey. Zagnieżdżenie złączenia pod customer modeluje nation jako podwymiar klienta.

Instrukcje dotyczące okna dialogowego złączenia pełnego znajdują się w sekcji Krok 2: Dodaj złączenie.

Edytor YAML

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

Krok 4. Definiowanie filtru

filter ogranicza dane źródłowe i ma zastosowanie do wszystkich zapytań w widoku metryki. Ten samouczek ogranicza widok metryk do najnowszych danych.

Interfejs użytkownika Eksploratora wykazu

Aby zdefiniować filtr:

  1. W edytorze kliknij ikonę Filtruj.Filtruj w prawym górnym rogu.
  2. Użyj menu rozwijanych, aby ustawić kolumnę na o_orderdate, operator na >=, a wartość na1995-01-01.

Aby uzyskać więcej informacji na temat filtrów, zobacz Krok 3. Definiowanie filtru.

Edytor YAML

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

Krok 5. Definiowanie pól

Pola to atrybuty, według których użytkownicy grupują i filtrują. Pole może być kolumną kategorii (np. regionem lub stanem) lub nieagregowaną kolumną liczbową (taką jak wiek lub ilość), którą użytkownicy agregują w czasie zapytania.

Metadane agenta

Każde pole i każda miara w tym samouczku zawiera właściwości metadanych agenta, które usprawniają współpracę widoku metryk z pulpitami nawigacyjnymi i narzędziami AI:

  • display_name: Czytelna etykieta wyświetlana w wizualizacjach zamiast nazwy kolumny technicznej.
  • synonyms: Alternatywne nazwy, które pomagają narzędziom sztucznej inteligencji, takim jak Genie, odnajdywać pola i miary za pomocą zapytań w języku naturalnym.
  • format: Jak wartości są wyświetlane na powierzchniach podrzędnych, takich jak pulpity nawigacyjne, notesy i wyniki zapytania SQL, na przykład waluta, liczba lub procent.

Te właściwości są opcjonalne, ale zalecane. Definicje pól i miar w poniższych krokach są podane bezpośrednio w ich treści.

Definicje pola

Ten samouczek dodaje następujące elementy:

  • Pola czasowe:order_date , order_monthi order_year na wielu stopniach szczegółowości, aby obsługiwać różne potrzeby analizy.
  • Przekształcone pola:order_status i order_priority, które wykorzystują CASE i SPLIT do przekształcania kodów źródłowych w czytelne etykiety.
  • Pola sprzężone:customer_name, market_segmenti customer_nation, odwołujące się do tabel sprzężonych przy użyciu nazwy sprzężenia. Zagnieżdżone kolumny łączenia używają łańcuchowej notacji kropkowej, na przykład customer.nation.n_name, do poruszania się po schemacie typu snowflake.

Interfejs użytkownika Eksploratora wykazu

Edytor automatycznie dodaje wszystkie kolumny źródłowe do karty Pola . Edytuj, zmień nazwę, usuń i dodaj pola, aby widok metryki zdefiniował dokładnie następujące elementy. Dla każdego pola kliknij jego nazwę, aby go edytować, lub kliknij przycisk Dodaj lub ikona plusDodaj , aby go utworzyć, a następnie ustaw wyrażenie w konstruktorze lub trybie niestandardowym . Ustaw nazwę wyświetlaną i synonimy dla każdego pola, jak pokazano.

  1. order_date: w trybie Builder wybierz kolumnę o_orderdate. Ustaw nazwę wyświetlaną na Order Date.

  2. order_month: W trybie Własny wprowadź DATE_TRUNC('MONTH', order_date). Ustaw nazwę wyświetlaną na Order Month.

  3. order_year: W trybie niestandardowym wprowadź YEAR(order_date). Ustaw nazwę wyświetlaną na Order Year.

  4. order_status: W trybie niestandardowym wprowadź następujące wyrażenie. Ustaw nazwę wyświetlaną na Order Status i synonimy na status, fulfillment status.

    CASE o_orderstatus
      WHEN 'O' THEN 'Open'
      WHEN 'P' THEN 'Processing'
      WHEN 'F' THEN 'Fulfilled'
    END
    
  5. order_priority: W trybie Custom wprowadź SPLIT(o_orderpriority, '-')[0]. Ustaw nazwę wyświetlaną na Priority.

  6. customer_name: W trybie Builder wybierz z dołączonej tabeli c_name kolumnę customer. Ustaw nazwę wyświetlaną na Customer Name.

  7. market_segment: W trybie Builder wybierz kolumnę c_mktsegment z połączonej tabeli customer. Ustaw nazwę wyświetlaną na Market Segment i synonimy na segment, industry.

  8. customer_nation: W trybie Niestandardowy wprowadź customer.nation.n_name, aby odwołać się do zagnieżdżonego nation złączenia. Ustaw nazwę wyświetlaną na Country i synonimy na nation, country.

Aby zapoznać się z pełną procedurą dodawania pól, zobacz Krok 4: Dodawanie pól.

Edytor YAML

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

Krok 6. Definiowanie parametrów

Parametry umożliwiają przekazywanie wartości do widoku metryki podczas wykonywania zapytania, dzięki czemu pojedyncza definicja może obsługiwać wiele wariantów zapytań. Ten samouczek dodaje parametr discount, który późniejsza miara wykorzystuje do obliczania przychodów po rabacie. Parametr ma wartość domyślną 0, więc zapytania, które nie przekazują wartości, zwracają przychód bez rabatu. Aby uzyskać więcej informacji na temat parametrów, zobacz Używanie parametrów z widokami metryk.

Interfejs użytkownika Eksploratora wykazu

W nagłówku edytora kliknij pozycję Dodaj parametr. Wprowadź discount jako nazwę, a następnie wprowadź wartość domyślną 0 i wybierz typ danych double.

Edytor YAML

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

Krok 7. Definiowanie miar

Miary to obliczenia, które użytkownicy chcą analizować. Najpierw zdefiniuj miary atomowe, a następnie zastosuj kompozycję do budowy złożonych metryk, które odwołują się do wcześniej zdefiniowanych miar za pomocą funkcji MEASURE(). Ustaw display_name, format i synonyms dla każdego pomiaru zgodnie z opisem w sekcji Metadane agenta. Ten samouczek dodaje następujące elementy:

  • Miary atomowe:order_count, total_revenue i unique_customers, proste agregacje stanowiące podstawowe elementy składowe.
  • Miary złożone:avg_order_value i revenue_per_customer, które odwołują się do wcześniej zdefiniowanych miar z MEASURE() zamiast duplikować logikę agregacji. W przypadku total_revenue zmian te miary automatycznie używają zaktualizowanej definicji. Zobacz Kompozycyjność.
  • Przefiltrowane miary:open_order_revenue i fulfilled_order_revenue, które służą FILTER (WHERE ...) do tworzenia metryk warunkowych bez oddzielnych pól.
  • Miara sparametryzowana:discounted_revenue, która odwołuje się do parametru discount , aby zastosować stawkę rabatową. Zobacz Używanie parametrów w widokach metryk.
  • Miara okna czasowego:t7d_customers, która oblicza kroczącą 7-dniową liczbę unikatowych klientów. Zobacz Miary okien , aby uzyskać więcej wzorców miar okien.

Interfejs użytkownika Eksploratora wykazu

Edytor automatycznie dodaje przykładową COUNT(*) miarę. Edytuj lub usuń je i dodaj miary, aby widok metryki zdefiniował dokładnie następujące elementy. Dla każdej miary kliknij Dodaj lub ikonę plusDodaj, a następnie ustaw wyrażenie w trybie Builder lub Custom. Ustaw nazwę wyświetlaną, format i synonimy , jak pokazano. Użyj 2 miejsc dziesiętnych dla formatów walut i 0 miejsc dziesiętnych dla formatów liczb.

  1. order_count: W trybie Builder wybierz agregację Count distinct dla o_orderkey. Ustaw nazwę wyświetlaną na Order Count, format na Liczba.
  2. total_revenue: W trybie Builder wybierz agregację Suma dla o_totalprice. Ustaw nazwę wyświetlaną na Total Revenue, format na Waluta (USD), synonimy na revenue, sales.
  3. discounted_revenue: W trybie Custom wprowadź SUM(o_totalprice * (1 - discount)). Ustaw nazwę wyświetlaną na Discounted Revenue, format na Waluta (USD).
  4. unique_customers: W trybie Builder wybierz agregację Liczba unikalnych wartości dla o_custkey. Ustaw nazwę wyświetlaną na Unique Customers, format na Liczba.
  5. avg_order_value: w trybie niestandardowym wprowadź MEASURE(total_revenue) / MEASURE(order_count). Ustaw nazwę wyświetlaną na Avg Order Value, format na Waluta (USD), synonimy na AOV.
  6. revenue_per_customer: W trybie Niestandardowym wprowadź MEASURE(total_revenue) / MEASURE(unique_customers). Ustaw nazwę wyświetlaną na Revenue per Customer, format na Waluta (USD).
  7. open_order_revenue: w trybie niestandardowym wprowadź wartość SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O'). Ustaw nazwę wyświetlaną na Open Order Revenue, format na Waluta (USD), synonimy na backlog.
  8. fulfilled_order_revenue: W trybie niestandardowym wprowadź SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F'). Ustaw nazwę wyświetlaną na Fulfilled Revenue, format na Waluta (USD).
  9. t7d_customers: W trybie Custom wprowadź COUNT(DISTINCT o_custkey). Następnie kliknij pozycję + Okno i skonfiguruj okno uporządkowane według order_date z zakresem trailing 7 day i last agregacją częściową. Ustaw nazwę wyświetlaną na 7-Day Rolling Customers, format na Liczba.

Aby zapoznać się z pełnymi krokami miary, zobacz Krok 5. Dodawanie miar.

Edytor YAML

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

Przejrzyj pełną definicję

Po wykonaniu powyższych kroków widok metryki ma następującą pełną definicję:

Wyświetlanie pełnej definicji YAML
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
Tworzenie widoku metryk przy użyciu języka SQL

Jeśli tworzysz tę definicję poza Eksploratorem wykazu, uruchom następujący kod SQL, aby utworzyć widok metryki:

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

Aby uzyskać inne sposoby tworzenia widoku metryki, zobacz Tworzenie widoku metryki.

Krok 8. Wykonywanie zapytań względem widoku metryk

Wykonywanie zapytań względem widoku metryki przy użyciu przyjaznej dla firmy składni. Funkcja MEASURE() agreguje miarę na poziomie szczegółowości wybranych pól.

Agregowanie miar według wymiaru

Ten przykład agreguje miary w wielu polach. Zwraca całkowity przychód, liczbę zamówień i średnią wartość zamówienia według kraju klienta i segmentu rynkowego w pierwszej kolejności według najwyższych przychodów:

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;

Analizowanie trendu miesięcznego

Ten przykład łączy pole czasu z miarami w celu śledzenia trendu. Zwraca całkowity przychód i przychód z zamówienia otwartego (zaległości) według miesiąca i stanu zamówienia:

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;

Przekazywanie wartości parametru

Ponieważ widok metryki definiuje parametr, można go wywołać jako funkcję wartości tabeli i przekazać wartość w czasie zapytania. Poniższe zapytanie stosuje 10% rabatu. Ponieważ discount ma wartość domyślną 0, zapytania, które pomijają argument zwraca niezdyskrywany przychód:

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;

Zdobytą wiedzę

Utworzono widok metryki, który pokazuje:

Funkcja Example
Sprzężenia schematu płatka śniegu Zamówienia z klienta do narodu (zagnieżdżone łączenia wiele do jednego)
Pola czasu Granularność daty, miesiąca, roku
Przekształcone pola CASE instrukcje, SPLIT funkcje
Proste działania COUNT, SUM
Możliwość komponowania avg_order_value i revenue_per_customer odwołują się do wcześniej zdefiniowanych miar przy użyciu MEASURE()
Przefiltrowane miary FILTER (WHERE ...) dla agregacji warunkowych
Miary okien Przesuwająca się liczba klientów w okresie 7-dniowym za pomocą trailing 7 day
Parametry discount parametr zastosowany w discounted_revenue mierze
Metadane agenta display_name, format, synonyms dotyczące pól i miar

Dodatkowe zasoby