Use expressões de nível de detalhe (LOD) em visualizações de métricas
Expressões de nível de detalhe (LOD) permitem especificar a granulosidade na qual calcular agregações, independentemente dos campos (também chamados dimensões) em sua query. Isto permite computar métricas como percentual do total, onde o denominador agrega em uma granulosidade mais grosseira do que a query.
O que são expressões de nível de detalhe?
As expressões de nível de detalhe permitem especificar exatamente quais campos usar ao calcular um agregado, independentemente dos campos presentes na sua query. Isso proporciona um controle granular sobre o escopo de seus cálculos.
Há dois tipos de expressões de nível de detalhe:
- Nível de detalhe fixo : Agregue sobre um conjunto predefinido de campos especificados na própria expressão, ignorando outros campos na query.
- **Nível de detalhe mais grosseiro**: agregue em uma granularidade mais grosseira do que a query, 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 que você define, ignorando os campos em sua query. Em views de métricas, as 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 fixo de detalhe
Use expressões de nível de detalhe fixo quando precisar do seguinte:
- Sem dependência de agrupamentos de query : Métricas com particionamento estático em todos os usos.
- Agregados em nível de dataset : agregados globais comparados com agrupamentos em nível de linha (por exemplo, porcentagem do total de vendas por prioridade).
- **Hierarquias multinível**: métricas de nível de detalhe e de rollup disponíveis na mesma view de métricas.
Sintaxe
Expressões LOD fixas usam funções de janela SQL para calcular agregações 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 sobre o dataset inteiro, omita a cláusula PARTITION BY e deixe parênteses vazios após OVER.
Exemplo: vendas totais por prioridade de pedido
Suponha que você queira definir uma view de métricas onde as vendas de cada pedido possam ser comparadas com as vendas totais de seu grupo de prioridade. O exemplo a seguir computa priority_total_price na query 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 esse total fixo para produzir uma porcentagem, independentemente de como a query agrupa os resultados.
Ao referenciar um campo de nível de detalhe fixo em uma expressão de medida, inclua-o em uma função agregada. Use ANY_VALUE quando o valor for constante dentro de um grupo, como no exemplo anterior.
Crie a view de métrica usando SQL
Para criar esta view de métricas fora do Catalog Explorer, envolva o YAML em CREATE OR REPLACE VIEW ... WITH METRICS LANGUAGE YAML AS e coloque a definição entre os delimitadores $$:
CREATE OR REPLACE VIEW catalog.schema.sales_by_priority WITH METRICS LANGUAGE YAML AS
$$
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 exemplo de nível de detalhe mais grosseiro nesta página segue o mesmo padrão.
Filtragem em expressões de nível de detalhe fixo
Expressões de nível de detalhe fixo são computadas antes que quaisquer filtros em tempo de query sejam aplicados. Para aplicar um filtro a um cálculo LOD fixo, inclua a condição de 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 grosseiro agrega em uma granularidade mais grosseira do que a query, excluindo um ou mais campos da partição. Em views de métricas, expressões LOD mais grosseiras são implementadas usando medidas de janela com a especificação de intervalo all.
Experimental
Medidas de janela são Experimentais.
Quando usar um nível de detalhe mais grosseiro
Use expressões de nível de detalhe mais abrangente quando for necessário:
- **Agrupamentos dinâmicos**: Agregados que se adaptam a agrupamentos de query (por exemplo, porcentagem do total para qualquer campo selecionado).
- Agregações Sensíveis a Filtros : Computar em uma granularidade mais grosseira respeitando filtros de tempo de query.
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 à matriz window para cada campo.
Exemplo: % 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 query.all_priorities_salesusarange: allpara calcular um total geral em todas as prioridades de pedido, ignorando o campoorder_priorityna query.pct_of_total_salesdivide as vendas de nível de prioridade pelo total geral para produzir uma porcentagem.
Recursos adicionais
- Medidas de janela: O mecanismo subjacente para expressões de nível de detalhe mais grosseiro em views de métricas.
- Views de Métricas do Unity Catalog: visão geral dos componentes e padrões de modelagem de views de métricas.
- Expressões de nível de detalhe (LOD): Expressões LOD em dashboards de AI/BI.