일반적인 LookML 패턴

이 페이지에서는 LookML의 다음과 같은 일반적인 패턴을 설명합니다.

라벨 지정 필드(및 UI의 이름)

Looker는 뷰 이름을 일반 두께 글꼴에서 굵게 표시된 필드의 짧은 이름과 결합하여 UI에 표시되는 문자열로 LookML 필드 이름을 변환합니다. 예를 들어 주문 보기의 금액 필드는 UI에서 주문 금액으로 표시됩니다. 이 페이지의 영문 버전에서는 명확한 설명을 위해 두 필드 이름이 모두 굵게 표시되고 뷰 이름이 대문자로 표시됩니다(ORDERS Amount).

필드 이름을 테이블의 열 이름과 다르게 지정하려면 필드 이름을 변경하고 sql 매개변수를 사용하여 필드를 테이블의 적절한 열에 연결합니다. 다음 예시에서 airports 테이블에는 cntrl_twr 열이 있습니다. Looker에서 다음과 같은 선언을 생성합니다.

view: airports {
  dimension: cntrl_twr {        # full name: airports.cntrl_twr
    type: yesno                 # default name: AIRPORT Cntrl Twr (Yes/No)
    sql: ${TABLE}.cntrl_twr ;;  # the sql expression for this field
  }
}

cntrl_twr 측정기준 이름을 인간이 읽을 수 있는 이름으로 바꿀 수 있습니다.

view: airports {
  dimension: has_control_tower {  # full name: airports.has_control_tower
    type: yesno                   # aliased name: AIRPORTS Has Control Tower (Yes/No)
    sql: ${TABLE}.cntrl_twr ;;    # the sql expression for this field
  }
}

측정기준별 개수 필터링

측정기준별로 그룹화하고 항목 수를 계산할 수 있습니다. 사용자 수 국가별로 그룹화하면 주문 수를 통해 국가별 주문처를 파악할 수 있습니다. 그러나 일부 측정기준 값을 기준으로 필터링된 개수를 빌드하는 것이 유용한 경우가 많습니다. 예를 들어 다음과 같이 새 측정값을 만들고 이름을 주문 프랑스 개수로 지정할 수 있습니다.

view: users {
  dimension: country {}
}
view: orders {
  dimension: id {
    primary_key: yes
    sql: ${TABLE}.id ;;
  }
  measure: count {
    type: count
    drill_fields: [detail]
  }
  measure: france_count {
    type: count   # COUNT(CASE WHEN users.country = 'France' THEN 1 ELSE NULL END)
    filters: [users.country: "France"]
  }
}

필터는 모든 표현식을 사용할 수 있습니다. EU에서 사용자를 집계하는 필드를 만들고 싶다면 다음과 같이 작성하면 됩니다.

measure: eu_count {
  type: count   # COUNT(CASE WHEN users.countrycode IN 'UK','FR','ES' THEN 1 ELSE NULL END)
  drill_fields: [detail]
  filters: [users.countrycode: "UK,FR,ES"]
}

수학 표현식을 사용하여 필터링하려면 다음과 같이 큰따옴표로 묶어야 합니다.

measure: total_orders_above_100_dollars {
  type: sum   # SUM(CASE WHEN order.value > 100 THEN order.value ELSE NULL END)
  sql: ${order.value} ;;
  drill_fields: [detail]
  filters: [order.value: ">100"]
}

비율

많은 핵심성과지표는 '반품된 상품 비율', '판매를 유도한 이메일 비율' 또는 기타 'Y에 대한 X의 비율' 인스턴스와 같은 백분율로 표시됩니다. LookML에서 설계 패턴은 두 조건에 대한 수를 만들고 두 조건의 비율을 계산하는 세 번째 필드를 만드는 것입니다.

dimension: returned {
  type: yesno
}
measure: count {   # total count of items
  type: count_distinct
  sql: ${TABLE}.id ;;
  drill_fields: [detail]
}
measure: returned_count {   # count of returned items
  type: count_distinct
  sql: ${TABLE}.id ;;
  drill_fields: [detail]
  filters: [returned: "Yes"]
}
measure: percent_returned {
  type: number
  sql: 100.0 * ${returned_count} / NULLIF(${count}, 0) ;;
  value_format: "0.00"
}

백분율을 계산하려면 다음 형식을 사용하세요. Postgres에서 개수는 정수이며, 정수를 나누면 정수가 됩니다. 100.0을 곱하면 첫 번째 개수가 부동 소수점 수로 변환되므로 나머지 표현식이 부동 소수점으로 변환됩니다. 0으로 나누기 오류를 방지하기 위해 NULLIF(value, 0)는 0 값을 null로 변환하여 결과를 null로 만들고 오류를 방지합니다.

100.0 * ${returned_count} / NULLIF(${count}, 0)

드릴다운 세부정보에 세트 사용

Looker의 가장 강력한 기능 중 하나는 데이터를 드릴다운하여 개수 또는 기타 측정을 구성하는 기본 항목을 확인할 수 있는 기능입니다.

UI에서 측정값을 클릭하면 Looker가 측정값을 구성하는 데이터 세트를 현지화하기 위해 새 쿼리를 만듭니다. 테이블의 각 행에 있는 각 측정기준의 값이 현재 필터에 추가됩니다.

세부정보를 표시하려면 Looker에서 측정값을 클릭할 때 표시할 드릴 필드의 지정된 목록이 필요합니다. 모델을 생성하면 일반적으로 생성기가 초기 드릴 필드를 만듭니다. 또한 드릴 필드를 직접 추가할 수 있습니다. 예를 들어 지난주에 사용자 상태별 주문 수를 측정한다고 가정해 보겠습니다. Looker에서 쿼리는 다음과 같이 표시됩니다.

사용자 상태ORDERS Count(주문 수)
캘리포니아24
텍사스5
콜로라도4
플로리다4
일리노이4

캘리포니아 행에서 24를 클릭하면 캘리포니아에서 접수된 24개의 주문이 표시될 수 있습니다. Looker는 사용자 주: 캘리포니아 필터를 추가하지만 사용자가 순서대로 표시하려고 하는 필드를 알 수 없습니다. 모델에서 이러한 필드를 선언하려면 먼저 세트를 사용해야 합니다.

LookML에서 세트는 필드(측정기준, 측정, 필터) 이름의 목록입니다. 세트를 사용하여 Looker에 다음 정보를 제공합니다.

  • 개수 또는 다른 측정값을 드릴할 때 표시하고자 하는 필드
  • 뷰를 조인할 때 가져오려는 필드
  • Explore에서 색인을 생성할 필드

모델의 여러 위치에서 동일한 세트를 사용할 수 있으므로 Looker는 세트를 만드는 다양한 방법을 제공합니다.

리터럴 세트

리터럴 세트는 특히 세트가 한 번만 사용되는 경우 LookML에서 세트를 정의하는 간단한 방법입니다. 리터럴 세트는 세트를 배열로 선언하면 생성됩니다. []를 사용하여 리터럴 세트를 선언할 수 있습니다.

다음 예시를 참조하세요.

view: customers {
  dimension: id {
    primary_key: yes
  }
  measure: count {
    type: count
  }
  dimension: city {}
  dimension: state {}
  dimension: name {}
}

이 예시에서 표시할 필드는 id, name, city입니다.

측정값에서 리터럴 배열을 다음과 같이 선언할 수 있습니다.

measure: count {
  type: count
  drill_fields: [id, name, city]
}

이름이 지정된 세트

customers 뷰에 count 및 in_california_count라는 두 가지 개수가 정의되어 있다고 가정합니다. 사용자가 Explore에서 개수 필드 또는 캘리포니아 내 개수 필드를 드릴하면 id, name, city를 표시하려고 합니다.

처음에는 이러한 필드를 선언하는 것만으로도 충분한 것으로 보일 수 있습니다.

view: customers {
  measure: count {
    type: count
    drill_fields: [id, name, city]
  }
  measure: in_california_count {
    type: count
    filters: [state: "California"]
    drill_fields: [id, name, city]
  }
}

하지만 새 필드(예: customers.state)를 추가하려면 두 목록을 모두 수정해야 합니다. 단, set 매개변수를 사용하여 한곳에서 유지관리하고 여러 곳에서 사용할 수 있는 이름이 지정된 세트를 만든 경우는 예외입니다.

다음 코드는 세트 customers.detail을 만들고 둘 다 동일한 필드 세트를 가리킵니다.

view: customers {
  set: detail {
    fields: [id, name, city]      # creates named set customers.detail
  }

  measure: count {
    type: count
    drill_fields: [detail*]       # show fields in the set "customers.detail"
  }
  measure: in_california_count {
    type: count
    filters: [state: "California"]
    drill_fields: [detail*]      # show fields in the set "customers.detail"
  }
}

LookML 세트가 강력한 이유는 다음과 같습니다.

  • 세트 재선언이 추가사항입니다. 여러 위치에서 세트를 선언할 경우 Looker는 모든 위치에서 세트에 대해 선언된 모든 필드를 포함합니다.
  • 다른 세트 이름과 별표를 차례로 입력하여 다른 세트에 세트를 삽입할 수 있습니다(예: setname*).
  • 필드 이름 앞에 하이픈을 배치하여 세트에서 요소를 삭제할 수도 있습니다(예: -fieldname).

드릴 시각화 맞춤설정

Looker 관리자가 시각적 드릴 기능을 사용 설정한 경우 Look 및 Explore 드릴 시각화가 데이터 테이블로 기본 설정되지 않을 수 있습니다. 이 경우 link 매개변수 문서 페이지와 보다 강력한 데이터 드릴링 권장사항 페이지에 표시된 대로 link 매개변수에서 Liquid 변수를 사용하여 표시되는 시각화를 맞춤설정할 수 있습니다.

대시보드는 시각적 드릴 기능을 사용 설정하지 않고도 link 매개변수를 사용하여 시각적 드릴을 지원합니다.

결과 세트 필터링

LookML은 필드 및 Explore에 적용할 수 있는 필터 연산 세트를 제공하여 결과 세트를 사용자에게 반환하기 전에 필터링합니다.

Explore용 always_filter

Explore 내에서 실행되는 쿼리에 항상 필터 세트를 적용하려면 always_filter를 사용합니다. 필터는 Looker UI에 표시되며 사용자는 관리자가 제공한 기본 필터 값을 변경할 수 있지만 필터를 삭제할 수는 없습니다. 보통 이러한 필터는 일반적으로 포함하고 싶지 않은 데이터를 삭제하는 데 사용됩니다. 예를 들어 주문 Explore에서 완료되었거나 대기 중인 주문만 보고자 하는 경우 다음 LookML 코드를 추가할 수 있습니다.

explore: orders {
  view_name: order
    filters: [status: "complete,pending"]
  }
}

사용자가 다른 상태 값이 있는 주문을 보려는 경우 UI에서 주문 상태를 %로 설정할 수 있습니다.

Explore용 sql_always_where

사용자가 변경할 수 없는 쿼리 제한을 적용하려면 sql_always_where를 사용하면 됩니다. 이러한 제한사항은 실제 사용자가 실행하는 쿼리 외에도 대시보드, 예약된 Look, 해당 Explore를 사용하는 삽입된 정보에 적용됩니다. 사용자가 만든 쿼리의 기본 SQL을 확인하지 않는 한 sql_always_where 조건은 사용자에게 표시되지 않습니다.

다음 예시는 사용자가 2012년 1월 1일 이전의 주문을 볼 수 없도록 합니다.

# Using Looker references
explore: order {
  sql_always_where: ${created_date} >= '2012-01-01' ;;
}

# Using raw SQL
explore: order {
  sql_always_where: DATE(created_time) >= '2012-01-01' ;;
}

Explore용 conditionally_filter

매우 큰 테이블은 쿼리할 때 주의해야 합니다. 무제한 쿼리는 데이터베이스에 너무 많은 부담을 줄 수 있기 때문입니다. LookML은 이를 conditionally_filter 형식으로 해결할 수 있는 방법을 제공합니다.

사용자가 unless 섹션에 나열된 필드 중 하나에 필터를 이미 추가하지 않았다면 conditionally_filter 매개변수를 사용하여 쿼리에 필터를 적용합니다.

다음 예에서는 사용자가 created_date, shipped_time, shipped_date, orders.id, customer.name 중 하나 이상의 필드에 필터를 적용한 경우 사용자의 쿼리가 변경되지 않습니다. 사용자가 해당 필드에 필터를 적용하지 않은 경우 Looker는 orders.created_time에 1일 필터를 자동으로 추가합니다.

  filters: [orders.created_time: "1 day"]
  unless: [created_date, shipped_time, shipped_date, orders.id, customer.name]
}