표현식으로 커스텀 지표 설정
오른쪽에서 필드를 드래그하고 집계 방식을 선택하는 방법 외에도, 커스텀 지표를 직접 추가할 수 있습니다.
BI 대시보드를 편집하는 동안에는 커스텀 지표의 데이터 결과가 표시되지 않으며, 미리보기에서 결과를 확인할 수 있습니다. 미리보기에 대한 자세한 내용은 미리보기, 임시 저장 및 게시를 참고하십시오
분석 시나리오에 따라 현재 언어(예: Trino)에서 지원하는 집계 함수로 필드 표현식을 작성할 수 있습니다. 아래에서는 Trino를 예로 들어 자주 쓰는 함수를 소개합니다. 게시하기 전에 로직이 올바른지 확인하십시오. 표현식에 오류가 있으면 조회 시 오류가 발생합니다.
필드 표현식이 최종적으로 생성하는 데이터 결과는 숫자 타입이어야 한다는 점에 유의하십시오. 결과가 숫자 타입이 아닌 커스텀 지표는 -로 표시됩니다.
기본 집계 함수
일반 지표와 같은 집계 방식을 사용할 수 있습니다
| 함수 | 설명 |
|---|---|
| count(x) | 카운트, null 값은 제외됩니다 |
| count(distinct x) | 중복 제거 횟수, null 값은 제외됩니다 |
| avg(x) | 평균값, 숫자 타입 필드만 지원 |
| sum(x) | 합계, 숫자 타입 필드만 지원 |
| max(x) | 최댓값, 숫자 타입 필드만 지원 |
| min(x) | 최솟값, 숫자 타입 필드만 지원 |
위의 집계 함수 외에도 다음 집계 함수를 사용할 수 있습니다
| 함수 | 설명 |
|---|---|
| count(*) | 카운트, count(x)와 달리 빈 행도 포함됩니다 |
| max_by(x,y) | 입력값 중 y의 최댓값과 연관된 x의 값 |
| min_by(x,y) | 입력값 중 y의 최솟값과 연관된 x의 값 |
| approx_distinct(x) | 근사 중복 제거, count(distinct x)와 4‰의 오차가 있습니다 |
자세한 내용은 Aggregate functions를 참고하십시오
집계 중 필터링
집계 함수를 사용할 때 FILTER와 WHERE 절로 표현한 조건을 함께 사용하여 집계 처리에서 행을 제외할 수 있습니다
데이터가 다음과 같다고 가정합니다
| channel | pay_amount |
|---|---|
| iOS | 648 |
| Android | 68 |
커스텀 지표 두 개를 만들어 행을 열로 변환할 수 있습니다
-- iOS 채널의 결제 금액
sum("pay_amount") filter(where "channel" = 'iOS')
-- Android 채널의 결제 금액
sum("pay_amount") filter(where "channel" = 'Android')
사칙 연산
필드 표현식에서 사칙 연산 기호와 구체적인 숫자를 사용하여, 비즈니스 시나리오에 맞게 결제율, ARPU 등 수식 유형의 지표를 만들 수 있습니다
| Operator | 설명 |
|---|---|
| + | 덧셈 |
| - | 뺄셈 |
| * | 곱셈 |
| / | 나눗셈 |
Trino에서 필드 타입이 int 또는 bigint이고 나눗셈 결과에 소수를 남기려면, 표현식에서 먼저 cast(필드 as double)로 변환한 뒤 계산해야 한다는 점에 유의하십시오. 사칙 연산의 항 중 하나라도 null이면 최종 결과도 null이 되므로 미리 처리하십시오
위의 Operator 외에도 다음 함수를 사용할 수 있습니다
| 함수 | 설명 |
|---|---|
| abs(x) | 절대값 |
| ceiling(x) | x를 가장 가까운 정수로 올림하여 반환합니다 |
| floor(x) | x를 가장 가까운 정수로 내림하여 반환합니다 |
| approx_distinct(x) | 근사 중복 제거, count(distinct x)와 약 4‰의 오차가 있습니다 |
자세한 내용은 Mathematical functions and operators를 참고하십시오
조건 표현식
커스텀 지표에서 조건 표현식을 함께 사용하여 원하는 지표 결과를 얻을 수 있습니다
| 함수 | 설명 |
|---|---|
CASE expression WHEN value THEN result [ WHEN ... ] [ ELSE result ] END | 위에서 아래로 조건을 판단하여 처음으로 충족되는 조건의 결과를 반환하며, 모두 충족되지 않으면 else의 결과를 반환합니다 |
| if(condition, true_value, false_value) | 조건을 판단하여 참인지 거짓인지에 따라 다른 결과를 반환할 수 있습니다 |
| coalesce(value1, value2[, ...]) | null이 아닌 첫 번째 값을 반환하며, null이 나오지 않도록 할 때 사용할 수 있습니다 |
자세한 내용은 Conditional expressions를 참고하십시오
윈도우 함수
구문: 함수 OVER (PARTITION BY 파티션 필드 ORDER BY 정렬 필드)
주의: 윈도우 함수를 사용할 때 관련된 파티션 필드나 정렬 필드는 집계 함수이거나 group by에 사용된 필드여야 합니다(must be an aggregate expression or appear in GROUP BY clause)
BI 대시보드에서는 선택한 차원을 기준으로 group by를 수행하며, 차원에 순서대로 group_0, group_1 … 과 같은 별칭을 붙입니다. 파티션 필드나 정렬 필드에는 이 이름을 사용해야 합니다
자세한 내용은 Window functions를 참고하십시오
집계 함수
모든 집계 함수는 OVER 절을 추가하여 윈도우 함수로 사용할 수 있습니다
데이터가 다음과 같다고 가정합니다
| user | channel | pay_amount |
|---|---|---|
| a | iOS | 648 |
| b | Android | 68 |
| c | Android | 6 |
| d | Android | 128 |
최종적으로 얻으려는 결과는 다음과 같습니다
| user | channel | channel 내 결제 금액 비율 |
|---|---|---|
| a | iOS | 648 |
| b | Android | 68 / (68 + 6 + 128) |
| c | Android | 6 / (68 + 6 + 128) |
| d | Android | 128 / (68 + 6 + 128) |
user와 channel을 차원으로 드래그하고 커스텀 지표를 하나 만들면 됩니다
sum("pay_amount")/ sum("pay_amount") over(partition by "group_1")
순위 함수
| 함수 | 설명 |
|---|---|
| rank() | 값 그룹에서 값의 순위를 반환합니다. 순위는 해당 행 앞에 있는, 동순위가 아닌 행의 수에 1을 더한 값입니다 |
| dense_rank() | 값 그룹에서 값의 순위를 반환합니다 |
| row_number() | 각 행에 대해 고유한 연속 번호를 반환합니다 |
값 함수
| 함수 | 설명 |
|---|---|
| first_value(x) | 윈도우의 첫 번째 값을 반환합니다 |
| last_value(x) | 윈도우의 마지막 값을 반환합니다 |
| nth_value(x, offset) | 윈도우 시작 위치에서 지정한 offset의 값을 반환합니다. offset은 1부터 시작하며 임의의 스칼라 표현식일 수 있습니다. 비어 있거나 윈도우보다 크면 null을 반환합니다 |
| lead(x[, offset[, default_value]]) | 윈도우에서 현재 행 다음 offset번째 행의 값을 반환합니다. 임의의 스칼라 표현식일 수 있으며 기본값은 1, 즉 다음 행입니다. 비어 있으면 오류가 발생하고, 윈도우보다 크면 default_value를 반환하며, 지정하지 않으면 null을 반환합니다 |
| lag(x[, offset[, default_value]]) | 윈도우에서 현재 행 이전 offset번째 행의 값을 반환합니다. 임의의 스칼라 표현식일 수 있으며 기본값은 1, 즉 이전 행입니다. 비어 있으면 오류가 발생하고, 윈도우보다 크면 default_value를 반환하며, 지정하지 않으면 null을 반환합니다 |
자주 묻는 질문
Q: 설정한 커스텀 지표의 데이터가 표시되지 않는 이유는 무엇입니까?
A: 표현식 설정에 다음과 같은 오류가 없는지 확인하십시오
- 필드는 구문 규칙을 따라야 합니다. SR 구문이면 ``로 감싸고, Trino 구문이면 ""로 감싸십시오
- 표현식이 생성하는 지표 결과는 숫자 타입이어야 합니다. max(텍스트 필드) 같은 함수로 숫자가 아닌 결과를 얻으면 표시할 수 없습니다
Q: 조회 시 오류가 발생하는 이유는 무엇입니까?
A: 표현식 설정에 다음과 같은 오류가 없는지 확인하십시오
- 존재하지 않는 필드를 사용함
- 표현식이 불완전함(예: 괄호 누락 등)
- 지원하지 않는 함수를 사용했거나, 집계 함수 없이 필드를 직접 사용함
Q: 차원 필드도 커스텀할 수 있습니까?
A: 현재는 지원하지 않습니다. 워크시트의 SQL 문을 수정하여 새 차원 필드를 추가할 수 있습니다

