Quiver 수식 문법
Quiver의 수식은 수학 표현식을 계산하거나 필터 조건을 표현합니다. 사용할 카드에 맞는 최종 출력형을 선택합니다.
값과 참조
| 값 또는 참조 | 표현과 의미 |
|---|---|
| 숫자 | 6, 3.14159, -128과 과학 표기법 1.602e-19 |
| 플롯 및 카드 | $A로 해당 ID를 참조. $A + $B는 두 입력의 합 |
| Boolean | true, false. 비교와 논리 연산에 사용 |
| 문자열 | "high"처럼 따옴표로 표현 |
| 시간 참조 | secondsSince와 millisecondsSince에 ISO-8601 기준 시각 전달 |
| NaN | null 같은 정의되지 않았거나 표현할 수 없는 숫자 값 |
예를 들어 다음 식은 UTC 기준 1970년 1월 1일부터의 초 단위 시간 참조입니다.
secondsSince("1970-01-01T00:00:00+00:00")
millisecondsSince는 같은 방식으로 밀리초를 사용합니다. Transform table의 열은 @column으로 참조합니다.
출력형과 Boolean 조건
일반 수식의 최종 결과는 숫자 또는 문자열 중 한 유형을 일관되게 반환해야 합니다. 같은 수식이 어떤 평가에서는 숫자를, 다른 평가에서는 문자열을 반환하는 구성은 허용하지 않습니다. 비교와 논리 연산의 중간값에는 Boolean을 사용할 수 있습니다.
숫자 출력이 필요한 카드에서 참과 거짓을 표현할 때는 다음처럼 1과 0으로 변환합니다.
$A > 0 ? 1 : 0
문자열 출력이 허용되는 문맥에서는 다음과 같이 표현합니다.
$A > 0 ? "true" : "false"
Transform table의 Boolean formula는 Boolean 열을 만드는 전용 변환이므로 @column > 0 같은 Boolean 결과를 직접 사용합니다. 이 변환은 표준 Quiver 카드로는 제공되지 않습니다. Numeric formula와 Time series formula 등은 각각의 카드 출력 계약을 따릅니다.
연산자
숫자 연산은 +, -, *, /와 나머지 연산 %를 지원하며 결과는 배정밀도 숫자입니다. 10 % 7은 3입니다. 괄호로 우선순위를 지정할 수 있습니다.
거듭제곱에는 pow(a, b)를 사용합니다. ^는 거듭제곱이 아닌 비트 XOR입니다.
비교 연산은 ==, !=, >, <, >=, <=이며 Boolean 결과를 만듭니다. 문자열도 ==와 !=로 비교합니다.
논리 AND는 &&, OR는 ||, NOT은 !입니다. 숫자에 대한 비트 연산은 AND &, OR |, XOR ^, NOT ~를 지원합니다. <<는 왼쪽 이동, >>는 부호를 유지하는 산술 오른쪽 이동, >>>는 0으로 채우는 논리 오른쪽 이동입니다.
내장 수학 함수
| 함수 | 의미 |
|---|---|
| abs(a) | 절댓값 |
| acos(a) | 역코사인 |
| acosh(a) | 역쌍곡코사인 |
| asin(a) | 역사인 |
| asinh(a) | 역쌍곡사인 |
| atan(a) | 역탄젠트 |
| atanh(a) | 역쌍곡탄젠트 |
| atan2(a, b) | 사분면을 구분하는 역탄젠트. a는 y좌표, b는 x좌표 |
| cbrt(a) | 세제곱근 |
| ceil(a) | 올림 |
| cos(a) | 코사인 |
| cosh(a) | 쌍곡코사인 |
| exp(a) | 자연 지수 함수 |
| floor(a) | 내림 |
| isfinite(a) | 무한대도 NaN도 아니면 true |
| isnan(a) | NaN이면 true |
| ln(a) | 자연로그 |
| log10(a) | 밑이 10인 로그 |
| log2(a) | 밑이 2인 로그 |
| max(a, b, ...) | 입력값들의 최댓값 |
| min(a, b, ...) | 입력값들의 최솟값 |
| pow(a, b) | a의 b제곱 |
| round(a) | 가장 가까운 정수로 반올림 |
| signum(a) | 부호 함수 |
| sin(a) | 사인 |
| sinh(a) | 쌍곡사인 |
| sqrt(a) | 제곱근 |
| tan(a) | 탄젠트 |
| tanh(a) | 쌍곡탄젠트 |
조건과 결측값
조건 ? 참일 때 값 : 거짓일 때 값 형태의 조건 연산자를 사용합니다.
$A > 0 ? $B * 10 : $C * 10
각 시각에서 $A가 양수이면 $B * 10, 그렇지 않으면 $C * 10을 선택합니다.
숫자형 M 열이 NaN일 때 K 열로 대체하려면 NaN 검사 함수를 사용합니다.
isnan(@M) ? @K : @M
return으로 평가를 일찍 끝내고 값을 반환할 수 있습니다. skip은 해당 평가에서 값을 반환하지 않도록 하며, 시계열에서는 점을 제외하는 데 사용할 수 있습니다.
변수 선언과 대입
var로 변수를 선언하고 =로 값을 대입합니다. 변수는 배정밀도 숫자, Boolean 또는 문자열을 담을 수 있습니다. 지수 표기의 e와 E는 같은 방식으로 해석합니다.
var a = 6;
var b = 3.14159;
var c = 1.602e-19;
var d = 1.602E-19;
var boolean_example = true;
boolean_example = false;
var string_example = "high";
string_example
이 예제의 최종 결과는 문자열 high입니다. 이후의 각 예제는 독립적인 변수 범위를 사용합니다.
숫자 식
var a = 2 + 2;
a = 3 * 7;
a = 3.5 / 7;
a = 10 % 7;
a
a는 차례로 4, 21, 0.5와 3이 되고 마지막 값을 반환합니다.
var a = 5 + 3 * 2;
var b = (5 + 3) * 2;
b
a는 11, b는 16입니다.
복합 대입 연산도 사용할 수 있습니다.
var a = 10;
a *= 2;
a += 3;
a -= 5;
a /= 3;
a %= 5;
a
a는 20, 23, 18, 6과 1을 거쳐 최종적으로 1을 반환합니다.
Boolean과 문자열 비교
숫자 비교로 만든 Boolean은 논리 연산으로 조합하거나 !로 반전합니다. 문자열도 같음과 다름을 비교할 수 있습니다.
var a = "high";
var b = "low";
var c = a == a;
var d = a != b;
(c && d) ? "true" : "false"
c와 d는 모두 true이며 최종 결과는 문자열 true입니다.