추가 LookML 기본사항

이 페이지에서는 LookML의 일반적인 패턴을 다룹니다.

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

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

테이블의 열 이름과 다른 필드 이름을 지정하려면 필드 이름을 변경하고 sql: 연결을 선언하기만 하면 됩니다. 아래 예시에는 cntrl_twr 열이 있는 airports 테이블이 있습니다. 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의 가장 강력한 기능 중 하나는 데이터를 드릴다운하여 개수 또는 기타 측정을 구성하는 기본 항목을 확인할 수 있는 기능입니다.

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

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

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

캘리포니아 행에서 24를 클릭하면 캘리포니아에서 들어오는 24개의 주문을 볼 수 있습니다.

Looker에서 사용자 상태: 캘리포니아 필터를 추가하는 작업을 처리하지만 주문에 표시할 필드를 알지 못합니다. 모델에서 이러한 필드를 선언하려면 세트를 사용해야 합니다.

LookML에서 세트는 필드(측정기준, 측정, 필터) 이름의 목록입니다. 세트는 Looker에 다음 필드를 알리는 데 사용됩니다.

  • 개수 또는 기타 측정을 드릴할 때 표시하고자 하는 경우
  • 뷰에 조인할 때 가져오기
  • Explore에서 색인이 생성됨

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

리터럴 세트

세트의 가장 간단한 형태는 리터럴 세트입니다. 리터럴 세트는 단순히 세트를 배열로 선언하기만 하면 생성됩니다. '[]'를 사용하여 리터럴 세트를 선언할 수 있습니다.

예를 들면 다음과 같습니다.

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

한 번만 사용되는 세트의 경우 문자 그대로 선언하는 것은 간단하고 이해하기 쉽습니다.

이름이 지정된 세트

고객 수캘리포니아 고객 수라는 두 가지 집계가 있다고 가정해 보겠습니다. 이러한 개수 중 하나를 살펴보면 id, name, city 필드를 표시하려고 합니다. 필드를 문자 그대로 선언하면 다음과 같습니다.

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

새 필드(예: customers.state 필드)를 추가하려면 두 목록을 모두 수정해야 합니다. 대신 LookML은 이름이 지정된 세트를 만들어 한 곳에서 관리하고 여러 위치에서 사용할 수 있는 방법을 제공합니다.

다음 코드는 세트 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"]
  }
}

LookML 세트는 매우 강력합니다.

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

전체 세트 참조 읽기

드릴 시각화 맞춤설정

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

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

결과 세트 필터링

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

Explore용 always_filter

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

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