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 매개변수는 타임스탬프, datetime, date, epoch 또는 yyyymmdd 형식의 데이터가 포함된 유효한 SQL 표현식을 사용합니다.

측정값용 sql

측정항목의 sql 블록은 일반적으로 다음 두 가지 형식 중 하나를 사용합니다.

  • 집계 함수 (예: COUNT, SUM, AVG)가 실행될 SQL입니다. 측정기준의 SQL 섹션에 설명된 대로 Looker의 대체 연산자를 다시 사용합니다.
  • 여러 다른 측정값을 기반으로 하는 값

예를 들어 총수익을 달러로 계산하려면 다음을 사용할 수 있습니다.

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를 사용하는 Liquid 변수

sql 매개변수와 함께 Liquid 변수를 사용할 수도 있습니다. Liquid 변수를 사용하면 필드의 값, 필드에 관한 데이터, 필드에 적용된 필터와 같은 데이터에 액세스할 수 있습니다.

예를 들어 이 측정기준은 Looker 사용자 속성에 따라 고객 비밀번호를 마스킹합니다.

dimension: customer_password {
  sql:
    {% if _user_attributes['pw_access'] == 'yes' %}
      ${password}
    {% else %}
      "Password Hidden"
    {% endif %} ;;
}