추가 LookML 기본사항

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

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

Looker는 보기 이름을 일반 굵은 글꼴의 필드와 굵은 글꼴로 결합하여 LookML 필드 이름을 UI에 표시된 문자열로 변환합니다. 예를 들어 주문 보기의 금액 필드는 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
  }
}

측정기준으로 개수 필터링

측정기준 및 집계 항목으로 쉽게 그룹화할 수 있습니다. 사용자 국가를 기준으로 그룹화하면 주문 수를 통해 주문이 발생한 국가를 확인할 수 있습니다. 그러나 일부 측정기준에서 필터링된 개수를 빌드하는 것이 유용할 때가 많습니다. 예를 들어 다음과 같이 새로운 ORDERS France Count 측정값을 만들 수 있습니다.

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의 다른 비율'과 같은 백분율 형식으로 표현됩니다. 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에서 쿼리는 다음과 같습니다.

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

캘리포니아 행에서 24를 클릭하면 캘리포니아에서 발생한 24개의 주문이 표시됩니다.

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

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

  • 개수 또는 다른 측정 값을 상세히 살펴볼 때 표시하고자 하는 경우
  • 뷰에 참여할 때 가져오기
  • 탐색에서 색인이 생성됨

모델의 여러 위치에서 동일한 세트를 사용할 수 있으므로 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 관리자가 시각 훈련 실험실 기능을 사용 설정한 경우 드릴 시각화가 항상 데이터 테이블로 기본 설정되지는 않습니다. 이 경우 link 매개변수 문서 페이지와 더 강력한 데이터 드릴링 고객센터 도움말에 표시된 것처럼 link 매개변수에서 유동 변수를 사용하여 표시되는 시각화를 맞춤설정할 수 있습니다.

새 대시보드 환경에서는 시각적 훈련 실험실 기능을 사용 설정하지 않고도 link 매개변수를 사용한 시각적 드릴링을 지원합니다.

결과 세트 필터링

LookML은 필드 및 탐색 분석에 적용할 수 있는 일련의 필터 작업을 제공하여 결과 집합이 사용자에게 반환되기 전에 필터링합니다.

탐색에서 always_filter

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

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

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

탐색에서 sql_always_where

사용자가 변경할 수 없는 쿼리 제한을 적용하려면 sql_always_where를 사용하면 됩니다. 사용자가 실행하는 쿼리 외에도 대시보드, 예약된 Look, 해당 탐색이 필요한 삽입된 정보에 제한이 적용됩니다. 사용자가 만드는 쿼리의 기본 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' ;;
}

탐색에서 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]
}