sql (필드용)

이 페이지에서는 필드의 일부인 sql 매개변수를 설명합니다.

sqlsql (파생된 테이블의 경우) 매개변수 문서 페이지에 설명된 것처럼 파생 테이블의 일부로 사용할 수도 있습니다.

용도

view: view_name {
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_groupsql 매개변수는 타임스탬프, 날짜/시간, 날짜, 에포크 또는 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 %} ;;
}