Para comparar uma métrica filtrada por vários intervalos de tempo no mesmo visual ou painel de controlo, pode usar medidas filtradas. As medidas filtradas permitem-lhe aplicar um filtro codificado diretamente a uma medida, em vez de aplicar um filtro a uma consulta inteira.
Se tivesse um número limitado de intervalos de tempo que lhe interessasse comparar, podia definir algumas medidas com filtros de intervalo de tempo codificados (por exemplo, "este ano" e "ano passado") e apresentá-las numa análise detalhada, num relatório ou num painel de controlo. Também pode dar mais um passo nesta abordagem para tornar as comparações de prazos dinâmicas, ou seja, medidas que mudam com os prazos especificados pelos utilizadores em Explores, Looks ou painéis de controlo, usando filtros baseados em modelos em medidas filtradas.
Vista geral do padrão
A um nível elevado, esta abordagem envolve três componentes:
-
Defina um filtro baseado em modelos de
type: datepara cada período que vai aparecer como um campo apenas de filtragem na sua exploração, visualização ou painel de controlo. -
Crie uma dimensão do tipo
yesnopara associar ao filtro baseado em modelos, de modo que, quando um utilizador seleciona um valor para o campo apenas de filtro, a dimensãoyesnodevolve "sim" para os registos que cumprem as condições do filtro. -
Crie uma medida filtrada que faça referência à dimensão
yesnocom a condiçãovalue = "yes". Isto garante que a medida apenas agrega registos que cumprem a condição de período especificada no filtro definido no passo 1.
Esta lógica permite aos utilizadores criar análises e visualizações que comparam valores de diferentes intervalos de tempo, como a seguinte exploração:
Os utilizadores podem alterar os valores nos filtros Intervalo de tempo A e Intervalo de tempo B e apenas afetar os valores de Número de encomendas A e Número de encomendas B. Orders Count A e Orders Count B são medidas com filtros que fazem referência às condições do período nos filtros do período. O período A afeta os valores de número de encomendas A e o período B afeta os valores de número de encomendas B.
A secção seguinte fornece o LookML para este exemplo.
O LookML
O LookML seguinte pressupõe que tem um grupo de dimensões com um período de raw denominado created_raw:
dimension_group: created {
type: time
timeframes: [
raw,
time,
date,
]
sql: ${TABLE}.created_at ;;
}
O LookML para comparar medidas de contagem, Orders Count A e Orders Count B, filtradas por dois intervalos de tempo dinâmicos, Timeframe A e Timeframe B, com base em created_raw, tem o seguinte aspeto:
## filter determining time range for all "A" measures
filter: timeframe_a {
type: date_time
}
## flag for "A" measures to only include appropriate time range
dimension: group_a_yesno {
hidden: yes
type: yesno
sql: {% condition timeframe_a %} ${created_raw} {% endcondition %} ;;
}
## filtered measure A
measure: count_a {
type: count
filters: [group_a_yesno: "yes"]
}
## filter determining time range for all "B" measures
filter: timeframe_b {
type: date_time
}
## flag for "B" measures to only include appropriate time range
dimension: group_b_yesno {
hidden: yes
type: yesno
sql: {% condition timeframe_b %} ${created_raw} {% endcondition %} ;;
}
measure: count_b {
type: count
filters: [group_b_yesno: "yes"]
}
Pode usar esta lógica para criar todas as comparações de períodos que precisar.
Filtrar uma consulta inteira com intervalos de tempo dinâmicos
As medidas filtradas não aplicam uma condição de filtro aos resultados gerais da consulta. Se quiser limitar os resultados gerais da consulta nos intervalos de tempo especificados, pode:
-
Crie a seguinte dimensão
yesno - Filtre os valores da dimensão por "sim" em Explorações, Looks ou painéis de controlo:
dimension: is_in_time_a_or_b {
group_label: "Time Comparison Filters"
type: yesno
sql:
{% condition timeframe_a %} ${created_raw} {% endcondition %} OR
{% condition timeframe_b %} ${created_raw} {% endcondition %} ;;
}
Isto impede que a base de dados analise mais dados do que o necessário para a consulta e pode ajudar com o desempenho e o custo da consulta.