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.
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
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, comotrailing 3 months. Isso não inclui a unidade atual. Por exemplo,trailing 3 monthsexclui o mês atual.leading <value> <unit>: Inclui linhas da linha atual avançando pelo número especificado de unidades de tempo, comoleading 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 BYda consulta. Os valores possíveis incluemfirstelast.
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.
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 :
dateespecifica que a dimensão da data ordena a janela. - intervalo : A especificação
trailing 7 daydefine a janela como os 7 dias anteriores a cada data, excluindo a própria data. - semiaditivo :
lastindica 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.
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.
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,
dateordena a janela cronologicamente. -
range :
cumulativedefine a janela como todos os dados desde o início do dataset até cada data inclusive. -
semiaditivo :
lastcontrola como a medida é agregada quandodatenão está incluído na consulta. Quando a dimensão de data não está incluída emGROUP BYda 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.
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
datee outra para limitar a soma ao anocurrent. -
A dimensão
yearrestringe 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.
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,
dateordena a janela cronologicamente. -
range :
currentrestringe a janela a um único dia, sem agregação entre dias. -
semiaditivo :
lastretorna 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:
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. |
|
Composto | Uma expressão que combina matematicamente uma ou mais medidas usando a função |
|
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.
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.
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
- Defina primeiro as medidas atômicas : Estabeleça as medidas fundamentais (
SUM,COUNT,AVG) antes de definir as medidas que as referenciam. - Use
MEASURE()para referências : Use a funçãoMEASURE()ao referenciar outra medida em umexpr. Não repita a lógica de agregação manualmente. Por exemplo, eviteSUM(a) / COUNT(b)se já existirem medidas para ambos os valores. - 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. - 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.