Öğretici: Birleştirmelerle eksiksiz bir ölçüm görünümü oluşturma

Bu öğretici, TPC-H veri kümesini kullanarak kapsamlı bir satış analizi ölçüm görünümü oluşturma işleminde size yol gösterir. Sonunda şunları içeren bir ölçüm görünümünüz olacak:

  • Kar tanesi şemasını kullanarak siparişleri ve müşterileri birden çok tablo arasında birleştirir
  • Zaman, coğrafya ve sipariş öznitelikleri için boyutları tanımlar
  • Oranlar, filtrelenmiş toplamalar ve pencere ölçüleri gibi basit ve karmaşık ölçüleri hesaplar
  • Daha basit ölçülerden karmaşık ölçümler oluşturmak için birleştirmeyi kullanır
  • Panolar ve yapay zeka araçları için aracı meta verilerini içerir

Ölçüm görünümlerini kullanmaya yeni başladıysanız temel bilgileri öğrenmek için Ölçüm görünümleri oluşturma ve düzenleme ile başlayın. Bu öğretici, temeli gerçek dünya karmaşıklığıyla genişletir.

Gereksinimler

Bu eğitimi tamamlamak için şunlara ihtiyacınız olacak:

  • Unity Kataloğu için çalışma alanınızın etkinleştirilmesi gerekir.
  • Databricks Runtime 17.3 veya üzerini çalıştıran bir SQL ambarı veya işlem kaynağı.

Veri modeli

TPC-H veri kümesi, toptan tedarik zincirini modeller. Bu öğreticide kar tanesi şemasında birleştirilen üç tablo kullanılır:

  • orders customer ile o_custkey = c_custkey üzerinde bağlanır
  • customer nation ile c_nationkey = n_nationkey üzerinde bağlanır
Tabela Rol Anahtar sütunlar
orders Olgu tablosu (sipariş hareketleri) o_orderkey, o_custkey, o_totalprice, o_orderdate, , o_orderstatus
customer Boyut tablosu (müşteri ayrıntıları) c_custkey, c_name, c_mktsegment, c_nationkey
nation Boyut tablosu (ülke veya bölge referansı) n_nationkey, n_name, n_regionkey

1. Adım: YAML düzenleyicisini açma

Bu öğreticide ölçüm görünümü tanımınızı oluşturmak için YAML düzenleyicisi kullanılır. Diğer yöntemler için bkz . Ölçüm görünümleri oluşturma ve düzenleme.

YAML düzenleyicisini açmak için:

  1. Veri simgesine tıklayın. Çalışma alanı kenar çubuğunda katalog.
  2. bulmak samples.tpch.ordersiçin arama çubuğunu kullanın.
  3. Tablo ayrıntılarını göstermek için tablo adına tıklayın.
  4. Ölçüm görünümü> tıklayın. Ölçüm görünümü oluştur iletişim kutusunda bir ad girin ve bir katalog ve şema hedefi seçin. Ardından Oluştur'a tıklayın.
  5. Gerekirse YAML düzenleyicisini açmak için YAML'ye tıklayın.

2. Adım: Ölçüm görünümünü ayarlama

Sürüm ve açıklayıcı bir açıklama ile başlayın.

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

Bu örnek sürümü ayarlar ve bir açıklama ekler:

  • version: 1.1 YAML belirtiminin sürümünü belirler.
  • comment , Katalog Gezgini'nde görünen ölçüm görünümünün amacını belgeler.

3. Adım: Kaynağı ve birleşimleri tanımlama

Birincil kaynak tabloyu tanımlayın ve ilişkili tabloları birleştirin. Birleştirme nation , birleştirmenin altında, ulusun customer müşterinin bir alt lisansı olduğu kar tanesi şemasını yansıtacak şekilde iç içe yerleştirilmiştir.

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'

Bu örnek kaynak tabloyu, birleşimleri ve filtreyi tanımlar:

  • source olgu tablosunu (siparişler) dilim olarak ayarlar.
  • joins çoktan bire ilişki kullanarak müşteri verilerini alır.
  • İç içe nation birleştirme, coğrafi verilere ulaşmak için customer aracılığıyla birleşmiş bir kar tanesi şeması modelini gösterir.
  • filter bu ölçüm görünümündeki tüm sorgular için geçerli olan son verilere yönelik sınırlar.

4. Adım: Boyutları tanımlama

Boyutlar, kullanıcıların gruplandırdığı ve filtrelediği özniteliklerdir.

dimensions:
  - name: order_date
    expr: o_orderdate

  - name: order_month
    expr: "DATE_TRUNC('MONTH', o_orderdate)"

  - name: order_year
    expr: YEAR(o_orderdate)

  - name: order_status
    expr: |-
      CASE o_orderstatus
        WHEN 'O' THEN 'Open'
        WHEN 'P' THEN 'Processing'
        WHEN 'F' THEN 'Fulfilled'
      END

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

  - name: customer_name
    expr: customer.c_name

  - name: market_segment
    expr: customer.c_mktsegment

  - name: customer_nation
    expr: customer.nation.n_name

Bu örnekte boyut desenleri gösterilmektedir:

  • Birden çok ayrıntı düzeyindeki zaman boyutları (tarih, ay, yıl) farklı analiz gereksinimlerini destekler.
  • CASE ifadeleri, şifreleme kodlarını iş dostu etiketlere dönüştürür.
  • Birleştirilmiş sütunlar, joins içinde tanımlanan ve örneğin customer.c_name gibi olan bir diğer ad kullanarak tablolara başvurur.
  • İç içe birleştirme sütunları, kar tanesi şemasında dolaşmak için zincirleme nokta notasyonunu (örneğin customer.nation.n_name) kullanır.

5. Adım: Ölçüleri tanımlama

Ölçüler, kullanıcıların analiz etmek istediği hesaplamalardır. Önce atomik ölçüleri tanımlayın, ardından MEASURE() işlevini kullanarak daha önce tanımlanmış ölçülere başvuran karmaşık ölçümler oluşturmak için birleştirilebilirlikten yararlanın.

measures:
  - name: order_count
    expr: COUNT(DISTINCT o_orderkey)

  - name: total_revenue
    expr: SUM(o_totalprice)

  - name: unique_customers
    expr: COUNT(DISTINCT o_custkey)

  - name: avg_order_value
    expr: MEASURE(total_revenue) / MEASURE(order_count)

  - name: revenue_per_customer
    expr: MEASURE(total_revenue) / MEASURE(unique_customers)

  - name: open_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')

  - name: fulfilled_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F')

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

Bu örnekte ölçü desenleri gösterilmektedir:

  • Atomik ölçüler (order_count, total_revenue, unique_customers) yapı taşları oluşturan basit toplamalardır.
  • Oluşturulan ölçüler (avg_order_value, revenue_per_customer), toplama mantığını çoğaltmak yerine MEASURE() kullanarak daha önce tanımlanmış ölçülere başvurur. Değişiklik olursa total_revenue , bu ölçüler otomatik olarak güncelleştirilmiş tanımı kullanır. Bkz. Oluşturma.
  • FILTER yan tümce öbekleri ayrı boyutlar olmadan koşullu metrikler oluşturur.
  • Pencere t7d_customers ölçüsü, zaman içindeki etkileşim eğilimlerini izlemek için yararlı olan benzersiz müşterilerin 7 günlük hareketli sayısını hesaplar. Daha fazla pencere ölçüsü deseni için bkz. Pencere ölçüleri.

6. Adım: Aracı meta verilerini ekleme

Aracı meta verileri, görünen adlar, biçim belirtimleri ve eş anlamlılar sağlayarak veri görselleştirmesini geliştirir ve LLM doğruluğunu geliştirir. Ölçümlerinize iş bağlamı sağlamak için bu özellikleri boyutlarınıza ve ölçülerinize ekleyin.

dimensions:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date
  - name: order_month
    expr: "DATE_TRUNC('MONTH', o_orderdate)"
    display_name: Order Month
  - name: order_year
    expr: YEAR(o_orderdate)
    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: 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

Bu örnek aşağıdaki aracı meta verilerini ekler:

  • display_name , teknik sütun adları yerine görselleştirme araçlarında görünen, insan tarafından okunabilir etiketler sağlar.
  • format , değerlerin panolarda nasıl görüntüleneceğini (para birimi, sayı, yüzde) tanımlar.
  • synonyms Genie gibi yapay zeka araçlarının doğal dil sorguları aracılığıyla boyutları ve ölçüleri bulmasına yardımcı olun.

Aracı meta veri seçenekleriyle ilgili tüm ayrıntılar için bkz. Ölçüm görünümlerinde aracı meta verileri.

7. Adım: YAML tanımını tamamlama

İşte tam ölçüm görünümünün tanımı:

version: 1.1

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

dimensions:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date
  - name: order_month
    expr: "DATE_TRUNC('MONTH', o_orderdate)"
    display_name: Order Month
  - name: order_year
    expr: YEAR(o_orderdate)
    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: 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
SQL kullanarak ölçüm görünümünü oluşturma

Bu tanımı Katalog Gezgini'nin dışında oluşturuyorsanız ölçüm görünümünü oluşturmak için aşağıdaki SQL'i çalıştırın. Yukarıdaki tüm YAML'yi sınırlayıcılar arasına yapıştırın $$ .

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

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

dimensions:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date
  - name: order_month
    expr: "DATE_TRUNC('MONTH', o_orderdate)"
    display_name: Order Month
  - name: order_year
    expr: YEAR(o_orderdate)
    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: 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
$$;

Ölçüm görünümü oluşturmanın diğer yolları için bkz. Ölçüm görünümleri oluşturma ve düzenleme.

8. Adım: Ölçüm görünümünüzü sorgulama

Artık iş dostu söz dizimlerini kullanarak sorgulayabilirsiniz:

-- Aggregates total revenue, order count, and average order value
-- by customer nation and market segment, ranked by highest revenue first.
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;
-- Monthly trend with backlog analysis
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;

Öğrendiklerin

Şunları gösteren bir ölçüm görünümü oluşturdunuz:

Özellik Example
Snowflake şema birleştirmeleri Müşteriden ülkeye siparişler (iç içe çoktan bire bağlantılar)
Zaman boyutları Tarih, ay, yıl ayrıntı düzeyi
Dönüştürülen boyutlar CASE ifadeler, SPLIT işlevler
Basit ölçüler COUNT, SUM
Bestelenebilirlik avg_order_value ve revenue_per_customer, MEASURE() kullanarak önceki tanımlı ölçülere atıfta bulunur
Filtrelenmiş ölçüler FILTER (WHERE ...) koşullu toplamalar için
Pencere ölçüleri 7 günlük hareketli müşteri sayısını trailing 7 day kullanarak hesaplama
Aracı meta verileri display_name, format, synonyms

Sonraki Adımlar