Pular para o conteúdo principal

Tutorial: Crie uma view completa do Mesh com junção.

Este tutorial orienta você na criação de uma view abrangente de métricas analíticas do Ventas usando o dataset TPC-H. Ao final, você terá uma view métrica que inclui:

  • Combine pedidos e clientes em várias tabelas usando um esquema em floco de neve.
  • Define as dimensões para os atributos de tempo, geografia e ordem.
  • Calcula medidas simples e complexas, incluindo proporções, agregações filtradas e medidas de janela.
  • Utiliza a capacidade de composição para construir métricas complexas a partir de medidas mais simples.
  • Inclui metadados do agente para painéis e ferramentas AI .

Se você é novo na visualização de métricas, comece com Criar e editar visualização de métricas para aprender o básico. Este tutorial amplia essa base com a complexidade do mundo real.

Requisitos

Para concluir este tutorial, você precisa de:

  • Seu workspace deve estar habilitado para o Unity Catalog.
  • Um SQL warehouse ou recurso compute executando Databricks Runtime 17.3 ou superior.

O modelo de dados

O dataset TPC-H modela uma cadeia de suprimentos de atacado. Este tutorial utiliza três tabelas unidas em um esquema em floco de neve:

  • orders junte-se a customer em o_custkey = c_custkey
  • customer junte-se a nation em c_nationkey = n_nationkey

Tabela

Função

colunas principais

orders

Tabela de fatos (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

o passo 1: Abra o editor YAML

Este tutorial utiliza o editor YAML para criar a definição da sua view de métricas. Para outros métodos, consulte Criar e editar visualização de métricas.

Para abrir o editor YAML:

  1. Clique Ícone de dados. Catálogo na barra lateral workspace .
  2. Use a barra de pesquisa para encontrar samples.tpch.orders.
  3. Clique no nome da tabela para exibir os detalhes da tabela.
  4. Clique em Criar > viewde métricas . Na caixa de diálogo Criar viewde métricas , insira um nome e selecione um catálogo e um destino de esquema. Em seguida, clique em Criar .
  5. Se necessário, clique em YAML para abrir o editor YAML.

o passo 2: Configure a viewde métricas

Comece com a versão e um comentário descritivo.

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

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

  • version: 1.1 Determina a versão da especificação YAML.
  • comment O documento descreve a finalidade da view métricas, que aparece no Explorador de Catálogo.

o passo 3: Defina a origem e a junção

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

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

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

Este exemplo define a tabela de origem, a junção e o filtro:

  • source Define a tabela de fatos (pedidos) como o grão.
  • joins Traz dados do cliente usando um relacionamento muitos-para-um.
  • A join aninhada nation demonstra um padrão de esquema em floco de neve, unindo através de customer para alcançar dados geográficos.
  • filter Limitações a dados recentes, que se aplicam a todas as consultas nesta view de métricas.

o passo 4: Definir dimensões

As dimensões são os atributos pelos quais os usuários agrupam e filtram.

YAML
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) atendem a diferentes necessidades de análise.
  • CASE Expressões transformam códigos enigmáticos em rótulos amigáveis para empresas.
  • As colunas unidas fazem referência a tabelas usando o alias definido em joins (como customer.c_name).
  • As colunas join aninhadas usam a notação de ponto encadeado (como customer.nation.n_name) para percorrer o esquema em floco de neve.

a etapa 5: Definir medidas

As métricas são os cálculos que os usuários desejam analisar. Defina primeiro as medidas atômicas e, em seguida, use a composibilidade para construir métricas complexas que referenciam medidas definidas anteriormente com a função MEASURE() .

YAML
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 medição:

  • 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) fazem referência a medidas definidas anteriormente usando MEASURE() em vez de duplicar a lógica de agregação. Se total_revenue for alterado, essas medidas usarão automaticamente a definição atualizada. Veja Composability.
  • FILTER As cláusulas criam métricas condicionais sem dimensões separadas.
  • A métrica de janela t7d_customers calcula uma contagem móvel de 7 dias de clientes únicos, útil para acompanhar as tendências de engajamento ao longo do tempo. Consulte Medidas de janela para obter mais padrões de medidas de janela.

o passo 6: Adicionar metadados do agente

Os metadados do agente aprimoram a visualização de dados e melhoram a precisão do LLM, fornecendo nomes de exibição, especificações de formato e sinônimos. Adicione essas propriedades às suas dimensões e medidas para dar contexto de negócios às suas métricas.

YAML
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 adiciona os seguintes metadados do agente:

  • display_name Fornece rótulos legíveis para humanos que aparecem em ferramentas de visualização em vez de nomes técnicos de colunas.
  • format Define como os valores são exibidos (moeda, número, porcentagem) nos painéis.
  • synonyms Ajudar ferramentas AI como Genie a descobrir dimensões e medidas por meio de consultas em linguagem natural.

Para obter detalhes completos sobre as opções de metadados do agente, consulte Metadados do agente na visualização métricas.

o passo 7: definição completa de YAML

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

YAML
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 view de métricas usando SQL

Se você estiver criando essa definição fora do Catalog Explorer, execute o seguinte SQL para criar a view de métricas. Cole o YAML completo acima entre os delimitadores $$ .

SQL
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 view de métricas, consulte Criar e editar visualização de métricas.

o passo 8: Consulte sua viewde métricas

Agora você pode consultar usando uma sintaxe adequada para negócios:

SQL
-- 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;
SQL
-- 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 você aprendeu

Você criou uma view de métricas que demonstra:

Recurso

Exemplo

Junção de esquema Snowflake

Ordens para cliente para país (junção aninhada de muitos para um)

Dimensões do tempo

Granularidade de data, mês e ano.

Dimensões transformadas

CASE declarações, funções SPLIT

medidas simples

COUNT, SUM

Composabilidade

avg_order_value e revenue_per_customer fazem referência a medidas definidas anteriormente usando MEASURE()

Medidas filtradas

FILTER (WHERE ...) para agregações condicionais

Medidas da janela

Contagem de clientes acumulada em 7 dias usando trailing 7 day

Metadados do agente

display_name, format, synonyms

Próximos passos