Tutorial: criar uma vista métrica com junções e modelação de dados

Neste tutorial, constrói uma vista de métrica de análise de vendas sobre o conjunto de dados TPC-H. No fim, terá uma visão métrica que:

  • Combina encomendas e clientes em várias tabelas usando um esquema em floco de neve.
  • Define campos (também chamados de 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 a composabilidade para construir métricas complexas a partir de medidas mais simples.
  • Define um parâmetro para aplicar uma taxa de desconto no momento da consulta.
  • Inclui metadados do agente para painéis e ferramentas de IA.

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

Requisitos

Para concluir este tutorial, tem de ter:

  • Um espaço de trabalho ativado para o Unity Catalog.
  • Um armazém SQL ou recurso de computação em execução no Databricks Runtime 17.3 ou superior.

Para a lista completa de privilégios necessários para criar uma vista métrica, veja Pré-requisitos.

Note

A criação de uma vista métrica é suportada no Databricks Runtime 16.4 e superiores. Este tutorial utiliza funcionalidades que requerem Databricks 17.3 ou superior, e alguns passos requerem um tempo de execução posterior. Para o tempo mínimo de execução de cada funcionalidade, consulte Disponibilidade de funcionalidades na vista métrica.

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
Tabela 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: Criar a vista métrica e abrir o editor

Pode construir esta vista métrica na interface do Catalog Explorer, gerá-la com o Genie Code ou escrever diretamente a definição YAML completa. Os três métodos resolvem para uma única definição YAML que modela a vista métrica. Em cada passo que se segue, selecione a interface do Explorador de Catálogo ou o separador do editor YAML para seguir o método preferido. Se usares o editor YAML, o código de exemplo em cada passo é a parte da definição YAML que corresponde ao que constróis nesse passo.

Note

Os exemplos de YAML neste tutorial usam a fields palavra-chave. Quando constróis uma vista métrica no editor low-code, o YAML que gera usa a palavra-chave equivalente dimensions em vez disso. Ver Campos.

Se não estiver familiarizado com a interface para criar vistas métricas, veja Criar uma vista métrica.

Para criar a visualização de métricas, no Catalog Explorer:

  1. Pesquise por samples.tpch.orders.
  2. Clique no nome da tabela.
  3. Clique em Criar>vista métrica e nomeie a vista.

Para os passos detalhados de criação, veja Criar uma vista métrica. Quando o editor abrir, use o separador UI para construir de forma interativa, ou clique no <> botão para editar diretamente a definição YAML.

Passo 2: Configurar a vista métrica

Defina uma versão e uma descrição para a vista métrica. O version determina a versão da especificação YAML, e o comment documenta o propósito da vista de métricas, que aparece no Explorador de Catálogos. O Azure Databricks gere a versão por ti.

UI do Explorador de Catálogo

A versão está definida para si. Para adicionar ou editar a descrição depois de guardar a vista métrica:

  1. No Explorador de Catálogos, pesquise a visualização de métricas e clique no respetivo nome.
  2. Clique em Descrição e depois introduza uma descrição da vista métrica. Pode utilizar a descrição de exemplo apresentada no separador do Editor YAML.

Este texto corresponde ao comment campo na definição YAML. Para mais formas de editar uma vista métrica, veja Editar uma vista métrica.

Editor 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

Passo 3: Defina a origem e as uniões

Defina a tabela de origem primária e junte tabelas relacionadas:

  • 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 em floco de neve, estabelecendo a junção através de customer para aceder a dados geográficos, em que a nação é uma subdimensão do cliente.

UI do Explorador de Catálogo

Este exemplo adiciona duas associações, ambas Many-to-one, para modelar o esquema em floco de neve.

Para adicionar a associação customer:

  1. No editor, clique em Join no canto superior direito para abrir a caixa de diálogo Add join.
  2. Procura por samples.tpch.customer, clica no nome da tabela e depois clica em Adicionar.
  3. Defina a condição de junção para o_custkey = c_custkey.
  4. Em Cardinalidade de Junção, selecione Muitos para um. Para obter orientações sobre como escolher uma cardinalidade, consulte Cardinalidade de junção.

Em seguida, adicione a associação aninhada nation. Repita os passos da associação customer, associando samples.tpch.nation a c_nationkey = n_nationkey. Ao aninhar o join sob customer, modela a nação como uma subdimensão do cliente.

Para os passos completos do diálogo de junção, veja Passo 2: Adicionar uma junção.

Editor 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

Passo 4: Defina um filtro

A filter limita os dados de origem, e aplica-se a todas as consultas na vista métrica. Este tutorial limita a vista métrica a dados recentes.

UI do Explorador de Catálogo

Para definir o filtro:

  1. No editor, clique no ícone Filtrar.Filtro no canto superior direito.
  2. Utilize os menus pendentes para definir a Coluna como o_orderdate, o Operador como >= e o Valor como 1995-01-01.

Para mais informações sobre filtros, veja Passo 3: Defina um filtro.

Editor YAML

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

Passo 5: Definir campos

Os campos são os atributos pelos quais os utilizadores agrupam e filtram. Um campo pode ser uma coluna categórica (como região ou estado) ou uma coluna numérica não agregada (como idade ou quantidade) que os utilizadores agregam no momento da consulta.

Metadados do agente

Cada campo e medida neste tutorial inclui propriedades de metadados do agente que melhoram a forma como a sua vista métrica funciona com painéis e ferramentas de IA:

  • display_name: Um rótulo legível que aparece nas visualizações em vez do nome da coluna técnica.
  • synonyms: Nomes alternativos que ajudam ferramentas de IA como o Genie a descobrir campos e medidas através de consultas em linguagem natural.
  • format: Como os valores são exibidos em superfícies a jusante como painéis, cadernos e resultados de consultas SQL, por exemplo, como moeda, número ou percentagem.

Estas propriedades são opcionais, mas recomendadas. As definições de campo e medida nos passos seguintes incluem-nas em linha.

Definições de campo

Este tutorial acrescenta:

  • Campos de tempo:order_date, order_month, e order_year em múltiplas granularidades para suportar diferentes necessidades de análise.
  • Campos transformados:order_status e order_priority, que usam CASE e SPLIT para converter código-fonte em etiquetas legíveis.
  • Campos associados:customer_name, market_segment, e customer_nation, que referenciam tabelas associadas utilizando o nome da junção. Colunas de junção aninhadas usam notação de ponto encadeado, como customer.nation.n_name, para percorrer o esquema floco de neve.

UI do Explorador de Catálogo

O editor adiciona automaticamente todas as colunas de origem ao separador Campos . Editar, renomear, remover e adicionar campos para que a vista métrica defina exatamente o seguinte. Para cada campo, clique no respetivo nome para o editar ou clique em Adicionar ou ícone de maisAdicionar para o criar e, em seguida, defina a expressão no modo Construtor ou Personalizado. Defina o Nome de Exibição e os Sinónimos de cada campo conforme mostrado.

  1. order_date: No modo Builder, selecione a coluna o_orderdate. Defina o nome de exibição para Order Date.

  2. order_month: No modo Personalizado, introduza DATE_TRUNC('MONTH', order_date). Defina o nome de exibição para Order Month.

  3. order_year: No modo Personalizado, introduza YEAR(order_date). Defina o nome de exibição para Order Year.

  4. order_status: No modo Personalizado , introduza a seguinte expressão. Defina o nome de exibição para Order Status e sinónimos para status, fulfillment status.

    CASE o_orderstatus
      WHEN 'O' THEN 'Open'
      WHEN 'P' THEN 'Processing'
      WHEN 'F' THEN 'Fulfilled'
    END
    
  5. order_priority: No modo Personalizado , introduza SPLIT(o_orderpriority, '-')[0]. Defina o nome de exibição para Priority.

  6. customer_name: No modo Builder , selecione a c_name coluna da tabela unida customer . Defina o nome de exibição para Customer Name.

  7. market_segment: No modo Builder, selecione a coluna c_mktsegment da tabela associada customer. Defina o nome de exibição para Market Segment e sinónimos para segment, industry.

  8. customer_nation: No modo Personalizado, introduza customer.nation.n_name para referenciar a junção aninhada nation. Defina o nome de exibição para Country e sinónimos para nation, country.

Para os passos completos do campo, veja Passo 4: Adicionar campos.

Editor 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

Passo 6: Definir parâmetros

Os parâmetros permitem passar valores para a vista da métrica quando a consultas, por isso uma única definição pode servir muitas variantes de consulta. Este tutorial adiciona um discount parâmetro que uma medida posterior usa para calcular receitas descontadas. O parâmetro tem como padrão , 0por isso consultas que não passam um valor retornam receitas não descontadas. Para mais informações sobre parâmetros, veja Usar parâmetros com vistas métricas.

UI do Explorador de Catálogo

No cabeçalho do editor, clique em Adicionar parâmetro. Insira discount como nome, depois introduza um valor predefinido de 0 e selecione o tipo de double dado.

Editor YAML

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

Passo 7: Defina 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. Defina o display_name, format, e synonyms para cada medida conforme descrito nos metadados do Agente. Este tutorial acrescenta:

  • Medidas atómicas:order_count, total_revenue, e unique_customers, as agregações simples que formam os blocos de construção.
  • Composições compostas:avg_order_value e revenue_per_customer, que referenciam medidas definidas anteriormente com MEASURE() em vez da lógica de agregação duplicada. Se total_revenue alterar, estas medidas utilizam automaticamente a definição atualizada. Consulte Composabilidade.
  • Medidas filtradas:open_order_revenue e fulfilled_order_revenue, que usam FILTER (WHERE ...) para criar métricas condicionais sem campos separados.
  • Medida parametrizada:discounted_revenue, que faz referência ao discount parâmetro para aplicar uma taxa de desconto. Ver Usar parâmetros com vistas métricas.
  • Medida em janela:t7d_customers, que calcula uma contagem contínua de 7 dias de clientes únicos. Consulte Medidas de janelas para mais padrões de medidas de janela.

UI do Explorador de Catálogo

O editor adiciona automaticamente uma medida de exemplo COUNT(*) . Edite ou remova e adicione medidas para que a vista métrica defina exatamente o seguinte. Para cada medida, clique em Adicionar ou no ícone de maisAdicionar e, em seguida, defina a expressão no modo Construtor ou Personalizado. Defina o Nome de Exibição, o Formato e os Sinónimos conforme mostrado. Use 2 casas decimais para formatos de moeda e 0 casas decimais para formatos numéricos.

  1. order_count: No modo Builder , selecione a agregação distinta Count em o_orderkey. Defina o nome de exibição para Order Count, formatar para Número.
  2. total_revenue: No modo Builder , selecione a agregação Sum em o_totalprice. Defina o nome de exibição para Total Revenue, formato para Moeda (USD), sinónimos para revenue, sales.
  3. discounted_revenue: No modo Personalizado, introduza SUM(o_totalprice * (1 - discount)). Defina o nome de exibição para Discounted Revenue, formato para Moeda (USD).
  4. unique_customers: No modo Builder , selecione a agregação distinta Count em o_custkey. Defina o nome de exibição para Unique Customers, formatar para Número.
  5. avg_order_value: No modo Personalizado, introduza MEASURE(total_revenue) / MEASURE(order_count). Defina o nome de exibição para Avg Order Value, formate para Moeda (USD), sinónimos para AOV.
  6. revenue_per_customer: No modo Personalizado, introduza MEASURE(total_revenue) / MEASURE(unique_customers). Defina o nome de exibição para Revenue per Customer, formato para Moeda (USD).
  7. open_order_revenue: No modo Personalizado, introduza SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O'). Defina o nome de exibição para Open Order Revenue, formate para Moeda (USD), sinónimos para backlog.
  8. fulfilled_order_revenue: No modo Personalizado, introduza SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F'). Defina o nome de exibição para Fulfilled Revenue, formato para Moeda (USD).
  9. t7d_customers: Em modo Personalizado, introduza COUNT(DISTINCT o_custkey). Em seguida, clica + Janela e configura uma janela ordenada por order_date com intervalo trailing 7 day e agregação semiaditiva last. Defina o nome de exibição para 7-Day Rolling Customers, formatar para Número.

Para os passos completos da medida, veja Passo 5: Adicionar medidas.

Editor 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

Rever a definição completa

Após completar os passos acima, a sua vista métrica tem a seguinte definição completa:

Veja a definição completa do 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
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:

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

Para outras formas de criar uma vista métrica, veja Criar uma vista métrica.

Passo 8: Consulte a sua vista métrica

Consulte a vista de métricas usando uma sintaxe adequada à empresa. A função MEASURE() agrega uma medida à granularidade dos campos selecionados.

Medidas agregadas por dimensão

Este exemplo agrega medidas em múltiplos campos. Apresenta receita total, número de encomendas e valor médio das encomendas por país cliente e segmento de mercado, classificados primeiro pela receita mais alta:

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;

Analisar uma tendência mensal

Este exemplo combina um campo temporal com medidas para acompanhar uma tendência. Apresenta a receita total e a receita de encomendas abertas (carteira de encomendas) por mês e estado das encomendas:

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;

Passar um valor de parâmetro

Como a vista métrica define um parâmetro, pode chamá-lo como uma função de tabela e passar um valor no momento da consulta. A consulta seguinte aplica um desconto de 10%. Como discount tem um padrão de 0, as consultas que omitam o argumento retornam receita não descontada:

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;

O que aprendeste

Criaste uma vista métrica que demonstra:

Feature Example
Juntas de esquemas floco de neve Ordens para cliente para nação (junções muitos-para-um)
Campos de hora Data, mês, ano granularidade
Campos transformados 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
Parâmetros discount parâmetro aplicado na discounted_revenue medida
Metadados do agente display_name, format, synonyms nos campos e medidas

Recursos adicionais