템플릿 필터 및 Liquid 매개변수

이 내용은 SQL 및 LookML에 대해 적절한 기존 지식이 있다고 가정하는 고급 주제입니다.

Looker는 사용자가 측정기준과 측정값을 기반으로 필터를 만들어서 쿼리를 조작할 수 있는 기능을 제공합니다. 이러한 간단한 방법으로 많은 사용 사례를 충족시킬 수 있지만 모든 분석 요구를 지원할 수는 없습니다. 템플릿 필터와 Liquid 매개변수는 지원 가능한 사용 사례의 범위를 방대하게 확장합니다.

SQL 관점에서 측정기준과 측정값은 쿼리에서 가장 바깥쪽의 WHERE 또는 HAVING 절만 변경할 수 있습니다. 하지만 경우에 따라 사용자가 다른 SQL 부분을 조작하도록 허용해야 할 수 있습니다. 템플릿 필터 및 Liquid 매개변수를 사용하면 파생 테이블 일부를 조정하고, 쿼리되는 데이터베이스 테이블을 조정하고, 다목적 측정기준 및 필터를 만드는 등 여러 기능을 사용 설정할 수 있습니다.

템플릿 필터와 Liquid 매개변수는 Liquid 템플릿 언어를 사용해서 SQL 쿼리에 사용자 입력을 삽입합니다. 먼저 LookML 매개변수를 사용해서 상호작용할 사용자에 대해 필드를 만듭니다. 그런 후 Liquid 변수를 사용해서 SQL 쿼리에 사용자 입력을 삽입합니다.

예시

템플릿 필터와 Liquid 매개변수의 효과를 확인하기 위해 몇 가지 예시를 살펴보겠습니다.

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

동북 리전 내에서 고객의 평생 지출을 계산하는 파생 테이블이 있다고 가정해 보세요.

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

단계별 안내는 아래를 참조하세요.

파생 테이블에 템플릿 필터가 사용될 경우에는 테이블을 영구로 지정할 수 없습니다.

Liquid 매개변수로 동적 측정값 만들기

판매된 바지 수를 합산하는 필터링된 측정값이 있다고 고려해 보세요.

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

직관적이지만 카테고리가 십여 개 있다고 가정하면 각 항목에 대해 측정값을 만드는 것이 번거로울 수 있습니다. 또한 사용자의 Explore 환경이 복잡해질 수 있습니다.

한 가지 대안은 다음과 같은 동적 측정값을 만드는 것입니다.

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 매개변수

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
  }

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

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

  • Liquid 매개변수는 사용자 입력을 직접 삽입합니다(또는 허용된 값으로 정의한 값 사용).
  • 템플릿 필터템플릿 필터 섹션에 설명된 대로 값을 논리적 문으로 삽입합니다.

사용자에게 보다 유연한 입력(예: 여러 유형의 날짜 범위 또는 문자열 검색 등)을 제공하려는 경우에는 가능한 경우 템플릿 필터를 사용하는 것이 좋습니다. Looker는 사용자 입력을 해석하고 자동으로 적합한 SQL을 작성할 수 있습니다. 따라서 사용자 입력에 대한 모든 가능한 유형을 고려할 필요가 없습니다.

논리적 문을 삽입할 수 없거나 사용자가 입력할 수 있는 제한적인 옵션을 미리 알고 있을 때는 Liquid 매개변수를 사용하세요.