Partilhar via


Tutorial: Constrói uma vista métrica completa com joins

Este tutorial guia-o na construção de uma vista abrangente de métricas de análise de vendas usando o conjunto de dados TPC-H. No fim, terá uma visão métrica que:

  • Junta encomendas e clientes em várias tabelas usando um esquema floco de neve
  • Define dimensões para atributos de tempo, geografia e ordem
  • Calcula medidas simples e complexas, incluindo rácios, agregações filtradas e medidas de janela
  • Utiliza compostabilidade para construir métricas complexas a partir de medidas mais simples
  • Inclui metadados de agentes para dashboards e ferramentas de IA

Se és novo nas vistas métricas, começa por Criar e editar vistas métricas para aprenderes o básico. Este tutorial estende essa base com a complexidade do mundo real.

Requisitos

Para concluir este tutorial, você precisa:

  • Seu espaço de trabalho deve estar habilitado para o Catálogo Unity.
  • Um armazém SQL ou recurso de computação em execução no Databricks Runtime 17.3 ou superior.

O modelo de dados

O conjunto de dados TPC-H modela uma cadeia de abastecimento grossista. Este tutorial utiliza três tabelas unidas num esquema floco de neve:

  • orders junta-se a customer em o_custkey = c_custkey
  • customer junta-se a nation em c_nationkey = n_nationkey
Table Função Colunas-chave
orders Tabela de factos (transações de pedidos) o_orderkey, o_custkey, o_totalprice, o_orderdate, o_orderstatus
customer Tabela de dimensões (detalhes do cliente) c_custkey, c_name, c_mktsegment, c_nationkey
nation Tabela de dimensões (referência de país ou região) n_nationkey, n_name, n_regionkey

Passo 1: Abra o editor YAML

Este tutorial utiliza o editor YAML para criar a definição da tua vista métrica. Para outros métodos, veja Criar e editar vistas métricas.

Para abrir o editor YAML:

  1. Clique no ícone Dados.Catálogo na barra lateral do espaço de trabalho.
  2. Use a barra de pesquisa para encontrar samples.tpch.orders.
  3. Clique no nome da tabela para mostrar os detalhes da tabela.
  4. Clique em Criar>visualização de métrica. No diálogo Criar vista métrica , introduza um nome e selecione um catálogo e destino de esquema. Depois clica em Criar.
  5. Se necessário, clique em YAML para abrir o editor YAML.

Passo 2: Configurar a vista métrica

Comece pela versão e um comentário descritivo.

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

Este exemplo define a versão e acrescenta uma descrição:

  • version: 1.1 determina a versão da especificação YAML.
  • comment documenta o propósito da vista métrica, que aparece no Explorador de Catálogos.

Passo 3: Defina a origem e as uniões

Defina a tabela de origem primária e junte as tabelas relacionadas. A nation junção está aninhada dentro da customer junção para refletir o esquema floco de neve, onde a nação é uma subdimensão do cliente.

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'

Este exemplo define a tabela de origem, as junções e o filtro:

  • source define a tabela de factos (ordens) como o grão.
  • joins traz dados dos clientes através de uma relação muitos-para-um.
  • A junção aninhada nation demonstra um padrão de esquema floco de neve, ligando através de customer para alcançar dados geográficos.
  • filter Limites a dados recentes, que se aplicam a todas as consultas nesta vista métrica.

Passo 4: Definir dimensões

As dimensões são os atributos pelos quais os utilizadores agrupam e filtram.

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

Este exemplo demonstra padrões dimensionais:

  • As dimensões temporais em múltiplas granularidades (data, mês, ano) suportam diferentes necessidades de análise.
  • CASE Expressões transformam códigos enigmáticos em rótulos empresariais.
  • Colunas unidas referenciam tabelas usando o alias definido em joins (como customer.c_name).
  • Colunas de junção aninhadas usam notação de pontos encadeados (como customer.nation.n_name) para percorrer o esquema floco de neve.

Passo 5: Definir medidas

As medidas são os cálculos que os utilizadores querem analisar. Defina primeiro as medidas atómicas, depois use a composabilidade para construir métricas complexas que referenciam medidas previamente definidas com a MEASURE() função.

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

Este exemplo demonstra padrões de medida:

  • As medidas atómicas (order_count, total_revenue, unique_customers) são agregações simples que formam os blocos de construção.
  • As medidas compostas (avg_order_value, revenue_per_customer) referenciam medidas definidas anteriormente usando MEASURE() em vez da lógica de agregação duplicada. Se total_revenue alterar, estas medidas utilizam automaticamente a definição atualizada. Consulte Composabilidade.
  • FILTER cláusulas criam métricas condicionais sem usar dimensões separadas.
  • A t7d_customers métrica de janela calcula uma contagem rolante de 7 dias de clientes únicos, útil para acompanhar as tendências de engajamento ao longo do tempo. Consulte Medidas de janelas para mais padrões de medidas de janela.

Passo 6: Adicionar metadados do agente

Os metadados do agente melhoram a visualização de dados e a precisão dos LLMs ao fornecer nomes de visualização, especificações de formato e sinónimos. Adicione estas propriedades às suas dimensões e medidas para dar contexto empresarial às suas métricas.

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

Este exemplo acrescenta os seguintes metadados do agente:

  • display_name fornece rótulos legíveis por humanos que aparecem nas ferramentas de visualização em vez dos nomes das colunas técnicas.
  • format define como os valores são apresentados (moeda, número, percentagem) nos painéis de controlo.
  • synonyms ajudar ferramentas de IA como o Genie a descobrir dimensões e medidas através de consultas em linguagem natural.

Para detalhes completos sobre as opções de metadados do agente, consulte Metadados do agente nas vistas métricas.

Passo 7: Definição completa do YAML

Aqui está a definição completa da vista métrica:

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
Crie a vista métrica usando SQL

Se estiver a construir esta definição fora do Explorador de Catálogos, execute o seguinte SQL para criar a vista métrica. Cole o YAML completo de acima entre os delimitadores $$.

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

Para outras formas de criar uma vista métrica, veja Criar e editar vistas métricas.

Passo 8: Consulte a sua vista métrica

Agora pode consultar usando uma sintaxe amigável para os negócios:

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

O que aprendeste

Criaste uma vista métrica que demonstra:

Feature Exemplo
Juntas de esquemas floco de neve Ordens para cliente para nação (junções muitos-para-um)
Dimensões temporais Data, mês, ano granularidade
Dimensões transformadas CASE instruções, SPLIT funções
Medidas simples COUNT, SUM
Composabilidade avg_order_value e revenue_per_customer referenciar medidas definidas anteriormente usando MEASURE()
Medidas filtradas FILTER (WHERE ...) para agregações condicionais
Medidas de janelas Contagem móvel de clientes de 7 dias usando trailing 7 day
Metadados do agente display_name, format, synonyms

Passos seguintes