템플릿 필터를 사용한 기간과 기간 분석

동일한 Look 또는 대시보드에서 여러 기간으로 필터링된 측정항목을 비교하려면 필터링된 측정을 사용하면 됩니다. 필터링된 측정을 사용하면 전체 쿼리에 필터를 적용하는 대신 측정에 직접 하드코딩된 필터를 직접 적용할 수 있습니다.

비교하려는 기간이 제한된 경우 몇 개의 측정을 하드코딩된 기간 필터(예: '올해' 및 '지난해')로 정의하고 Explore, Look 또는 대시보드에 표시할 수 있었습니다. 또한 이 방식을 한 단계 더 발전시켜 필터링된 측정에서 템플릿 필터를 사용해 동적으로 기간을 비교하거나 Explore, Look 또는 대시보드에서 사용자가 지정된 기간으로 변경하는 측정을 수행할 수 있습니다.

패턴 개요

개략적으로 이 방식에는 3가지 구성요소가 포함됩니다.

  1. Explore, Look 또는 대시보드에 필터 전용 필드로 표시되는 기간마다 템플릿 필터 type: date를 정의합니다.
  2. yesno 유형 측정기준을 만들어 템플릿 필터에 연결해 사용자가 필터 전용 필드의 값을 선택하면 yesno 측정기준에서 충족되는 레코드에 대해 'yes'를 반환하도록 합니다.
  3. value = "yes" 조건으로 yesno 측정기준을 참조하는 필터링된 측정을 만듭니다. 이렇게 하면 측정에서 1단계에서 정의된 필터에 지정된 기간 조건을 충족하는 레코드만 집계합니다.

이 논리를 통해 사용자는 다음 Explore와 같이 다른 기간의 값을 비교하는 분석과 시각화를 만들 수 있습니다.

사용자는 기간 A기간 B 필터의 값을 변경하여 주문 수 A주문 수 B 값만 영향을 받을 수 있습니다. 주문 수 A주문 수 B는 기간 필터의 기간 조건을 참조하는 필터로 측정됩니다. 기간 A주문 수 A 값에 영향을 미치고 기간 B주문 수 B 값에 영향을 미칩니다.

다음 섹션에서는 이 예시의 LookML을 제공합니다.

LookML

다음 LookML에서는 created_raw라는 raw 기간의 측정기준 그룹이 있다고 가정해 보겠습니다.

  dimension_group: created {
    type: time
    timeframes: [
      raw,
      time,
      date,
    ]
    sql: ${TABLE}.created_at ;;
  }
  

개수 측정 비교용 LookML(주문 수 A주문 수 B)은 다음과 같이 created_raw를 기반으로 두 가지 동적 기간(기간 A기간 B)별로 필터링됩니다.

  ## 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"] }

이 논리를 사용하여 기간 비교를 필요한 만큼 만들 수 있습니다.

동적 기간으로 전체 쿼리 필터링

필터링된 측정은 필터 조건을 전체 쿼리 결과에 적용하지 않습니다. 지정된 기간 내에서 전체 쿼리 결과를 제한하려면 다음을 수행하면 됩니다.

  1. 다음 yesno 측정기준을 만듭니다.
  2. Explore, Look 또는 대시보드에서 측정기준 값을 'yes'로 필터링합니다.

  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 %} ;;
  }

이렇게 하면 데이터베이스가 쿼리에 필요한 것보다 더 많은 데이터를 스캔할 수 있으므로 성능과 쿼리 비용에 도움을 줄 수 있습니다.