강력한 LookML을 작성하려면 기존 측정기준, 측정값, 뷰 또는 파생된 테이블이 현재 범위에 속하지 않더라도 참조할 수 있어야 합니다. 또한 기본 테이블의 열을 참조하고 데이터베이스 언어를 사용하여 해당 값을 조작해야 합니다.
대체 연산자 ($)
대체 연산자 $
를 사용하면 LookML 코드를 재사용하고 모듈화할 수 있으므로 다른 뷰와 파생 테이블, SQL 테이블의 열 또는 LookML 측정기준 및 측정값을 참조할 수 있습니다. 여기에는 2가지 이유가 있습니다. 첫째, 이미 대단히 까다로운 측정기준이나 측정값을 확인했으며 모든 복잡도를 다시 작성할 필요는 없기 때문입니다. 둘째, 측정기준 또는 측정값을 변경하면 해당 변경사항이 해당 항목에 의존하는 다른 모든 항목에 전파될 수 있습니다.
대체 연산자를 사용할 수 있는 몇 가지 방법이 있습니다.
${TABLE}.column_name
는 작업 중인 뷰에 연결된 테이블의 열을 참조합니다. 예를 들면 다음과 같습니다.
dimension: customer_id {
type: number
sql: ${TABLE}.customer_id ;;
}
${field_name}
는 작업 중인 보기의 측정기준 또는 측정값을 참조합니다. 예를 들면 다음과 같습니다.
measure: total_population {
type: sum
sql: ${population} ;;
}
${view_name.field_name}
는 다른 뷰의 측정기준 또는 측정값을 참조합니다. 예를 들면 다음과 같습니다.
dimension: lifetime_orders {
type: number
sql: ${user_order_facts.lifetime_orders} ;;
}
${view_name.SQL_TABLE_NAME}
는 다른 뷰 또는 파생 테이블을 참조합니다. 이 참조의 SQL_TABLE_NAME
는 리터럴 문자열이므로 다른 것으로 바꿀 필요가 없습니다. 예를 들면 다음과 같습니다.
explore: trips {
view_label: "Long Trips"
# This will ensure that we only see trips that are longer than average!
sql_always_where: ${trips.trip_duration}>=(SELECT tripduration FROM ${average_trip_duration.SQL_TABLE_NAME});;
}
${view_name.SQL_TABLE_NAME}
는 datagroups와 함께 사용되는sql_trigger
매개변수와 함께 작동하지 않습니다.
범위 지정 및 이름 지정
탐색 분석, 보기, 필드 및 세트의 이름을 지정할 수 있습니다. 이러한 Looker 식별자는 따옴표 없이 작성됩니다.
LookML 필드 및 세트에는 전체 이름과 짧은 이름이 있습니다.
- 전체 이름은
<view>.<field-name | set-name>
형식입니다. 왼쪽은 필드 또는 집합을 포함하는 뷰인 범위를 나타냅니다. 오른쪽에는 특정 필드 또는 세트 이름이 지정되어 있습니다. - 닉네임은 마침표 없이
<field-name | set-name>
형식을 사용합니다. Looker는 닉네임에 전체 범위를 사용합니다.
다음은 다양한 이름과 형식을 보여주는 예입니다. 이는 실현 가능한 필드 그룹이지만 다양한 범위 지정 표현식을 보여주는 것으로 보입니다.
view: orders { # "orders" becomes the containing scope
measure: count { # short name, equivalent to orders.count
type: count
}
dimension: customer_id { # short name, equivalent to orders.customer_id
type: number
sql: ${TABLE}.customer_id ;;
}
dimension: customer_address { # short name, equivalent to orders.customer_address
sql: ${customer.address} ;; # full name, references a field defined in the "customer" view
}
set: drill_fields { # short name, equivalent to orders.drill_fields
fields: [
count, # short name, equivalent to orders.count
customer.id # full name, references a field defined in the "customer" view
]
}
}
위의 dimension: customer_address
선언에서 SQL 블록의 기본 뷰(customer
)가 주변을 둘러싼 뷰 범위(orders
)와 다릅니다. 두 뷰 간에 필드를 비교해야 하는 경우 유용할 수 있습니다.
뷰 (뷰 '뷰')는 다른 뷰로 정의된 필드 (뷰 B라고 함)를 지칭할 때 유의해야 할 몇 가지 사항이 있습니다.
- 뷰 B 파일은
include
매개변수를 사용하여 뷰 A와 동일한 모델에 포함되어야 합니다. - 하나 이상의 탐색 분석에서 A를 보려면 보기 B를 조인해야 합니다. 조인에 대한 자세한 내용은 LookML에서 조인 작업 페이지를 참조하세요.
SQL 언어
Looker는 MySQL, Postgres, Redshift, BigQuery 등 다양한 데이터베이스 유형을 지원합니다. 각 데이터베이스는 SQL 언어라고 하는 함수 이름이 서로 약간 다른 기능 집합을 지원합니다.
LookML은 모든 SQL 언어를 지원하도록 설계되었으며 LookML은 특정 언어보다 다른 언어를 사용하는 것을 선호하지 않습니다. 그러나 특정 LookML 매개변수에 SQL 코드 표현식 (SQL 블록이라고 함)을 포함해야 합니다. 이러한 매개변수를 사용하면 Looker에서 SQL 표현식을 데이터베이스에 직접 전달하므로 데이터베이스와 일치하는 SQL 언어를 사용해야 합니다. 예를 들어 SQL 함수를 사용하는 경우 데이터베이스에서 지원하는 함수여야 합니다.
SQL 블록
일부 LookML 매개변수는 원시 SQL 표현식을 제공해야 Looker가 데이터베이스에서 데이터를 가져오는 방법을 이해할 수 있습니다.
sql_
으로 시작하는 LookML 매개변수에는 SQL 형식의 표현식이 필요합니다. 예: sql_always_where
, sql_on
, sql_table_name
. SQL 블록의 가장 일반적인 LookML 매개변수는 sql
입니다. 이는 측정기준 및 측정 필드 정의에서 측정기준 또는 측정을 정의하는 SQL 표현식을 지정하는 데 사용됩니다.
SQL 블록에 지정하는 코드는 단일 필드 이름처럼 간단하거나 상관관계가 있는 하위 선택 항목만큼 복잡할 수 있습니다. 콘텐츠는 매우 복잡할 수 있으며 원시 SQL로 커스텀 쿼리 로직을 표현하기 위해 필요한 거의 모든 것을 수용할 수 있습니다. SQL 블록에서 사용하는 코드는 데이터베이스에서 사용하는 SQL 언어와 일치해야 합니다.
측정기준 및 측정값에 대한 SQL 블록 예시
다음은 측정기준과 측정항목의 SQL 블록 예시입니다. LookML 대체 연산자 ($)는 이러한 sql
선언을 SQL과 달리 사기성으로 표시할 수 있습니다. 그러나 대체가 발생한 후에 발생하는 문자열은 순수 SQL이며 Looker에서 쿼리의 SELECT
절에 삽입합니다.
dimension: id {
primary_key: yes
sql: ${TABLE}.id ;; # Specify the primary key, id
}
measure: average_cost {
type: average
value_format: "0.00"
sql: ${order_items.cost} ;; # Specify the field that you want to average
}
dimension: name {
sql: CONCAT(${first_name}, ' ', ${last_name}) ;;
}
dimension: days_in_inventory {
type: int
sql: DATEDIFF(${sold_date}, ${created_date}) ;;
}
위의 마지막 두 차원에 나와 있는 것처럼 SQL 블록은 기본 데이터베이스에서 지원하는 함수 (예: MySQL 함수 CONCAT
및 DATEDIFF
)를 사용할 수 있습니다.
상관된 하위 선택이 포함된 SQL 블록 예시
상관된 하위 선택을 포함하여 모든 SQL 문을 필드의 SQL 블록에 배치할 수 있습니다. 예를 들면 다음과 같습니다.
view: customers {
dimension: id {
primary_key: yes
sql: ${TABLE}.id ;;
}
dimension: first_order_id {
sql: (SELECT MIN(id) FROM orders o WHERE o.customer_id=customers.id) ;;
# correlated subselect to derive the value for "first_order_id"
}
}
파생된 테이블의 SQL 블록 예
파생 테이블은 SQL 블록을 사용하여 테이블을 파생하는 쿼리를 지정합니다. 예를 들면 다음과 같습니다.
view: user_order_facts {
derived_table: {
sql: # Get the number of orders for each user
SELECT
user_id
, COUNT(*) as lifetime_orders
FROM orders
GROUP BY 1 ;;
}
# later, dimension declarations reference the derived column(s)
dimension: lifetime_orders {
type: number
}
}
LookML 필드 유형 참조
다른 필드 내에서 기존 LookML 필드를 참조할 때 이중 콜론 (::
)과 원하는 유형을 사용하여 Looker에 참조된 필드를 특정 데이터 유형으로 처리하라고 지시할 수 있습니다. 예를 들어 다른 필드 내에서 orders.created_date
측정기준을 참조하는 경우 ${orders.created_date::date}
필드를 사용하면 created_date
필드가 문자열로 변환되지 않고 Looker에서 생성되는 SQL의 날짜 필드로 처리되도록 할 수 있습니다.
참조에 사용할 수 있는 데이터 유형은 참조하는 원본 필드의 데이터 유형에 따라 다릅니다. 예를 들어 문자열 필드를 참조하는 경우 지정할 수 있는 유일한 데이터 유형은 ::string
입니다. 다음은 각 필드 유형에 사용할 수 있는 허용된 필드 유형 참조의 전체 목록입니다.
- 문자열 필드 참조에
::string
를 사용할 수 있습니다. - 숫자 필드 참조에
::string
와::number
를 사용할 수 있습니다. - 날짜 또는 시간 참조에 대해
::string
,::date
,::datetime
를 사용할 수 있습니다.::string
및::date
를 사용하는 참조는 쿼리 시간대에서 데이터를 반환하고::datetime
를 사용하는 참조는 데이터베이스 시간대에서 데이터를 반환합니다. - yesno 필드 참조에
::string
,::number
,::boolean
를 사용할 수 있습니다.
부울 데이터 유형을 지원하지 않는 데이터베이스 언어에서는::boolean
유형을 사용하는 필드 참조를 사용할 수 없습니다. - 위치 필드 참조에
::latitude
와::longitude
를 사용할 수 있습니다.
날짜 필드에 LookML 필드 유형 참조 사용
예를 들어 enrollment_month
측정기준과 graduation_month
측정기준이 있고 둘 다 type: time
의 측정기준 그룹 내에서 생성되었다고 가정해 보겠습니다. 이 예에서 enrollment_month
측정기준은 다음과 같은 type: time
의 측정기준 그룹에 의해 생성됩니다.
dimension_group: enrollment {
type: time
timeframes: [time, date, week, month, year, raw]
sql: ${TABLE}.enrollment_date ;;
}
마찬가지로 graduation_month
측정기준은 다음 type: time
측정기준 그룹에 의해 생성됩니다.
dimension_group: graduation {
type: time
timeframes: [time, date, week, month, year, raw]
sql: ${TABLE}.graduation_date ;;
}
enrollment_month
및 graduation_month
측정기준을 사용하면 type: duration
측정기준 그룹을 만들어 학생 등록 및 졸업 간 경과 개월 또는 연수를 계산할 수 있습니다. 그러나 일부 날짜 필드는 Looker에서 생성되는 SQL의 문자열로 변환되기 때문에 enrollment_month
및 graduation_month
측정기준을 sql_start
및 sql_end
값으로 설정하면 오류가 발생할 수 있습니다.
이러한 시간 필드가 문자열로 변환되어 발생하는 오류를 피하려면 sql_start
및 sql_end
매개변수의 enrollment
및 graduation
측정기준 그룹에서 raw
기간을 참조하는 type: duration
측정기준 그룹을 만듭니다.
dimension_group: enrolled {
type: duration
intervals: [month, year]
sql_start: ${enrollment_raw} ;;
sql_end: ${graduation_raw} ;;
}
탐색 UI에서 등록된 기간이라는 측정기준 그룹이 생성되며, 이 측정기준 그룹은 등록된 월 및 등록 연도로 구성됩니다.
type: duration
의 측정기준 그룹에서 raw
기간을 사용하는 더 간단한 대안은 sql_start
및 sql_end
매개변수에서 참조되는 필드에 ::date
또는 ::datetime
참조 유형을 지정하는 것입니다.
dimension_group: enrolled {
type: duration
intervals: [month, year]
sql_start: ${enrollment_month::date} ;;
sql_end: ${graduation_month::date} ;;
}
이 예에서 LookML은 등록된 기간 측정기준 그룹도 만들지만 ::date
참조를 사용하면 raw
기간을 사용하거나 SQL을 사용하여 문자열로 변환하지 않고도 enrollment_month
및 graduation_month
측정기준을 사용할 수 있습니다.
LookML 필드 유형 참조를 사용하여 type: duration
의 맞춤 측정기준 그룹을 만드는 방법에 대한 추가 예는 dimension_group
매개변수 문서 페이지를 참고하세요.
이 구문은 Looker 6.8부터 참조할 수 없는
type: list
측정값에는 사용할 수 없습니다.
LookML 상수
constant
매개변수를 사용하면 LookML 프로젝트 전체에서 사용할 수 있는 상수를 지정할 수 있습니다. LookML 상수를 사용하면 값을 한 번 정의하고 문자열이 허용되는 프로젝트의 모든 위치에서 참조할 수 있으므로 LookML 코드에서 반복이 줄어듭니다.
상수는 프로젝트 매니페스트 파일 내에서 선언되어야 하며, 상수 값은 문자열이어야 합니다. 예를 들어 다음과 같이 값이 "Okayama"
인 상수 city
를 정의할 수 있습니다.
constant: city {
value: "Okayama"
}
그런 다음 @{city}
문법을 사용하여 프로젝트 전체에서 city
상수를 참조할 수 있습니다. 예를 들어 users
탐색에서 label
매개변수와 함께 city
상수를 사용할 수 있습니다.
explore: users {
label: "@{city} Users"
}
그러면 Looker가 기본 사용자가 아닌 탐색 메뉴와 탐색 제목에 오카야마 사용자가 표시됩니다.
LookML 상수를 사용하여 재사용 가능한 코드를 작성하는 방법에 대한 자세한 내용과 예는 constant
매개변수 문서 페이지를 참조하세요.