동일한 Look 또는 대시보드에서 여러 기간으로 필터링된 측정항목을 비교하려면 필터링된 측정을 사용하면 됩니다. 필터링된 측정을 사용하면 전체 쿼리에 필터를 적용하는 대신 측정에 직접 하드코딩된 필터를 직접 적용할 수 있습니다.
비교하려는 기간이 제한된 경우 몇 개의 측정을 하드코딩된 기간 필터(예: '올해' 및 '지난해')로 정의하고 Explore, Look 또는 대시보드에 표시할 수 있었습니다. 또한 이 방식을 한 단계 더 발전시켜 필터링된 측정에서 템플릿 필터를 사용해 동적으로 기간을 비교하거나 Explore, Look 또는 대시보드에서 사용자가 지정된 기간으로 변경하는 측정을 수행할 수 있습니다.
패턴 개요
개략적으로 이 방식에는 3가지 구성요소가 포함됩니다.
-
Explore, Look 또는 대시보드에 필터 전용 필드로 표시되는 기간마다 템플릿 필터
type: date
를 정의합니다. -
yesno
유형 측정기준을 만들어 템플릿 필터에 연결해 사용자가 필터 전용 필드의 값을 선택하면yesno
측정기준에서 충족되는 레코드에 대해 'yes'를 반환하도록 합니다. -
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"] }
이 논리를 사용하여 기간 비교를 필요한 만큼 만들 수 있습니다.
동적 기간으로 전체 쿼리 필터링
필터링된 측정은 필터 조건을 전체 쿼리 결과에 적용하지 않습니다. 지정된 기간 내에서 전체 쿼리 결과를 제한하려면 다음을 수행하면 됩니다.
-
다음
yesno
측정기준을 만듭니다. - 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 %} ;; }
이렇게 하면 데이터베이스가 쿼리에 필요한 것보다 더 많은 데이터를 스캔할 수 있으므로 성능과 쿼리 비용에 도움을 줄 수 있습니다.