측정 유형

이 페이지에서는 측정값의 일부인 type 매개변수를 설명합니다.

type측정기준, 필터, 매개변수 유형 문서 페이지에 설명된 측정기준 또는 필터의 일부로 사용할 수도 있습니다.

typedimension_group 매개변수 문서 페이지에 설명된 측정기준 그룹의 일부로 사용할 수도 있습니다.

용도

view: view_name {
measure: field_name {
type: measure_field_type
}
}
계층 구조
type
가능한 필드 유형
측정

결제 가능
측정 유형

이 페이지에는 측정에 할당할 수 있는 다양한 유형에 대한 세부정보가 포함되어 있습니다. 측정에는 한 가지 유형만 있을 수 있으며 유형을 지정하지 않으면 기본값은 string입니다.

일부 측정 유형에는 관련 섹션에 설명된 지원 매개변수가 있습니다.

유형 카테고리 측정

각 측정 유형은 다음 카테고리 중 하나에 속합니다. 다음 카테고리는 측정 유형이 집계를 실행하는지 여부, 측정 유형이 참조할 수 있는 필드 유형, filters 매개변수를 사용하여 측정 유형을 필터링할 수 있는지 여부를 결정합니다.

  • 집계 측정: 집계 측정 유형은 sumaverage과 같은 집계를 수행합니다. 집계 측정값은 측정기준만 참조할 수 있으며 다른 측정값은 참조할 수 없습니다. 이는 filters 매개변수와 함께 사용할 수 있는 유일한 측정 유형입니다.
  • 비집계 측정: 집계가 아닌 측정은 이름에서 알 수 있듯이 numberyesno와 같이 집계를 실행하지 않는 측정 유형입니다. 이러한 측정 유형은 간단한 변환을 수행하고 집계를 수행하지 않으므로 집계 측정값 또는 이전에 집계된 측정기준만 참조할 수 있습니다. 이러한 측정 유형에서는 filters 매개변수를 사용할 수 없습니다.
  • SQL 후 측정: SQL 후 측정은 Looker에서 쿼리 SQL을 생성한 후 특정 계산을 수행하는 특별한 측정 유형입니다. 숫자 측정값 또는 숫자 측정기준만 참조할 수 있습니다. 이러한 측정 유형에서는 filters 매개변수를 사용할 수 없습니다.

유형 정의 목록

유형 카테고리 설명
average 집계 열 내에 값의 평균 (평균)을 생성합니다.
average_distinct 집계 비정규화된 데이터를 사용할 때 값의 평균을 올바르게 생성합니다. 자세한 설명은 아래 정의를 참고하세요.
count 집계 행 수 생성
count_distinct 집계 열 내의 고유 값 개수를 생성합니다.
date 비집계 날짜가 포함된 측정의 경우
list 집계 열 내의 고유 값 목록을 생성합니다.
max 집계 열 내에 최댓값을 생성합니다.
median 집계 열 내에 있는 값의 중간값 (중간값)을 생성합니다.
median_distinct 집계 조인이 팬아웃을 일으킬 때 값의 중앙값 (중간값)을 올바르게 생성합니다. 자세한 설명은 아래 정의를 참고하세요.
min 집계 열 내에 최솟값을 생성합니다.
number 비집계 숫자가 포함된 측정의 경우
percent_of_previous SQL 이후 표시된 행 간의 비율 차이를 생성합니다.
percent_of_total SQL 이후 표시된 각 행의 총계 백분율을 생성합니다.
percentile 집계 열 내에 지정된 백분위수의 값을 생성합니다.
percentile_distinct 집계 조인으로 인해 팬아웃이 발생할 때 지정된 백분위수에서 값이 올바르게 생성됩니다. 자세한 설명은 아래 정의를 참고하세요.
running_total SQL 이후 표시된 각 행의 누계를 생성합니다.
string 비집계 문자 또는 특수문자가 포함된 측정의 경우 (MySQL의 GROUP_CONCAT 함수에서와 같이)
sum 집계 열 내의 값의 합계를 생성합니다.
sum_distinct 집계 비정규화된 데이터를 사용할 때는 값의 합계를 적절하게 생성합니다.
자세한 설명은 아래 정의를 참고하세요.
yesno 비집계 참 또는 거짓인지 표시할 필드
int 비집계 삭제된 5.4 type: number로 대체됨

average

type: average는 특정 필드에 있는 값의 평균을 냅니다. SQL의 AVG 함수와 유사합니다. 하지만 원시 SQL 작성과 달리 Looker는 쿼리의 조인에 팬아웃이 포함되어 있어도 평균을 올바르게 계산합니다.

type: average 측정의 sql 매개변수는 숫자 테이블 열, LookML 측정기준 또는 LookML 측정기준의 조합을 생성하는 유효한 SQL 표현식을 사용할 수 있습니다.

type: average 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

예를 들어 다음 LookML은 sales_price 측정기준을 평균화하여 avg_order라는 필드를 만든 다음 금액 형식 ($1,234.56)으로 표시합니다.

measure: avg_order {
  type: average
  sql: ${sales_price} ;;
  value_format_name: usd
}

average_distinct

type: average_distinct은 비정규화된 데이터 세트에 사용합니다. sql_distinct_key 매개변수로 정의된 고유한 값을 기준으로 지정된 필드에서 반복되지 않은 값의 평균을 냅니다.

이는 예시를 통해 더 명확하게 설명할 수 있는 고급 개념입니다. 다음과 같이 비정규화된 테이블을 생각해 보세요.

주문 항목 ID 주문 ID 주문 배송
1 1 10,000원
2 1 10,000원
3 2 20,000원
4 2 20,000원
5 2 20,000원

이 경우 각 주문에 여러 행이 있음을 알 수 있습니다. 따라서 order_shipping 열에 간단한 type: average 측정값을 추가하면 실제 평균은 15.00이더라도 16.00이 됩니다.

 # Will NOT calculate the correct average
measure: avg_shipping {
  type: average
  sql: ${order_shipping} ;;
}

정확한 결과를 얻으려면 sql_distinct_key 매개변수를 사용하여 Looker에 각 고유 항목 (이 경우에는 각 순 주문)을 식별하는 방법을 설명합니다. 그러면 정확한 15.00 금액이 계산됩니다.

 # Will calculate the correct average
measure: avg_shipping {
  type: average_distinct
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

sql_distinct_key의 모든 고유한 값은 sql에 상응하는 하나의 값만 가져야 합니다. 즉, 위 예는 order_id가 1인 모든 행의 order_shipping가 10.00이고 order_id가 2인 모든 행의 order_shipping가 20.00이라는 식으로 계속 이어집니다.

type: average_distinct 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

count

type: count는 SQL의 COUNT 함수와 유사한 테이블 수를 수행합니다. 하지만 원시 SQL 작성과 달리 Looker는 쿼리의 조인에 팬아웃이 포함되어 있어도 개수를 올바르게 계산합니다.

type: count 측정값은 sql 매개변수를 지원하지 않습니다. type: count 측정값은 테이블의 기본 키를 기준으로 테이블 수를 실행하기 때문입니다. 테이블의 기본 키가 아닌 필드에서 테이블 수를 수행하려면 type: count_distinct 측정값을 사용합니다.

예를 들어 다음 LookML은 number_of_products 필드를 만듭니다.

view: products {
  measure: number_of_products {
    type: count
    drill_fields: [product_details*]  # optional
  }
}

사용자가 클릭할 때 집계를 구성하는 개별 레코드를 확인할 수 있도록 type: count 측정을 정의할 때 drill_fields (필드용) 매개변수를 제공하는 것이 매우 일반적입니다.

탐색에서 type: count 측정 값을 사용하면 시각화가 결과 값에 'Count'라는 단어가 아닌 뷰 이름으로 라벨을 지정합니다. 혼동을 피하려면 뷰 이름을 복수로 지정하거나 시각화 설정의 시리즈에서 전체 필드 이름 표시를 선택하거나 view_label을 사용하여 보기 이름의 복수형을 사용하는 것이 좋습니다.

기본 키가 아닌 필드에서 COUNT(COUNT_DISTINCT 아님)를 수행하려면 type: number 측정값을 사용하면 됩니다. 자세한 내용은 고객센터 도움말 countcount_distinct 측정 유형 간의 차이점을 참고하세요.

filters 매개변수를 사용하여 type: count 측정값에 필터를 추가할 수 있습니다.

count_distinct

type: count_distinct는 지정된 필드의 고유 값 수를 계산합니다. SQL의 COUNT DISTINCT 함수를 사용합니다.

type: count_distinct 측정의 sql 매개변수는 테이블 열, LookML 측정기준 또는 LookML 측정기준의 조합을 생성하는 유효한 SQL 표현식을 사용할 수 있습니다.

예를 들어 다음 LookML은 고유한 고객 ID 수를 계산하는 number_of_unique_customers 필드를 만듭니다.

measure: number_of_unique_customers {
  type: count_distinct
  sql: ${customer_id} ;;
}

filters 매개변수를 사용하여 type: count_distinct 측정값에 필터를 추가할 수 있습니다.

date

type: date는 날짜가 포함된 필드에 사용됩니다.

type: date 측정의 sql 매개변수는 날짜를 생성하는 유효한 SQL 표현식을 사용할 수 있습니다. 대부분의 SQL 집계 함수는 날짜를 반환하지 않으므로 이 유형은 실제로 거의 사용되지 않습니다. 한 가지 일반적인 예외는 날짜 측정기준의 MIN 또는 MAX입니다.

type: date를 사용하여 최대 또는 최소 날짜 측정 만들기

최대 또는 최소 날짜에 대한 측정값을 생성하려는 경우 처음에 type: max 또는 type: min 측정값을 사용하는 것이 적합하다고 생각할 수 있습니다. 그러나 이러한 측정 유형은 숫자 필드와만 호환됩니다. 대신 type: date의 측정값을 정의하고 sql 매개변수에 참조된 날짜 필드를 MIN() 또는 MAX() 함수로 래핑하여 최대 또는 최소 날짜를 캡처할 수 있습니다.

updated라는 type: time측정기준 그룹이 있다고 가정해 보겠습니다.

dimension_group: updated {
  type: time
  timeframes: [time, date, week, month, raw]
  sql: ${TABLE}.updated_at ;;
}

type: date의 측정값을 만들어 다음과 같이 이 측정기준 그룹의 최대 날짜를 캡처할 수 있습니다.

measure: last_updated_date {
  type: date
  sql: MAX(${updated_raw}) ;;
  convert_tz: no
}

이 예에서는 type: max 측정값을 사용하여 last_updated_date 측정을 만드는 대신 MAX() 함수가 sql 매개변수에 적용됩니다. 또한 측정기준 측정값 updated의 정의에서 시간대 전환이 이미 발생했으므로 last_updated_date 측정값에서 convert_tz 매개변수가 no로 설정되어 측정에서 이중 시간대 전환을 방지합니다. 자세한 내용은 convert_tz 매개변수에 관한 문서를 참고하세요.

last_updated_date 측정의 LookML 예에서 stringtype의 기본값이므로 type: date를 생략하고 그 값을 문자열로 처리할 수 있습니다. 그러나 type: date를 사용하면 사용자를 위한 필터링 기능이 향상됩니다.

또한 last_updated_date 측정 정의가 ${updated_date} 기간이 아닌 ${updated_raw} 기간을 참조합니다. ${updated_date}에서 반환된 값이 문자열이므로 대신 ${updated_raw}를 사용하여 실제 날짜 값을 참조해야 합니다.

datatype 매개변수를 type: date와 함께 사용하면 데이터베이스 테이블에서 사용하는 날짜 데이터 유형을 지정하여 쿼리 성능을 개선할 수 있습니다.

날짜/시간 열의 최대 또는 최소 측정값 만들기

type: datetime 열의 최댓값을 계산하는 것은 약간 다릅니다. 이 경우 다음과 같이 유형을 선언하지 않고 측정값을 만들 수 있습니다.

measure: last_updated_datetime {
  sql: MAX(${TABLE}.datetime_string_field) ;;
}

list

type: list는 지정된 필드에 고유한 값 목록을 만듭니다. MySQL의 GROUP_CONCAT 함수와 유사합니다.

type: list 측정값에 sql 매개변수를 포함하지 않아도 됩니다. 대신 list_field 매개변수를 사용하여 목록을 만들 측정기준을 지정합니다.

사용법은 다음과 같습니다.

view: view_name {
measure: field_name {
type: list
list_field: my_field_name
}
}

예를 들어 다음 LookML은 name 측정기준을 기반으로 name_list 측정을 만듭니다.

measure: name_list {
  type: list
  list_field: name
}

list의 다음 사항에 유의하세요.

  • list 측정 유형은 필터링을 지원하지 않습니다. type: list 측정에는 filters 매개변수를 사용할 수 없습니다.
  • list 측정 유형은 대체 연산자 ($)를 사용하여 참조할 수 없습니다. type: list 구문을 참조하는 ${} 구문을 사용할 수 없습니다.

list에 지원되는 데이터베이스 언어

Looker 프로젝트에서 type: list를 지원하려면 데이터베이스 언어에서도 Looker를 지원해야 합니다. 다음 표는 최신 Looker 버전에서 type: list를 지원하는 언어를 보여줍니다.

max

type: max는 지정된 필드에서 가장 큰 값을 찾습니다. SQL의 MAX 함수를 사용합니다.

type: max 측정의 sql 매개변수는 숫자 테이블 열, LookML 측정기준 또는 LookML 측정기준의 조합을 생성하는 유효한 SQL 표현식을 사용할 수 있습니다.

type: max 측정값은 숫자 필드와만 호환되므로 type: max 측정값을 사용하여 최대 날짜를 찾을 수는 없습니다. 대신, 이전에 date 섹션의 예에서 본 것처럼 type: date 측정값의 sql 매개변수에 MAX() 함수를 사용하여 최대 날짜를 캡처할 수 있습니다.

type: max 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

예를 들어 다음 LookML은 sales_price 측정기준을 확인하여 largest_order라는 필드를 만든 다음 금액 형식 ($1,234.56)으로 표시합니다.

measure: largest_order {
  type: max
  sql: ${sales_price} ;;
  value_format_name: usd
}

현재 문자열이나 날짜에 type: max 측정값을 사용할 수 없지만 다음과 같이 MAX 함수를 직접 추가하여 이러한 필드를 만들 수 있습니다.

measure: latest_name_in_alphabet {
  type: string
  sql: MAX(${name}) ;;
}

median

type: median는 지정된 필드의 값에 중간값을 반환합니다. 이는 데이터에 단순한 평균 (평균)을 왜곡하는 몇 가지 매우 크거나 작은 이상점 값이 있는 경우 특히 유용합니다.

다음과 같은 표를 살펴보세요.

주문 항목 ID | 비용 | 중점 -------------:|--------------: 2 | 10.00 | 4 | 10.00 | 3 | 20.00 | 중간값 1 | 80.00 | 5 | 90.00 |

쉽게 볼 수 있도록 테이블이 비용별로 정렬되지만 결과에 영향을 주지는 않습니다. average 유형은 42 (모든 값을 더하고 5로 나눈 값)를 반환하지만 median 유형은 중간값인 20.00을 반환합니다.

짝수 개의 값이 있는 경우 중간값에 가장 가까운 두 값의 평균을 구해 중앙값을 계산합니다. 다음과 같이 짝수 행의 테이블이 있다고 가정해 보겠습니다.

주문 항목 ID | 비용 | 중점 -->

중간값인 중앙값은 (20 + 80)/2 = 50입니다.

중앙값은 50번째 백분위수 값과 같습니다.

type: median 측정의 sql 매개변수는 숫자 테이블 열, LookML 측정기준 또는 LookML 측정기준의 조합을 생성하는 유효한 SQL 표현식을 사용할 수 있습니다.

type: median 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

예를 들어 다음 LookML은 sales_price 측정기준을 평균화하여 median_order라는 필드를 만든 다음 금액 형식 ($1,234.56)으로 표시합니다.

measure: median_order {
  type: median
  sql: ${sales_price} ;;
  value_format_name: usd
}

median 관련 고려사항

팬아웃과 관련된 필드에 median를 사용하는 경우 Looker에서 대신 median_distinct를 사용하려고 시도합니다. 하지만 medium_distinct특정 언어에만 지원됩니다. median_distinct를 방언에 사용할 수 없는 경우 Looker에서 오류를 반환합니다. median는 50번째 백분위수로 간주될 수 있기 때문에 오류에 해당 방사가 고유한 백분위수를 지원하지 않습니다.

median에 지원되는 데이터베이스 언어

Looker 프로젝트에서 median 유형을 지원하려면 데이터베이스 언어에서도 Looker를 지원해야 합니다. 다음 표는 최신 Looker 버전에서 median 유형을 지원하는 언어를 보여줍니다.

쿼리에 팬아웃이 있으면 Looker에서 medianmedian_distinct으로 변환하려고 시도합니다. median_distinct 지원 언어에서만 성공합니다.

median_distinct

조인에 팬아웃이 포함된 경우 type: median_distinct를 사용합니다. sql_distinct_key 매개변수로 정의된 고유한 값을 기준으로 지정된 필드에서 반복되지 않은 값의 평균을 냅니다. 측정에 sql_distinct_key 매개변수가 없으면 Looker에서 primary_key 필드를 사용하려고 시도합니다.

주문 항목과 주문 표를 조인하는 쿼리의 결과를 생각해 보세요.

주문 항목 ID 주문 ID 주문 배송
1 1 10
2 1 10
3 2 20
4 3 50
5 3 50
6 3 50

이 경우 각 주문에 여러 행이 있음을 알 수 있습니다. 각 쿼리가 여러 주문 항목에 매핑되므로 이 쿼리에는 팬아웃이 포함되었습니다. median_distinct는 이를 고려하여 고유한 값 10, 20, 50 사이의 중앙값을 찾아 20이 되도록 합니다.

정확한 결과를 얻으려면 sql_distinct_key 매개변수를 사용하여 Looker에 각 고유 항목 (이 경우에는 각 순 주문)을 식별하는 방법을 설명합니다. 이렇게 하면 정확한 금액이 계산됩니다.

measure: median_shipping {
  type: median_distinct
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

sql_distinct_key의 모든 고유한 값은 측정값의 sql 매개변수에 해당하는 하나의 값만 가져야 합니다. 즉, 위 예시는 order_id가 1인 모든 행의 order_shipping가 10이고, order_id가 2인 모든 행의 order_shipping가 20인 식입니다.

type: median_distinct 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

median_distinct 관련 고려사항

medium_distinct 측정 유형은 특정 언어에만 지원됩니다. median_distinct를 방언에 사용할 수 없는 경우 Looker에서 오류를 반환합니다. median는 50번째 백분위수로 간주될 수 있기 때문에 오류에 해당 방사가 고유한 백분위수를 지원하지 않습니다.

median_distinct에 지원되는 데이터베이스 언어

Looker 프로젝트에서 median_distinct 유형을 지원하려면 데이터베이스 언어에서도 Looker를 지원해야 합니다. 다음 표는 최신 Looker 버전에서 median_distinct 유형을 지원하는 언어를 보여줍니다.

min

type: min는 지정된 필드에서 가장 작은 값을 찾습니다. SQL의 MIN 함수를 사용합니다.

type: min 측정의 sql 매개변수는 숫자 테이블 열, LookML 측정기준 또는 LookML 측정기준의 조합을 생성하는 유효한 SQL 표현식을 사용할 수 있습니다.

type: min 측정값은 숫자 필드와만 호환되므로 type: min 측정치를 사용하여 최소 날짜를 찾을 수 없습니다. 대신 type: date 측정값의 sql 매개변수에 MIN() 함수를 사용하면 최솟값을 캡처할 수 있습니다. type: date 측정값과 함께 MAX() 함수를 사용하여 최댓값을 캡처할 수 있기 때문입니다. 이 내용은 이전에 이 페이지의 date 섹션에서 확인할 수 있습니다. 여기에는 sql 매개변수에 MAX() 함수를 사용하여 최대 날짜를 찾는 예시가 포함되어 있습니다.

type: min 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

예를 들어 다음 LookML은 sales_price 측정기준을 확인하여 smallest_order라는 필드를 만든 다음 금액 형식 ($1,234.56)으로 표시합니다.

measure: smallest_order {
  type: min
  sql: ${sales_price} ;;
  value_format_name: usd
}

현재 문자열이나 날짜에 type: min 측정값을 사용할 수 없지만 다음과 같이 MIN 함수를 직접 추가하여 이러한 필드를 만들 수 있습니다.

measure: earliest_name_in_alphabet {
  type: string
  sql: MIN(${name}) ;;
}

number

type: number는 숫자 또는 정수와 함께 사용됩니다. type: number의 측정은 집계를 수행하지 않으며, 다른 측정에 관해 간단한 변환을 수행합니다. 다른 측정값을 기준으로 측정값을 정의하는 경우 중첩 집계 오류를 방지하기 위해 새 측정값은 type: number여야 합니다.

type: number 측정의 sql 매개변수는 숫자 또는 정수가 되는 유효한 SQL 표현식을 사용할 수 있습니다.

type: number 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

예를 들어 다음 LookML은 total_sale_pricetotal_gross_margin 집계 측정값을 기반으로 total_gross_margin_percentage라는 측정값을 생성하고 이를 소수점 이하 두 자리 (12.34%)로 백분율 형식으로 표시합니다.

measure: total_sale_price {
  type: sum
  value_format_name: usd
  sql: ${sale_price} ;;
}

measure: total_gross_margin {
  type: sum
  value_format_name: usd
  sql: ${gross_margin} ;;
}

measure: total_gross_margin_percentage {
  type: number
  value_format_name: percent_2
  sql: ${total_gross_margin}/ NULLIF(${total_sale_price},0) ;;
}

위의 예에서는 NULLIF() SQL 함수를 사용하여 0으로 나누기 오류를 삭제합니다.

type: number 관련 고려사항

type: number 측정값을 사용할 때 유의해야 할 몇 가지 중요한 사항이 있습니다.

  • type: number의 측정값은 다른 측정기준이 아닌 다른 측정값에 대해서만 산술 연산을 수행할 수 있습니다.
  • Looker의 대칭 집계는 조인에서 연산될 때 측정값 type: number의 SQL에서 집계 함수를 보호하지 않습니다.
  • filters 매개변수는 type: number 측정값과 함께 사용할 수 없지만 filters 문서에서 해결 방법을 설명합니다.
  • type: number 측정값은 사용자에게 추천을 제공하지 않습니다.

percent_of_previous

type: percent_of_previous는 셀과 열의 이전 셀 간의 백분율 차이를 계산합니다.

type: percent_of_previous 측정의 sql 매개변수는 다른 숫자 측정값을 참조해야 합니다.

type: percent_of_previous 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다. 그러나 value_format_name 매개변수의 백분율 형식type: percent_of_previous 측정값과 호환되지 않습니다. 이 비율 형식은 값에 100을 곱하기 때문에 이전 계산의 백분율이 왜곡됩니다.

다음 예에서 이 LookML은 count 측정값을 기준으로 측정값 count_growth를 만듭니다.

measure: count_growth {
  type: percent_of_previous
  sql: ${count} ;;
}

Looker UI는 다음과 같습니다.

percent_of_previous 값은 정렬 순서에 따라 다릅니다. 정렬을 변경하는 경우 쿼리를 다시 실행하여 percent_of_previous 값을 다시 계산해야 합니다. 쿼리가 피봇팅되는 경우 percent_of_previous는 열이 아닌 행 전반에서 실행됩니다. 현재 이 동작을 변경할 수 없습니다.

또한 percent_of_previous 측정값은 데이터베이스에서 데이터가 반환된 계산됩니다. 즉, 다른 측정값에서 percent_of_previous 측정값을 참조하면 안 됩니다. 이는 다른 시간에 계산될 수 있으므로 정확한 결과를 얻지 못할 수 있습니다. 이는 percent_of_previous 측정값을 필터링할 수 없음을 의미합니다.

percent_of_total

type: percent_of_total는 열 합계에서 셀 부분을 계산합니다. 이 비율은 가능한 모든 행의 총계가 아니라 쿼리에서 반환된 행의 총계에 대해 계산됩니다. 하지만 쿼리에서 반환하는 데이터가 행 한도를 초과하는 경우 필드 값이 null로 표시됩니다. 총계의 비율을 계산하려면 전체 결과가 필요하기 때문입니다.

type: percent_of_total 측정의 sql 매개변수는 다른 숫자 측정값을 참조해야 합니다.

type: percent_of_total 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다. 그러나 value_format_name 매개변수의 백분율 형식type: percent_of_total 측정값과 호환되지 않습니다. 이러한 백분율 형식은 값에 100을 곱하여 percent_of_total 계산 결과를 왜곡합니다.

다음 예에서 이 LookML은 total_gross_margin 측정값을 기준으로 측정값 percent_of_total_gross_margin를 만듭니다.

measure: percent_of_total_gross_margin {
  type: percent_of_total
  sql: ${total_gross_margin} ;;
}

Looker UI는 다음과 같습니다.

쿼리가 피봇팅되는 경우 percent_of_total는 열이 아닌 행 전반에서 실행됩니다. 이렇게 하지 않으려면 direction: "column"를 측정 정의에 추가합니다.

또한 percent_of_total 측정값은 데이터베이스에서 데이터가 반환된 계산됩니다. 즉, 다른 측정값에서 percent_of_total 측정값을 참조하면 안 됩니다. 이는 다른 시간에 계산될 수 있으므로 정확한 결과를 얻지 못할 수 있습니다. 이는 percent_of_total 측정값을 필터링할 수 없음을 의미합니다.

percentile

type: percentile는 지정된 필드에 있는 값의 지정된 백분위수 값을 반환합니다. 예를 들어 75번째 백분위수를 지정하면 데이터 세트의 다른 값의 75% 보다 큰 값이 반환됩니다.

Looker는 반환할 값을 식별하기 위해 총 데이터 값 수를 계산하고 지정된 백분위수에 데이터 값 합계를 곱합니다. 데이터가 실제로 정렬되는 방식에 상관없이 Looker에서는 값이 증가하는 과정에서 데이터 값의 상대적 순서를 파악합니다. 아래에 설명된 것처럼 Looker가 반환하는 데이터 값은 계산이 정수인지 아닌지에 따라 다릅니다.

계산된 값이 정수가 아닌 경우

Looker는 계산된 값을 반올림하고 이를 사용하여 반환할 데이터 값을 식별합니다. 19개의 테스트 점수 모음 예시에서 75번째 백분위수는 19 * .75 = 14.25로 식별됩니다. 즉, 값의 75% 가 첫 14개의 데이터 값, 즉 15번째 값보다 낮은 것입니다. 따라서 Looker는 15번째 데이터 값 (87)을 데이터 값의 75% 보다 큰 값으로 반환합니다.

계산된 값이 정수인 경우

약간 더 복잡한 경우 Looker는 해당 위치의 데이터 값과 다음 데이터 값의 평균을 반환합니다. 이를 이해하기 위해 20개의 테스트 점수 집합을 살펴보겠습니다. 75번째 백분위수는 20 * .75=15로 식별됩니다. 즉, 15번째 위치의 데이터 값은 75번째 백분위수의 일부이고 데이터 값의 75% 이상인 값을 반환해야 합니다. Looker는 15번째 포지션 (82)과 16번째 포지션 (87)의 평균값을 반환하여 75%를 보장합니다. 이 평균 (84.5)은 데이터 값 세트에 존재하지 않지만 데이터 값의 75% 보다 큽니다.

필수 및 선택 매개변수

percentile: 키워드를 사용하여 분수 값(반환된 값 미만이어야 하는 데이터의 비율)을 지정합니다. 예를 들어 percentile: 75를 사용하여 데이터 순서대로 75번째 백분위수에 값을 지정하거나 percentile: 10를 사용하여 10번째 백분위수에 값을 반환합니다. 50번째 백분위수의 값을 찾으려면 percentile: 50를 지정하거나 중앙값 유형을 사용하면 됩니다.

type: percentile 측정의 sql 매개변수는 숫자 테이블 열, LookML 측정기준 또는 LookML 측정기준의 조합을 생성하는 유효한 SQL 표현식을 사용할 수 있습니다.

type: percentile 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

예를 들어 다음 LookML은 test_scores 측정기준에서 75번째 백분위수에 있는 값을 반환하는 test_scores_75th_percentile라는 필드를 만듭니다.

measure: test_scores_75th_percentile {
  type: percentile
  percentile: 75
  sql: ${TABLE}.test_scores ;;
}

percentile 관련 고려사항

팬아웃에 관련된 필드에 percentile를 사용하면 Looker에서 대신 percentile_distinct를 사용하려고 시도합니다. percentile_distinct를 방언에 사용할 수 없는 경우 Looker에서 오류를 반환합니다. 자세한 내용은 percentile_distinct에 지원되는 언어를 참고하세요.

percentile에 지원되는 데이터베이스 언어

Looker 프로젝트에서 percentile 유형을 지원하려면 데이터베이스 언어에서도 Looker를 지원해야 합니다. 다음 표는 최신 Looker 버전에서 percentile 유형을 지원하는 언어를 보여줍니다.

percentile_distinct

type: percentile_distinct는 특수 형식의 백분위수로, 조인에 팬아웃이 포함되는 경우 사용해야 합니다. sql_distinct_key 매개변수로 정의된 고유한 값을 기준으로 지정된 필드에서 반복되지 않은 값을 사용합니다. 측정에 sql_distinct_key 매개변수가 없으면 Looker에서 primary_key 필드를 사용하려고 시도합니다.

주문 항목과 주문 표를 조인하는 쿼리의 결과를 생각해 보세요.

주문 항목 ID 주문 ID 주문 배송
1 1 10
2 1 10
3 2 20
4 3 50
5 3 50
6 3 50
7 4 70
8 4 70
9 5 110
10 5 110

이 경우 각 주문에 여러 행이 있음을 알 수 있습니다. 각 쿼리가 여러 주문 항목에 매핑되므로 이 쿼리에는 팬아웃이 포함되었습니다. percentile_distinct는 이를 고려하여 고유한 값 10, 20, 50, 70, 110을 사용하여 백분위수 값을 찾습니다. 25번째 백분위수는 두 번째 고유 값(20)을 반환하는 반면 80번째 백분위수는 네 번째 및 다섯 번째 고유 값(90)의 평균을 반환합니다.

필수 및 선택 매개변수

percentile: 키워드를 사용하여 분수 값을 지정합니다. 예를 들어 percentile: 75를 사용하여 데이터 순서대로 75번째 백분위수에 값을 지정하거나 percentile: 10를 사용하여 10번째 백분위수에 값을 반환합니다. 50번째 백분위수에서 값을 찾으려면 median_distinct 유형을 대신 사용할 수 있습니다.

정확한 결과를 얻으려면 sql_distinct_key 매개변수를 사용하여 Looker가 각 고유 항목 (이 경우에는 각 순 주문)을 식별하는 방법을 지정합니다.

다음은 percentile_distinct를 사용하여 90번째 백분위수에 값을 반환하는 예입니다.

measure: order_shipping_90th_percentile {
  type: percentile_distinct
  percentile: 90
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

sql_distinct_key의 모든 고유한 값은 측정값의 sql 매개변수에 해당하는 하나의 값만 가져야 합니다. 즉, 위 예시는 order_id가 1인 모든 행의 order_shipping가 10이고, order_id가 2인 모든 행의 order_shipping가 20인 식입니다.

type: percentile_distinct 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

percentile_distinct 관련 고려사항

percentile_distinct를 방언에 사용할 수 없는 경우 Looker에서 오류를 반환합니다. 자세한 내용은 percentile_distinct에 지원되는 언어를 참고하세요.

percentile_distinct에 지원되는 데이터베이스 언어

Looker 프로젝트에서 percentile_distinct 유형을 지원하려면 데이터베이스 언어에서도 Looker를 지원해야 합니다. 다음 표는 최신 Looker 버전에서 percentile_distinct 유형을 지원하는 언어를 보여줍니다.

running_total

type: running_total는 열을 따라 셀의 누적 합계를 계산합니다. 행을 피봇으로 만든 경우를 제외하고는 행의 합계를 계산하는 데 사용할 수 없습니다.

type: running_total 측정의 sql 매개변수는 다른 숫자 측정값을 참조해야 합니다.

type: running_total 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

예를 들어 다음 LookML은 total_sale_price 측정값을 기반으로 cumulative_total_revenue 측정을 만듭니다.

measure: cumulative_total_revenue {
  type: running_total
  sql: ${total_sale_price} ;;
  value_format_name: usd
}

Looker UI는 다음과 같습니다.

running_total 값은 정렬 순서에 따라 다릅니다. 정렬을 변경하는 경우 쿼리를 다시 실행하여 running_total 값을 다시 계산해야 합니다. 쿼리가 피봇팅되는 경우 running_total는 열이 아닌 행 전반에서 실행됩니다. 이렇게 하지 않으려면 direction: "column"를 측정 정의에 추가합니다.

또한 running_total 측정값은 데이터베이스에서 데이터가 반환된 계산됩니다. 즉, 다른 측정값에서 running_total 측정값을 참조하면 안 됩니다. 이는 다른 시간에 계산될 수 있으므로 정확한 결과를 얻지 못할 수 있습니다. 이는 running_total 측정값을 필터링할 수 없음을 의미합니다.

string

type: string는 문자 또는 특수문자가 포함된 필드에 사용됩니다.

type: string 측정의 sql 매개변수는 문자열을 생성하는 유효한 SQL 표현식을 사용할 수 있습니다. 실제로 대부분의 SQL 집계 함수는 문자열을 반환하지 않으므로 이 유형은 거의 사용되지 않습니다. 한 가지 일반적인 예외는 MySQL의 GROUP_CONCAT 함수이지만 Looker는 이러한 사용 사례에 type: list를 제공합니다.

예를 들어 다음 LookML은 category라는 필드의 고유한 값을 결합하여 category_list 필드를 생성합니다.

measure: category_list {
  type: string
  sql: GROUP_CONCAT(${category}) ;;
}

이 예시에서는 stringtype의 기본값이므로 type: string를 생략할 수 있습니다.

sum

type: sum는 지정된 필드의 값을 더합니다. SQL의 SUM 함수와 유사합니다. 하지만 원시 SQL 작성과 달리 Looker는 쿼리의 조인에 팬아웃이 포함되어 있더라도 합계를 올바르게 계산합니다.

type: sum 측정의 sql 매개변수는 숫자 테이블 열, LookML 측정기준 또는 LookML 측정기준의 조합을 생성하는 유효한 SQL 표현식을 사용할 수 있습니다.

type: sum 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

예를 들어 다음 LookML은 sales_price 측정기준을 합산하여 total_revenue라는 필드를 만든 다음 금액 형식 ($1,234.56)으로 표시합니다.

measure: total_revenue {
  type: sum
  sql: ${sales_price} ;;
  value_format_name: usd
}

sum_distinct

type: sum_distinct은 비정규화된 데이터 세트에 사용합니다. sql_distinct_key 매개변수로 정의된 고유한 값을 기준으로 지정된 필드에 반복되지 않은 값을 더합니다.

이는 예시를 통해 더 명확하게 설명할 수 있는 고급 개념입니다. 다음과 같이 비정규화된 테이블을 생각해 보세요.

주문 항목 ID 주문 ID 주문 배송
1 1 10,000원
2 1 10,000원
3 2 20,000원
4 2 20,000원
5 2 20,000원

이 경우 각 주문에 여러 행이 있음을 알 수 있습니다. 따라서 order_shipping 열에 간단한 type: sum 측정값을 추가하면 수집된 총 배송비가 실제로 30.00이더라도 총 80.00이 됩니다.

 # Will NOT calculate the correct shipping amount
measure: total_shipping {
  type: sum
  sql: ${order_shipping} ;;
}

정확한 결과를 얻으려면 sql_distinct_key 매개변수를 사용하여 Looker에 각 고유 항목 (이 경우에는 각 순 주문)을 식별하는 방법을 설명합니다. 그러면 정확한 30.00 금액이 계산됩니다.

 # Will calculate the correct shipping amount
measure: total_shipping {
  type: sum_distinct
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

sql_distinct_key의 모든 고유한 값은 sql에 상응하는 하나의 값만 가져야 합니다. 즉, 위 예는 order_id가 1인 모든 행의 order_shipping가 10.00이고 order_id가 2인 모든 행의 order_shipping가 20.00이라는 식으로 계속 이어집니다.

type: sum_distinct 필드는 value_format 또는 value_format_name 매개변수를 사용하여 형식을 지정할 수 있습니다.

yesno

type: yesno는 참 또는 거짓을 나타내는 필드를 만듭니다. 값은 탐색 UI에 YesNo로 표시됩니다.

type: yesno 측정의 sql 매개변수는 TRUE 또는 FALSE로 평가되는 유효한 SQL 표현식을 사용합니다. 조건이 TRUE로 평가되면 사용자에게 Yes가 표시되고 그렇지 않으면 No가 표시됩니다.

type: yesno 측정값의 SQL 표현식에는 집계만 포함되어야 합니다. 즉, SQL 집계 또는 LookML 측정값 참조입니다. 집계가 아닌 LookML 측정기준 또는 SQL 표현식에 대한 참조가 포함된 yesno 필드를 만들려면 측정값이 아닌 type: yesno와 함께 차원을 사용합니다.

type: number의 측정값과 마찬가지로 type: yesno가 있는 측정은 집계를 실행하지 않으며 다른 집계를 참조합니다.

예를 들어 아래의 total_sale_price 측정값은 주문 내 주문 항목의 총 판매가의 합계입니다. is_large_total라는 두 번째 측정값은 type: yesno입니다. is_large_total 측정에는 total_sale_price 값이 $1,000보다 큰지 평가하는 sql 매개변수가 있습니다.

measure: total_sale_price {
  type: sum
  value_format_name: usd
  sql: ${sale_price} ;;
  drill_fields: [detail*]
}
measure: is_large_total {
  description: "Is order total over $1000?"
  type: yesno
  sql: ${total_sale_price} > 1000 ;;
}

다른 필드의 type: yesno 필드를 참조하려면 type: yesno 필드를 불리언으로 취급해야 합니다 (즉, 이미 true 또는 false 값을 포함하는 것처럼). 예를 들면 다음과 같습니다.

measure: is_large_total {
  description: "Is order total over $1000?"
  type: yesno
  sql: ${total_sale_price} > 1000 ;;
}
}
# This is correct
measure: reward_points {
  type: number
  sql: CASE WHEN ${is_large_total} THEN 200 ELSE 100 END ;;
}
# This is NOT correct
measure: reward_points {
  type: number
  sql: CASE WHEN ${is_large_total} = 'Yes' THEN 200 ELSE 100 END ;;
}