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:
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:
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.
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.
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:
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:
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_salesAgregações no nível de agrupamento da consulta.all_priorities_salesusarange: allpara compute um total geral em todas as prioridades de pedido, ignorando o campoorder_priorityna consulta.pct_of_total_salesDivide as vendas de nível prioritário pelo total geral para produzir uma porcentagem.
Recursos adicionais
- Medidas de janela: O mecanismo subjacente para expressões de nível de detalhe mais grosseiras na visualização de métricas.
- Visualização de métricasUnity Catalog: Visão geral dos componentes view de métricas e padrões de modelagem.
- Expressões de nível de detalhe (LOD): Expressões LOD em painéis de AI/BI .