Pular para o conteúdo principal

Técnicas avançadas para visualização de Métis

Técnicas avançadas para visualização de métricas permitem cálculos sofisticados, como médias móveis, variações entre períodos, totais acumulados e KPIs derivados complexos, mantendo a consistência e a reutilização em toda a sua camada semântica. Esta página explica como usar medidas de janela para análise de séries temporais e a composibilidade para construir métricas complexas a partir de medidas mais simples.

Esta página pressupõe familiaridade com os conceitos básicos de modelagem view de métricas. Veja a visualização de métricas do modelo.

nota

Os exemplos nesta página utilizam o dataset de amostra TPC-H, que modela uma cadeia de suprimentos de atacado. Para obter mais informações sobre o dataset TPC-H, consulte tpch. Para um tutorial completo usando este dataset com a visualização de métricas, consulte o tutorial: Criar uma view de métricas completa com join.

Medidas da janela

info

Experimental

Este recurso é experimental.

As medidas de janela permitem definir medidas com agregações em janela, cumulativas ou semiaditivas na sua visualização de métricas, suportando cálculos como médias móveis, variações entre períodos e totais acumulados. Esta seção inclui exemplos práticos.

Defina uma medida de janela.

As medidas de janela permitem definir medidas com agregações em janelas, cumulativas ou semiaditivas. Uma medida de janela inclui os seguintes valores obrigatórios:

  • ordem : A dimensão que determina a ordem da janela.

  • intervalo : Define a extensão da janela, como dados finais, cumulativos ou todos os dados. Os valores possíveis do intervalo incluem os seguintes:

    • current : Inclui linhas onde o valor de ordenação da janela é igual ao valor da linha atual.
    • cumulative : Inclui todas as linhas onde o valor de ordenação da janela é menor ou igual ao valor da linha atual.
    • trailing <value> <unit> : Inclui linhas da linha atual retrocedendo pelo número especificado de unidades de tempo, como trailing 3 months. Isso não inclui a unidade atual. Por exemplo, trailing 3 months exclui o mês atual.
    • leading <value> <unit> : Inclui linhas da linha atual avançando pelo número especificado de unidades de tempo, como leading 7 days. Isso não inclui a unidade atual.
    • all : Inclui todas as linhas, independentemente do valor da janela.
  • semiaditivo : Especifica como agregar a medida quando o campo de ordem não está incluído no GROUP BY da consulta. Os valores possíveis incluem first e last.

Exemplo de medida de janela inicial, móvel ou posterior

O exemplo a seguir calcula uma contagem móvel de 7 dias de clientes únicos que fizeram pedidos. Essa métrica ajuda a acompanhar as tendências de engajamento do cliente ao longo do tempo, mostrando quantos clientes diferentes fizeram compras na semana que antecedeu cada data.

YAML
version: 1.1

source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'

dimensions:
- name: date
expr: o_orderdate

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

Para este exemplo, aplica-se a seguinte configuração:

  • order : date especifica que a dimensão da data ordena a janela.
  • intervalo : A especificação trailing 7 day define a janela como os 7 dias anteriores a cada data, excluindo a própria data.
  • semiaditivo : last indica que o último valor na janela de 7 dias é usado quando a data não é uma coluna de agrupamento.

Exemplo de medida de janela período a período

O exemplo a seguir calcula o crescimento das vendas dia a dia, comparando a receita de hoje (soma de todos os preços dos pedidos) com a receita de ontem. Essa métrica ajuda a identificar tendências diárias de vendas e mostra a variação percentual da receita, o que é útil para monitorar o desempenho dos negócios e detectar anomalias.

YAML
version: 1.1

source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'

dimensions:
- name: date
expr: o_orderdate
measures:
- name: previous_day_sales
expr: SUM(o_totalprice)
window:
- order: date
range: trailing 1 day
semiadditive: last
- name: current_day_sales
expr: SUM(o_totalprice)
window:
- order: date
range: current
semiadditive: last
- name: day_over_day_growth
expr: (MEASURE(current_day_sales) - MEASURE(previous_day_sales)) / MEASURE(previous_day_sales) * 100

Para este exemplo, aplicam-se as seguintes condições:

  • São utilizadas duas medidas de janela: uma para calcular o total de vendas do dia anterior e outra para o dia atual.

  • Uma terceira medida calcula a variação percentual (crescimento) entre o dia atual e o dia anterior.

Exemplo de medida de total cumulativo (acumulado)

O exemplo a seguir calcula a receita acumulada de vendas desde o início do dataset até cada data. Este total acumulado mostra a receita total gerada ao longo do tempo, sendo útil para acompanhar o progresso em direção às metas de receita anual ou para analisar padrões de crescimento a longo prazo.

YAML
version: 1.1
source: samples.tpch.orders

filter: o_orderdate > DATE'1998-01-01'

dimensions:
- name: date
expr: o_orderdate
- name: customer
expr: o_custkey

measures:
- name: running_total_sales
expr: SUM(o_totalprice)
window:
- order: date
range: cumulative
semiadditive: last

Os detalhes a seguir destacam partes key desta definição:

  • ordem : Especifica a dimensão que define a ordem dos registros dentro da janela. Neste exemplo, date ordena a janela cronologicamente.

  • range : cumulative define a janela como todos os dados desde o início do dataset até cada data inclusive.

  • semiaditivo : last controla como a medida é agregada quando date não está incluído na consulta. Quando a dimensão de data não está incluída em GROUP BY da sua consulta, a medida retorna o último (mais recente) valor cumulativo em vez de somar todas as datas.

Exemplo de medida de período até a data

O exemplo a seguir calcula a receita de vendas acumulada no ano (YTD). Esta métrica mostra a receita acumulada gerada desde 1º de janeiro de cada ano até a data atual, sendo zerada no início de cada novo ano. Estas métricas são essenciais para comparar o desempenho do ano atual com os anos anteriores e o progresso do acompanhamento em direção às metas anuais.

YAML
version: 1.1

source: samples.tpch.orders
filter: o_orderdate > DATE'1997-01-01'

dimensions:
- name: date
expr: o_orderdate
- name: year
expr: DATE_TRUNC('year', o_orderdate)
measures:
- name: ytd_sales
expr: SUM(o_totalprice)
window:
- order: date
range: cumulative
semiadditive: last
- order: year
range: current
semiadditive: last

Os detalhes a seguir destacam partes key desta definição:

  • São utilizadas duas medidas de janela: uma para a soma cumulativa na dimensão date e outra para limitar a soma ao ano current .

  • A dimensão year restringe a soma cumulativa para que seja calculada apenas dentro do ano atual.

Exemplo de medida semiaditiva

O exemplo a seguir calcula saldos account , que não devem ser somados entre datas (não é possível somar o saldo de segunda-feira ao saldo de terça-feira para obter o saldo total). Em vez disso, ao agregar dados de vários dias, a métrica retorna o saldo mais recente. No entanto, a métrica ainda pode ser somada entre os clientes para mostrar o saldo total de todas as contas em um determinado dia.

YAML
version: 1.1

dimensions:
- name: date
expr: date
- name: customer
expr: customer_id

measures:
- name: semiadditive_balance
expr: SUM(balance)
window:
- order: date
range: current
semiadditive: last

Os detalhes a seguir destacam partes key desta definição:

  • ordem : Especifica a dimensão que define a ordem dos registros dentro da janela. Neste exemplo, date ordena a janela cronologicamente.

  • range : current restringe a janela a um único dia, sem agregação entre dias.

  • semiaditivo : last retorna o saldo mais recente ao agregar vários dias.

Consultar uma medida de janela

Você pode consultar uma view de métricas com uma medida de janela, assim como em qualquer outra view de métricas. O exemplo a seguir consulta uma view de métricas:

SQL
SELECT
state,
DATE_TRUNC('month', date),
MEASURE(t7d_customers) as m
FROM my_metric_view
WHERE date >= DATE'2024-06-01'
GROUP BY ALL

Composabilidade

As visualizações de métricas são combináveis. Você pode criar novas dimensões e medidas que façam referência às existentes, em vez de reescrever a lógica do zero. Isso reduz a duplicação e facilita a manutenção de definições de métricas complexas.

A capacidade de composição funciona em dois níveis: dentro de uma única view de métricas e entre diferentes visões de métricas. Uma view de métricas pode usar outra view de métricas como fonte, permitindo sobrepor definições e construir modelos semânticos progressivamente mais ricos sem duplicar a lógica.

A capacidade de composição suporta os seguintes padrões de referência:

  • Dimensões anteriores em novas dimensões.
  • Dimensões e medidas anteriores em novas medidas.
  • Dimensões da vista métrica usadas como fonte em novas dimensões.
  • Dimensões e medidas da visão métrica utilizadas como fonte em novas medidas.

Defina medidas com composibilidade

Na seção measures , você pode referenciar medidas da view de métricas de origem ou medidas definidas anteriormente na mesma view de métricas. Essa abordagem melhora a consistência, a auditabilidade e a manutenção da sua camada semântica.

Tipo de medida

Descrição

Exemplo

Atômico

Uma agregação simples e direta em uma coluna de origem. Esses são os elementos básicos.

SUM(o_totalprice)

Composto

Uma expressão que combina matematicamente uma ou mais medidas usando a função MEASURE() .

MEASURE(total_revenue) / MEASURE(order_count)

Exemplo: Valor Médio do Pedido (AOV)

O exemplo a seguir define o Valor Médio do Pedido (AOV) usando duas medidas atômicas: total_revenue (soma dos preços dos pedidos) e order_count (número de pedidos). A medida avg_order_value faz referência a ambas as medidas atômicas.

YAML
version: 1.1

source: samples.tpch.orders

measures:
# Total Revenue
- name: total_revenue
expr: SUM(o_totalprice)

# Order Count
- name: order_count
expr: COUNT(1)

# Composed Measure: Average Order Value (AOV)
- name: avg_order_value
# Defines AOV as Total Revenue divided by Order Count
expr: MEASURE(total_revenue) / MEASURE(order_count)

Se a definição de total_revenue mudar (por exemplo, para excluir impostos), avg_order_value usa automaticamente a definição atualizada.

Composibilidade com lógica condicional

Você pode usar a capacidade de composição para criar índices complexos, porcentagens condicionais e taxas de crescimento sem depender de funções de janela para cálculos simples de período a período.

Exemplo: Taxa de Atendimento

O exemplo a seguir calcula a taxa de atendimento: a porcentagem de pedidos com status 'F' (atendidos). A métrica divide os pedidos atendidos pelo total de pedidos.

YAML
version: 1.1

source: samples.tpch.orders

measures:
# Total Orders (denominator)
- name: total_orders
expr: COUNT(1)

# Fulfilled Orders (numerator)
- name: fulfilled_orders
expr: COUNT(1) FILTER (WHERE o_orderstatus = 'F')

# Composed Measure: Fulfillment Rate (Ratio)
- name: fulfillment_rate
expr: MEASURE(fulfilled_orders) / MEASURE(total_orders)
format:
type: percentage

Melhores práticas para composibilidade

  1. Defina primeiro as medidas atômicas : Estabeleça as medidas fundamentais (SUM, COUNT, AVG) antes de definir as medidas que as referenciam.
  2. Use MEASURE() para referências : Use a função MEASURE() ao referenciar outra medida em um expr. Não repita a lógica de agregação manualmente. Por exemplo, evite SUM(a) / COUNT(b) se já existirem medidas para ambos os valores.
  3. Priorize a legibilidade : Elabore as medidas utilizando fórmulas matemáticas claras. Por exemplo, MEASURE(gross_profit) / MEASURE(total_revenue) é mais claro do que uma única expressão SQL complexa.
  4. Adicionar metadados semânticos : Use metadados semânticos para formatar medidas compostas (por exemplo, porcentagens ou valores monetários) para ferramentas subsequentes. Consulte os metadados do agente na visualização de métricas.

Próximos passos