Análise de prazos versus prazos com filtros baseados em modelos

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:

  1. Defina um filtro baseado em modelos de type: date para cada período que vai aparecer como um campo apenas de filtragem na sua exploração, visualização ou painel de controlo.
  2. Crie uma dimensão do tipo yesno para associar ao filtro baseado em modelos, de modo que, quando um utilizador seleciona um valor para o campo apenas de filtro, a dimensão yesno devolve "sim" para os registos que cumprem as condições do filtro.
  3. Crie uma medida filtrada que faça referência à dimensão yesno com a condição value = "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:

  1. Crie a seguinte dimensão yesno
  2. 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.