Pular para o conteúdo principal

Use expressões de nível de detalhe (LOD) na visualização de métricas.

Expressões de Nível de Detalhe (LOD) permitem especificar a granularidade na qual as agregações são calculadas independentemente dos campos na consulta. Esta página explica como usar expressões LOD em views de métricas.

O que são expressões de nível de detalhe?

Expressões de nível de detalhe permitem especificar exatamente quais campos usar ao calcular um valor agregado, independentemente dos campos presentes na sua consulta. Isso lhe proporciona controle refinado sobre o escopo de seus cálculos.

Existem dois tipos de expressões de nível de detalhe:

  • Nível de detalhe fixo : Agregado em um conjunto predefinido de campos especificados na própria expressão, ignorando outros campos na consulta.
  • Nível de detalhe mais grosseiro : Agregue com uma granularidade mais grosseira do que a consulta, excluindo campos específicos do agrupamento.

Nível de detalhe fixo

Uma expressão de nível de detalhe fixo calcula um agregado em uma granularidade definida, ignorando os campos na consulta. Em views de métricas, expressões LOD fixas são definidas diretamente no campo expr de uma definição de coluna usando funções de janela SQL com cláusulas PARTITION BY.

Quando usar um nível de detalhe fixo

Utilize expressões com nível de detalhe fixo quando precisar do seguinte:

  • Sem dependência de agrupamentos de consultas : métricas com particionamento estático em todos os usos.
  • Agregados em nível de conjunto de dados : Agregados globais comparados com agrupamentos em nível de linha (por exemplo, percentual do total de vendas por prioridade).
  • Hierarquias multiníveis : Métricas de nível detalhado e de nível agregado disponíveis na mesma view de métricas.

Sintaxe

Expressões LOD fixas usam funções de janela SQL para calcular agregados em uma granularidade definida. Coloque a função de janela diretamente no campo expr de uma definição de campo:

YAML
fields:
- name: <lod_name>
expr: <AGGREGATE_FUNCTION>(<column>) OVER (PARTITION BY <dim1>, <dim2>, ...)

Para agregar em todo o dataset, omita a cláusula PARTITION BY e deixe parênteses vazios após OVER.

Exemplo: Total de vendas por prioridade de pedido

Suponha que você queira definir uma view de métricas onde as vendas de cada pedido possam ser comparadas junto com as vendas totais para seu grupo de prioridade. O exemplo a seguir computa priority_total_price na consulta de origem e o expõe como um campo de identidade:

YAML
version: 1.1

source: samples.tpch.orders

fields:
- name: order_priority
expr: o_orderpriority
- name: order_date
expr: o_orderdate
- name: priority_total_price
expr: SUM(o_totalprice) OVER (PARTITION BY o_orderpriority)

measures:
- name: total_sales
expr: SUM(o_totalprice)

- name: pct_of_priority_total
expr: SUM(o_totalprice) / ANY_VALUE(priority_total_price)

O campo priority_total_price define o total fixo para cada grupo de prioridade diretamente em seu campo expr. A medida pct_of_priority_total divide as vendas de pedidos individuais por aquele total fixo para produzir uma porcentagem, independentemente de como a consulta agrupa os resultados.

nota

Quando um campo de nível de detalhe fixo for referenciado em uma expressão de medida, ele deve ser envolvido em uma função de agregação. Use ANY_VALUE quando o valor é constante dentro de um grupo, como no exemplo anterior.

Filtragem com base em expressões de nível de detalhe fixo

Expressões com nível de detalhe fixo são calculadas antes da aplicação de quaisquer filtros em tempo de consulta. Para aplicar um filtro a um cálculo LOD fixo, inclua a condição do filtro dentro da expressão da função de janela usando uma instrução CASE ou uma cláusula FILTER .

Nível de detalhe mais grosseiro

Uma expressão de nível de detalhe mais abrangente agrega em uma granularidade mais grosseira do que a consulta, excluindo um ou mais campos da partição. Em views de métricas, expressões LOD mais granulares são implementadas usando medidas de janela com a especificação de intervalo all.

info

Experimental

As medidas de janela são experimentais.

Quando usar um nível de detalhe mais grosseiro

Utilize expressões com um nível de detalhe mais grosseiro quando precisar de:

  • Agrupamentos dinâmicos : agregações que se adaptam aos agrupamentos da consulta (por exemplo, percentual do total para qualquer campo selecionado).
  • Agregações com reconhecimento de filtros : calculam em uma granularidade mais grosseira, respeitando os filtros definidos no momento da consulta.

Sintaxe

Para cada campo a ser excluído da partição, defina uma medida de janela com range: all:

YAML
measures:
- name: <measure_name>
expr: <AGGREGATE_EXPRESSION>
window:
- order: <field_to_exclude>
range: all
semiadditive: last

Para excluir vários campos, adicione uma entrada ao array window para cada campo.

Exemplo: Percentagem do total de vendas

Para calcular a porcentagem do total de vendas para cada prioridade de pedido:

YAML
version: 1.1

source: samples.tpch.orders

fields:
- name: order_priority
expr: o_orderpriority

measures:
- name: total_sales
expr: SUM(o_totalprice)

- name: all_priorities_sales
expr: SUM(o_totalprice)
window:
- order: order_priority
range: all
semiadditive: last

- name: pct_of_total_sales
expr: SUM(o_totalprice) / MEASURE(all_priorities_sales)

Neste exemplo:

  • total_sales Agregações no nível de agrupamento da consulta.
  • all_priorities_sales usa range: all para compute um total geral em todas as prioridades de pedido, ignorando o campo order_priority na consulta.
  • pct_of_total_sales Divide as vendas de nível prioritário pelo total geral para produzir uma porcentagem.

Recursos adicionais