이 페이지에서는 필드의 일부인
sql
매개변수를 설명합니다.
sql
는sql
(파생된 테이블의 경우) 매개변수 문서 페이지에 설명된 것처럼 파생 테이블의 일부로 사용할 수도 있습니다.
용도
dimension: field_name {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
}
}
계층 구조
sql |
가능한 필드 유형
측정기준, 측정기준 그룹, 필터, 측정결제 가능
SQL 표현식특수 규칙
필드의 type 에 따라 달라지는 SQL 표현식 (자세한 내용은 아래 참고)
|
정의
sql
매개변수는 측정기준, 측정 또는 필터를 정의하는 여러 유형의 SQL 표현식을 사용합니다. 작성해야 하는 표현식은 만들려는 필드 유형에 따라 다릅니다. 측정기준 및 필터 유형에 대한 자세한 내용은 측정기준, 필터 및 매개변수 유형 문서 페이지에서 확인할 수 있으며, 측정 유형에 대한 자세한 내용은 측정 유형 문서 페이지에서 확인할 수 있습니다. SQL 통합 및 LookML 객체 참조 문서 페이지도 참고하세요.
sql
: 측정기준
측정기준의 sql
블록은 일반적으로 SELECT
문의 단일 열에 들어가는 모든 유효한 SQL을 사용할 수 있습니다. 이러한 문은 일반적으로 여러 형식이 있는 Looker의 대체 연산자를 사용합니다.
${TABLE}.column_name
는 작업 중인 뷰에 연결된 테이블의 열을 참조합니다.${dimension_name}
는 작업 중인 보기 내에서 측정기준을 참조합니다.${view_name.dimension_name}
는 다른 뷰의 측정기준을 참조합니다.${view_name.SQL_TABLE_NAME}
는 다른 뷰 또는 파생된 테이블을 참조합니다. (이 참조의SQL_TABLE_NAME
는 리터럴 문자열이므로 아무것도 바꾸지 않아도 됩니다.)
sql
를 지정하지 않은 경우 Looker는 기본 테이블에 필드와 이름이 같은 열이 있다고 가정합니다. 예를 들어 sql
매개변수 없이 city
라는 필드를 선택하는 것은 sql: ${TABLE}.city
를 지정하는 것과 같습니다.
측정기준의
sql
매개변수에는 집계를 포함할 수 없습니다. 즉, SQL 집계 또는 LookML 측정에 대한 참조를 포함할 수 없습니다. SQL 집계를 포함하거나 LookML 측정을 참조하는sql
으로 필드를 만들려면 측정기준이 아닌 측정에서sql
매개변수를 사용합니다.
revenue
열에서 직접 값을 가져오는 매우 간단한 측정기준은 다음과 같습니다.
dimension: revenue_in_cents {
sql: ${TABLE}.revenue ;;
type: number
}
동일한 보기에 있는 다른 측정기준을 사용하는 측정기준은 다음과 같습니다.
dimension: revenue_in_dollars {
sql: ${revenue_in_cents} / 100 ;;
type: number
}
다른 보기에서 다른 측정기준을 사용하는 측정기준은 다음과 같습니다.
dimension: profit_in_dollars {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
type: number
}
파생된 표에서 다른 측정기준을 사용하는 측정기준은 다음과 같습니다.
dimension: average_margin {
sql: (SELECT avg(${gross_margin} FROM ${order_facts.SQL_TABLE_NAME})) ;;
type: number
}
고급 SQL 사용자는 상관된 하위 쿼리를 포함하여 상대적으로 고급 계산을 수행할 수 있습니다. 참고로, 모든 데이터베이스 언어에서 상관 하위 쿼리를 지원하지는 않습니다.
dimension: user_order_sequence_number {
type: number
sql:
(
SELECT COUNT(*)
FROM orders AS o
WHERE o.id <= ${TABLE}.id
AND o.user_id = ${TABLE}.user_id
) ;;
}
자세한 내용은 특정 측정기준 유형에 관한 문서를 참고하세요.
측정기준 그룹: sql
dimension_group
의 sql
매개변수는 타임스탬프, 날짜/시간, 날짜, 에포크 또는 yyyymmdd 형식의 데이터가 포함된 유효한 SQL 표현식을 사용합니다.
sql
: 측정
측정의 sql
블록은 일반적으로 다음 두 가지 형식 중 하나입니다.
- 위에서 Looker의 대체 연산자를 사용하여 집계 함수 (예:
COUNT
,SUM
,AVG
)를 수행할 SQL을 다시 실행합니다. - 기타 여러 측정값을 기반으로 하는 값
예를 들어 총 수익을 달러로 계산할 때 다음을 사용할 수 있습니다.
measure: total_revenue_in_dollars {
sql: ${revenue_in_dollars} ;;
type: sum
}
총 이익을 계산할 때 다음을 사용할 수 있습니다.
measure: total_revenue_in_dollars {
sql: ${total_revenue_in_dollars} - ${inventory_item.total_cost_in_dollars} ;;
type: number
}
자세한 내용은 특정 측정 유형에 대한 문서를 참고하세요.
count
측정 유형의 경우 sql
매개변수를 생략할 수 있습니다.
다른 유형의 측정의 경우 sql
를 지정되지 않은 상태로 두면 Looker는 기본 테이블에 필드와 이름이 같은 열이 있다고 가정합니다. 측정값은 기본 값 집합의 집계임을 나타내는 이름이 있어야 하므로 실제로는 항상 sql
매개변수를 포함해야 합니다.
SQL 수학 문제
sql
매개변수에서 나눗셈이 발생하는 두 가지 빈번한 문제가 있습니다.
첫째, 계산에 나눗셈을 사용하고 있다면 SQL 오류를 낼 0으로 나누기의 가능성을 방지하는 것이 좋습니다. 이렇게 하려면 SQL NULLIF
함수를 사용합니다. 예를 들어 다음은 '분모가 0이면 NULL처럼 취급합니다'를 의미합니다.
measure: active_users_percent {
sql: ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
또 다른 문제는 SQL이 정수 수학을 처리하는 방법입니다. 5를 2로 나누면 대부분의 사용자는 2.5를 기대합니다. 그러나 많은 SQL 언어에서는 결과를 2로 반환하는데, 그 이유는 두 정수를 나누면 결과를 정수로 제공하기 때문입니다. 이 문제를 해결하기 위해 분자에 십진수를 곱하여 SQL이 소수점 결과를 반환하도록 할 수 있습니다. 예를 들면 다음과 같습니다.
measure: active_users_percent {
sql: 100.00 * ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
sql
를 사용한 유동 변수
sql
매개변수와 함께 유동 변수를 사용할 수도 있습니다. 유동 변수를 사용하면 필드의 값, 필드에 관한 데이터, 필드에 적용된 필터와 같은 데이터에 액세스할 수 있습니다.
예를 들어 이 측정기준은 Looker 사용자 속성에 따라 고객 비밀번호를 마스킹합니다.
dimension: customer_password {
sql:
{% dynamic if _user_attributes['pw_access'] == 'yes' %}
${password}
{% dynamic else %}
"Password Hidden"
{% dynamic endif %} ;;
}