이 페이지에서는 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에서 쿼리는 다음과 같이 표시됩니다.
사용자 상태 | 주문 수 |
---|---|
캘리포니아 | 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]
}