Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
-
ordersjunta-se acustomeremo_custkey = c_custkey -
customerjunta-se anationemc_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:
- Clique no
Catálogo na barra lateral do espaço de trabalho.
- Use a barra de pesquisa para encontrar
samples.tpch.orders. - Clique no nome da tabela para mostrar os detalhes da tabela.
- 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.
- 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.1determina a versão da especificação YAML. -
commentdocumenta 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:
-
sourcedefine a tabela de factos (ordens) como o grão. -
joinstraz dados dos clientes através de uma relação muitos-para-um. - A junção aninhada
nationdemonstra um padrão de esquema floco de neve, ligando através decustomerpara alcançar dados geográficos. -
filterLimites 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.
-
CASEExpressões transformam códigos enigmáticos em rótulos empresariais. - Colunas unidas referenciam tabelas usando o alias definido em
joins(comocustomer.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 usandoMEASURE()em vez da lógica de agregação duplicada. Setotal_revenuealterar, estas medidas utilizam automaticamente a definição atualizada. Consulte Composabilidade. -
FILTERcláusulas criam métricas condicionais sem usar dimensões separadas. - A
t7d_customersmé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_namefornece rótulos legíveis por humanos que aparecem nas ferramentas de visualização em vez dos nomes das colunas técnicas. -
formatdefine como os valores são apresentados (moeda, número, percentagem) nos painéis de controlo. -
synonymsajudar 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
- Medidas da janela para calcular médias móveis e totais acumulados do ano.
- Materialização para vistas métricas para melhorar o desempenho das consultas em grandes conjuntos de dados.
- Use vistas métricas para usar a sua vista métrica em dashboards de IA/BI.