템플릿 필터 및 유동 매개변수

이 주제는 SQL 및 LookML에 대한 충분한 지식을 갖춘 고급 주제입니다.

Looker는 측정기준과 측정항목을 기반으로 하는 필터를 만들어 쿼리를 조작할 수 있는 기능을 사용자에게 자동으로 제공합니다. 이 간단한 방법은 다양한 사용 사례를 충족하지만 모든 분석 요구를 사용 설정할 수는 없습니다. 템플릿 필터와 유동 매개변수 기능은 지원 가능한 사용 사례를 크게 확장합니다.

SQL 관점에서 측정기준 및 측정값은 쿼리로 가장 바깥쪽 WHERE 또는 HAVING 절만 변경할 수 있습니다. 그러나 사용자가 SQL의 다른 부분을 조작하는 것을 허용할 수 있습니다. 파생된 테이블의 일부를 조정하거나, 쿼리할 데이터베이스 테이블을 조정하거나, 다목적 측정기준과 필터를 만드는 것은 템플릿식 필터 및 유동 매개변수에서 사용할 수 있는 기능 중 일부에 불과합니다.

템플릿 필터 및 Liquid 매개변수는 Liquid 템플릿 언어를 사용하여 SQL 쿼리에 사용자 입력을 삽입합니다. 먼저 LookML 매개변수를 사용하여 사용자가 상호작용할 수 있는 필드를 만듭니다. 다음으로 Liquid 변수를 사용하여 사용자 입력을 SQL 쿼리에 삽입합니다.

Examples

몇 가지 예시를 통해 템플릿 필터와 유동 매개변수 값을 살펴보겠습니다.

템플릿 필터로 동적 파생 테이블 만들기

동남 지역 내에서 고객의 전체 기간 비용을 계산하는 파생 테이블을 생각해 보세요.

view: customer_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,                        -- Can be made a dimension
        SUM(sale_price) AS lifetime_spend   -- Can be made a dimension
      FROM
        order
      WHERE
        region = 'northeast'                -- Can NOT be made a dimension
      GROUP BY 1
    ;;
  }
}

이 쿼리에서는 customer_idlifetime_spend에서 측정기준을 만들 수 있습니다. 그러나 'northeast'로 하드 코딩하는 대신 사용자가 region을 지정할 수 있도록 하려고 한다고 가정해 보겠습니다. region는 측정기준으로 노출될 수 없으므로 사용자가 정상적으로 필터링할 수 없습니다.

한 가지 옵션은 다음과 같이 템플릿 필터를 사용하는 것입니다.

view: customer_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        SUM(sale_price) AS lifetime_spend
      FROM
        order
      WHERE
        {% condition order_region %} order.region {% endcondition %}
      GROUP BY 1
    ;;
  }

  filter: order_region {
    type: string
  }
}

아래에서 단계별 안내를 참고하세요.

파생된 테이블이 템플릿 필터를 사용하는 경우 테이블을 영구화할 수 없습니다.

유동 매개변수로 동적 측정

판매된 바지의 수를 합산하는 필터링 조치를 살펴보겠습니다.

measure: pants_count {
  filters: [category: "pants"]
}

방법은 간단하지만 카테고리가 수십 개 있는 경우 각각에 대한 측정을 만드는 것은 지루한 작업이 될 수 있습니다. 또한 사용자의 탐색 환경이 복잡해질 수 있습니다.

또는 다음과 같은 동적 측정값을 만들 수 있습니다.

measure: category_count {
  type: sum
  sql:
    CASE
      WHEN ${category} = '{% parameter category_to_count %}'
      THEN 1
      ELSE 0
    END
  ;;
}

parameter: category_to_count {
  type: string
}

아래에서 단계별 안내를 참고하세요.

기본 사용법

1단계: 사용자가 상호작용할 수 있는 콘텐츠 만들기

  • 템플릿 필터의 경우 filter을 추가합니다.
  • Liquid 매개변수의 경우 parameter을 추가합니다.

두 경우 모두 다음과 같이 필드 선택 도구의 필터 전용 필드 섹션 아래에 해당 필드가 표시됩니다.

filterparameter 필드는 모두 일련의 하위 매개변수를 허용하며, 이를 통해 매개변수의 작동 방식을 맞춤설정할 수 있습니다. 전체 목록은 필드 매개변수 문서 페이지를 참조하세요. parameter 필드에는 두 가지 옵션이 있습니다.

첫째, parameter 필드에는 따옴표로 묶지 않은이라는 특수한 유형이 있을 수 있습니다.

parameter: table_name {
  type: unquoted
}

이 유형을 사용하면 문자열이 따옴표로 묶이지 않고 SQL에 값을 삽입할 수 있습니다. 이 방법은 테이블 이름과 같은 SQL 값을 삽입해야 할 때 유용합니다.

두 번째로 parameter 필드에는 허용된 값이라는 옵션이 있습니다. 이 값을 사용하면 사용자 친화적인 이름을 삽입하려는 값에 연결할 수 있습니다. 예를 들면 다음과 같습니다.

  parameter: sale_price_metric_picker {
    description: "Use with the Sale Price Metric measure"
    type: unquoted
    allowed_value: {
      label: "Total Sale Price"
      value: "SUM"
    }
    allowed_value: {
      label: "Average Sale Price"
      value: "AVG"
    }
    allowed_value: {
      label: "Maximum Sale Price"
      value: "MAX"
    }
    allowed_value: {
      label: "Minimum Sale Price"
      value: "MIN"
    }
  }

2단계: 사용자 입력 적용하기

두 번째 단계는 Liquid를 사용하여 원하는 대로 템플릿 필터 또는 Liquid 매개변수를 추가하는 것입니다.

템플릿 필터

템플릿 필터의 문법은 다음과 같이 분류됩니다.

{% condition filter_name %} sql_or_lookml_reference {% endcondition %}
  • conditionendcondition 단어는 변경되지 않습니다.
  • filter_name을 첫 번째 단계에서 만든 필터 이름으로 바꿉니다. 필터 전용 필드를 만들지 않은 경우 측정기준을 사용할 수도 있습니다.
  • sql_or_lookml_reference을 사용자 입력으로 설정해야 하는 SQL 또는 LookML로 교체합니다 (자세한 내용은 아래 참고). LookML을 사용하는 경우 ${view_name.field_name} LookML 구문을 사용합니다.

에서는 다음을 사용했습니다.

{% condition order_region %} order.region {% endcondition %}

Liquid 태그와 이 태그 사이에 작성한 SQL 간의 상호작용을 이해하는 것이 중요합니다. 템플릿 필터 필터는 항상 논리식으로 변환됩니다. 예를 들어, 사용자가 order_region 필터에 'northeast"를 입력하면 Looker는 이러한 태그를 order.region = 'Northeast'로 변환합니다. 즉, Looker가 사용자 입력을 이해하고 적절한 논리 표현식을 생성합니다.

이로 인해 Looker 개발자들은 혼란을 느끼는 경우가 많습니다. 템플릿 필터를 사용하면 항상 사용자가 입력한 개별 값이 아닌 특정 유형의 논리적인 표현식이 생성됩니다.

템플릿 필터는 논리적 표현식을 반환하므로 SQL WHERE 문에 유효한 다른 논리 연산자 및 논리 표현식과 함께 사용할 수 있습니다. 위의 예를 사용하여 사용자가 선택한 지역을 제외한 모든 값을 반환하려면 WHERE 문에서 다음을 사용하면 됩니다.

NOT ({% condition order_region %} order.region {% endcondition %})

LookML 필드를 필터 조건으로 사용할 수도 있습니다. LookML 필드에 직접 적용된 필터는 WHERE 문의 값을 결정합니다.

view: customer_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        SUM(sale_price) AS lifetime_spend
      FROM
        order
      WHERE
        {% condition region %} order.region {% endcondition %}
      GROUP BY 1
    ;;
  }

  dimension: region {
    type: string
    sql: ${TABLE}.region ;;
}

액체 매개변수

Liquid 매개변수의 문법은 다음과 같이 분류됩니다.

{% parameter parameter_name %}
  • parameter라는 단어는 변경되지 않습니다.
  • parameter_name을 첫 번째 단계에서 만든 parameter 이름으로 바꿉니다.

예를 들어 위의 1단계에서 parameter 필드의 입력을 적용하려면 다음과 같은 측정값을 만들면 됩니다.

  measure: sale_price_metric {
    description: "Use with the Sale Price Metric Picker filter-only field"
    type: number
    label_from_parameter: sale_price_metric_picker
    sql: {% parameter sale_price_metric_picker %}(${sale_price}) ;;
    value_format_name: usd
  }

템플릿 필터와 유동 매개변수 중에서 선택

템플릿 필터와 유동 매개변수도 비슷하지만 둘 사이에는 중요한 차이점이 있습니다.

  • 유동 매개변수는 사용자 입력을 직접 삽입하거나 허용되는 값으로 정의한 값을 사용합니다.
  • 템플릿 필터에서 설명한 대로 값을 논리적 문으로 삽입합니다.

다양한 기간 또는 문자열 검색 등 사용자에게 보다 유연하게 입력을 제공하려는 경우 가능하면 템플릿 필터를 사용해 보세요. Looker가 사용자 입력을 해석하고 적절한 SQL을 작성할 수 있습니다. 따라서 가능한 모든 유형의 사용자 입력을 고려하지 않아도 됩니다.

논리적인 구문을 삽입할 수 없는 경우 또는 사용자가 입력할 수 있는 유한한 옵션 집합을 알고 있는 경우 Liquid 매개변수를 사용하세요.