
AppSheet 함수 및 명령어 (용도별 정리)
1. 데이터 선택 및 필터링 (Data Selection & Filtering)
- SELECT(table[column], condition):
- condition을 만족하는 table의 column 값들로 이루어진 리스트를 반환합니다.
- 예시: SELECT(Products[Product Name], [Price] > 100) (가격이 100을 초과하는 제품명 리스트)
- FILTER(table, condition):
- condition을 만족하는 table의 행(rows) 전체를 리스트로 반환합니다. (각 행은 REF 값으로 표현됨)
- 예시: FILTER(Orders, [OrderDate] = TODAY()) (오늘 날짜의 모든 주문 행)
- LOOKUP(value, lookup_table, lookup_column, return_column):
- lookup_table에서 lookup_column에 value와 일치하는 첫 번째 행을 찾아, 해당 행의 return_column 값을 반환합니다.
- 예시: LOOKUP([ProductID], "Products", "ID", "ProductName") (ProductID에 해당하는 제품명 찾기)
- REF_ROWS(table, column):
- table에서 현재 행을 참조하는 모든 행의 리스트를 반환합니다. 주로 부모-자식 관계에서 자식 테이블의 행을 가져올 때 사용됩니다.
- 예시: REF_ROWS("OrderDetails", "OrderID") (현재 주문에 연결된 모든 주문 상세 내역)
- IN(value, list) / CONTAINS(list, value):
- list 안에 value가 포함되어 있는지 확인합니다 (TRUE/FALSE).
- 예시: IN([Status], {"Pending", "Approved"})
- ISBLANK(value) / ISNOTBLANK(value):
- value가 비어있는지(NULL) 아닌지 확인합니다 (TRUE/FALSE).
- AND(condition1, condition2, ...) / OR(condition1, condition2, ...) / NOT(condition):
- 논리 연산자. 여러 조건을 조합할 때 사용합니다.
2. 날짜 및 시간 함수 (Date & Time Functions)
- TODAY(): 현재 날짜를 반환합니다.
- NOW(): 현재 날짜와 시간을 반환합니다.
- HOUR(datetime), MINUTE(datetime), SECOND(datetime): 지정된 날짜/시간 값에서 시, 분, 초를 추출합니다.
- YEAR(date), MONTH(date), DAY(date): 지정된 날짜 값에서 연, 월, 일을 추출합니다.
- EOMONTH(date, months): 지정된 날짜로부터 몇 개월 후의 월말 날짜를 반환합니다.
- WORKDAY(start_date, num_days): start_date로부터 num_days만큼의 영업일 후 날짜를 반환합니다.
- DATETIME_VALUE(date_text): 텍스트를 날짜/시간 값으로 변환합니다.
- DATE_VALUE(date_text): 텍스트를 날짜 값으로 변환합니다.
- TIME_VALUE(time_text): 텍스트를 시간 값으로 변환합니다.
- 날짜/시간 간 연산: 두 날짜/시간 값 간의 뺄셈은 시간 간격(일, 시간 등)을 반환합니다.
3. 텍스트 조작 함수 (Text Manipulation Functions)
- CONCATENATE(text1, text2, ...) 또는 & 연산자: 여러 텍스트를 결합합니다.
- 예시: CONCATENATE([FirstName], " ", [LastName]) 또는 [FirstName] & " " & [LastName]
- LEFT(text, num_chars) / RIGHT(text, num_chars) / MID(text, start, num_chars):
- 텍스트의 왼쪽, 오른쪽, 중간에서 특정 문자 수를 추출합니다.
- LEN(text): 텍스트의 길이를 반환합니다.
- FIND(find_text, within_text): within_text에서 find_text가 시작하는 위치(숫자)를 반환합니다. 없으면 0을 반환합니다.
- SUBSTITUTE(text, old_text, new_text): text에서 old_text를 new_text로 바꿉니다.
- UPPER(text) / LOWER(text): 텍스트를 대문자/소문자로 변환합니다.
- TRIM(text): 텍스트의 앞뒤 공백을 제거합니다.
- UNIQUEID(): 새 행을 추가할 때 고유 ID를 생성하는 데 주로 사용됩니다.
4. 수학 및 통계 함수 (Math & Statistical Functions)
- SUM(list) / AVERAGE(list) / MIN(list) / MAX(list):
- 숫자 리스트의 합계, 평균, 최소값, 최대값을 계산합니다.
- 예시: SUM(SELECT(OrderDetails[Price], [OrderID] = [_THISROW].[ID]))
- COUNT(list): 리스트의 항목 수를 반환합니다.
- ROUND(number, num_digits): 숫자를 반올림합니다.
- CEILING(number) / FLOOR(number): 숫자를 올림/내림합니다.
- ABS(number): 숫자의 절댓값을 반환합니다.
- POWER(base, exponent): 거듭제곱을 계산합니다.
5. 리스트 및 배열 함수 (List & Array Functions)
- LIST(value1, value2, ...): 지정된 값들로 리스트를 생성합니다.
- SPLIT(text, delimiter): delimiter를 기준으로 텍스트를 분리하여 리스트를 생성합니다.
- TOP(list, num_items): 리스트의 시작부터 num_items만큼의 항목을 반환합니다.
- INDEX(list, position): 리스트의 특정 position에 있는 항목을 반환합니다. (1부터 시작)
- UNIQUE(list): 리스트에서 중복을 제거한 유니크한 값들만 반환합니다.
- SORT(list, ASC/DESC) / ORDERBY(list, sort_column, ASC/DESC, ...):
- list를 정렬합니다. ORDERBY는 복합 정렬에 유용합니다.
- 예시: ORDERBY(Employees, [LastName], TRUE, [FirstName], TRUE)
- ANY(list): 리스트에서 임의의 단일 값을 반환합니다. 주로 TOP(..., 1)과 함께 사용하여 단일 값을 추출할 때 사용됩니다.
6. 조건부 로직 (Conditional Logic)
- IF(condition, value_if_true, value_if_false):
- condition이 참이면 value_if_true를, 거짓이면 value_if_false를 반환합니다.
- 예시: IF([Status] = "Completed", "Green", "Red")
- SWITCH(expression, value1, result1, [value2, result2, ...], [default_result]):
- expression의 값에 따라 다른 결과를 반환합니다. 여러 IF 문을 중첩하는 대신 깔끔하게 사용할 수 있습니다.
- 예시: SWITCH([Category], "A", "Type A", "B", "Type B", "Other")
7. 기타 유용한 함수 및 컨텍스트 변수
- _THISROW: 현재 보고 있는 또는 작업 중인 행 전체를 참조합니다.
- 예시: [_THISROW].[ProductName] (현재 행의 ProductName 컬럼 값)
- USEREMAIL(): 현재 로그인한 사용자의 이메일 주소를 반환합니다.
- USERNAME(): 현재 로그인한 사용자의 이름을 반환합니다 (AppSheet 계정 설정에 따름).
- CONTEXT("VIEW"): 현재 보고 있는 뷰의 이름을 반환합니다.
- CONTEXT("DEVICE"): 현재 앱이 실행되는 디바이스의 종류(Mobile, Tablet, Desktop)를 반환합니다.
- IS_EDIT() / IS_FORM() / IS_DETAIL() / IS_TABLE():
- 현재 앱의 뷰 유형이 편집 폼, 상세 뷰, 테이블 뷰 등인지 확인합니다 (TRUE/FALSE). 주로 Show if 조건에 사용됩니다.
함수 사용 시 일반적인 규칙:
- 대괄호 []: 컬럼 이름을 참조할 때 사용합니다. 예: [ProductName]
- 이중 인용 부호 "": 텍스트 리터럴(고정된 텍스트)을 나타낼 때 사용합니다. 예: "Hello"
- 중괄호 {}: 리스트를 나타낼 때 사용합니다. 예: {"Apple", "Banana"}
- 데이터 타입 일치: 함수의 인수는 해당 함수가 요구하는 데이터 타입(텍스트, 숫자, 날짜 등)과 일치해야 합니다.
이 목록은 AppSheet에서 가장 일반적으로 사용되는 함수들을 정리한 것이며, 더 많은 함수들이 AppSheet의 공식 문서에 자세히 설명되어 있습니다. 특정 기능을 구현하고자 할 때 이 목록을 참조하면 도움이 될 것입니다.
예시)
입고 테이블:
- _RowNumber (Number)
- 입고_기록_ID (Text, 기본 키)
- 입고일자 (Date)
- 후원자명 (Name)
- 입고_제품_ID (Ref) - '재고' 테이블의 '제품_ID'를 참조
- 입고수량 (Number)
- 현재입고잔고 (Number)
- Related 출고s (List)
- 단위 (Text)
- 단가 (Number)
- 사진 (Image)
출고 테이블:
- _RowNumber (Number)
- 출고_기록_ID (Text, 기본 키)
- 출고일자 (Date)
- 출고_제품_ID (Ref) - '재고' 테이블의 '제품_ID'를 참조
- 사용내역 (LongText)
- 사용자(결연자) (Text)
- 출고수량 (Number)
- 출고연결입고ID (Ref)
- 서명 (Signature)
- 단위 (Text)
- 단가 (Number)
현재 주어진 정보에 따르면 '재고', '출고', '입고' 테이블이 있습니다. 각 테이블의 컬럼은 다음과 같습니다:
재고 테이블:
- _RowNumber (Number)
- 제품_ID (Text, 기본 키)
- 제품명 (Text)
- 사진 (Image)
- 단위 (Text)
- 현재수량 (Number)
- 단가 (Number)
- 총입고량 (Number)
- Related 출고s (List)
- Related 입고s (List)
주어진 테이블 구조를 바탕으로 제품 입고 및 출고 시 '재고' 테이블의 '현재수량'을 자동으로 업데이트하는 방법을 설명해 드리겠습니다. AppSheet와 같은 노코드/로우코드 플랫폼을 사용한다고 가정하고 설명합니다.
핵심 개념:
- Actions (액션): 특정 조건이 충족되거나 사용자가 버튼을 클릭할 때 실행되는 자동화된 작업입니다.
- Automations (자동화) / Bots (봇): 테이블 변경(추가, 업데이트, 삭제)이 발생했을 때 자동으로 실행되는 워크플로우입니다.
- Expressions (표현식): 데이터를 계산하거나 특정 조건을 확인하는 데 사용되는 함수와 연산자의 조합입니다.
1. 입고 시 재고 '현재수량' 업데이트
입고 기록이 추가될 때마다 해당 제품의 재고를 증가시키는 방법입니다.
순서:
- '입고' 테이블에 'After Save' 자동화(Automation) 또는 액션 설정:
- '입고' 테이블에 새로운 행이 추가되거나 기존 행이 업데이트될 때(특히 '입고수량'이 변경될 때) 실행되도록 설정합니다.
- 업데이트할 '재고' 행 찾기 (Find the related '재고' row):
- '입고' 테이블의 '입고_제품_ID' 컬럼을 사용하여 '재고' 테이블에서 일치하는 '제품_ID'를 가진 행을 찾습니다.
- 이것은 보통 LOOKUP() 또는 SELECT() 함수를 사용하여 수행됩니다. 예를 들어, LOOKUP([입고_제품_ID], "재고", "제품_ID", "_RowNumber") 와 같이 해당 재고 행의 키를 가져올 수 있습니다. (AppSheet에서는 Ref 컬럼이 자동으로 관련 행에 대한 참조를 제공합니다.)
- '재고' 테이블의 '현재수량' 업데이트 액션 정의:
- 찾은 '재고' 행의 '현재수량' 컬럼 값을 업데이트합니다.
- 새로운 '현재수량' 값 계산: [기존 재고 현재수량] + [입고 테이블의 입고수량]
- 예시 표현식: [_THISROW].[Related 재고].[현재수량] + [_THISROW].[입고수량] (만약 '입고' 테이블에 '재고' 테이블로의 직접적인 Ref 역참조가 있다면)
- 또는 LOOKUP([_THISROW].[입고_제품_ID], "재고", "제품_ID", "현재수량") + [_THISROW].[입고수량]
- 자동화/액션 설정 상세 (AppSheet 예시):
- Automation (봇) 사용:
- Event (이벤트): '입고' 테이블에 대한 Adds only 또는 Adds and Updates 이벤트.
- Condition (조건): (선택 사항) 특정 조건에서만 업데이트하고 싶을 경우. (예: ISNOTBLANK([입고수량]))
- Steps (단계):
- Data: Set values in some columns of some rows 액션 추가.
- Target table (대상 테이블): 재고
- Rows to change (변경할 행): FILTER("재고", ([제품_ID] = [_THISROW].[입고_제품_ID])) 또는 [_THISROW].[입고_제품_ID] (Ref 컬럼이 자동으로 작동한다면).
- Set these columns (설정할 컬럼):
- 현재수량: [현재수량] + [_THISROW].[입고수량] (여기서 첫 번째 [현재수량]은 재고 테이블의 현재수량입니다. AppSheet는 컨텍스트를 이해합니다.)
- Automation (봇) 사용:
2. 출고 시 재고 '현재수량' 업데이트
출고 기록이 추가될 때마다 해당 제품의 재고를 감소시키는 방법입니다.
순서:
- '출고' 테이블에 'After Save' 자동화(Automation) 또는 액션 설정:
- '출고' 테이블에 새로운 행이 추가되거나 기존 행이 업데이트될 때(특히 '출고수량'이 변경될 때) 실행되도록 설정합니다.
- 업데이트할 '재고' 행 찾기 (Find the related '재고' row):
- '출고' 테이블의 '출고_제품_ID' 컬럼을 사용하여 '재고' 테이블에서 일치하는 '제품_ID'를 가진 행을 찾습니다.
- 예시: LOOKUP([출고_제품_ID], "재고", "제품_ID", "_RowNumber")
- '재고' 테이블의 '현재수량' 업데이트 액션 정의:
- 찾은 '재고' 행의 '현재수량' 컬럼 값을 업데이트합니다.
- 새로운 '현재수량' 값 계산: [기존 재고 현재수량] - [출고 테이블의 출고수량]
- 예시 표현식: [_THISROW].[Related 재고].[현재수량] - [_THISROW].[출고수량]
- 또는 LOOKUP([_THISROW].[출고_제품_ID], "재고", "제품_ID", "현재수량") - [_THISROW].[출고수량]
- 자동화/액션 설정 상세 (AppSheet 예시):
- Automation (봇) 사용:
- Event (이벤트): '출고' 테이블에 대한 Adds only 또는 Adds and Updates 이벤트.
- Condition (조건): (선택 사항) 특정 조건에서만 업데이트하고 싶을 경우. (예: ISNOTBLANK([출고수량]))
- Steps (단계):
- Data: Set values in some columns of some rows 액션 추가.
- Target table (대상 테이블): 재고
- Rows to change (변경할 행): FILTER("재고", ([제품_ID] = [_THISROW].[출고_제품_ID])) 또는 [_THISROW].[출고_제품_ID].
- Set these columns (설정할 컬럼):
- 현재수량: [현재수량] - [_THISROW].[출고수량] (여기서 첫 번째 [현재수량]은 재고 테이블의 현재수량입니다. AppSheet는 컨텍스트를 이해합니다.)
- Automation (봇) 사용:
중요 고려사항:
- 참조(Ref) 컬럼의 설정: '출고' 테이블의 '출고_제품_ID'와 '입고' 테이블의 '입고_제품_ID'가 '재고' 테이블의 '제품_ID'를 제대로 참조(Ref)하도록 설정되어 있어야 합니다. 이 설정이 올바르면 AppSheet와 같은 도구에서 관련 데이터를 쉽게 가져올 수 있습니다.
- 음수 재고 방지 (출고 시): 출고 시 재고가 음수가 되는 것을 방지하려면, 출고 자동화에 [현재수량] >= [_THISROW].[출고수량]과 같은 조건을 추가하는 것이 좋습니다. 만약 조건이 충족되지 않으면 출고를 막거나 경고 메시지를 표시할 수 있습니다.
- 초기 재고 설정: 모든 제품은 '재고' 테이블에 초기 '현재수량'이 설정되어 있어야 합니다.
- 오류 처리 및 로깅: 실시간 시스템에서는 오류 발생 시를 대비한 처리(예: 재고 업데이트 실패 시 알림) 및 변경 내역 로깅 기능도 고려할 수 있습니다.
- 복수 수량 처리: 만약 한 번에 여러 종류의 제품을 입고/출고하는 경우가 있다면, 이 자동화는 각 제품별로 개별적으로 적용되어야 합니다.
이 지침을 따르면 '입고' 및 '출고' 데이터를 관리하면서 '재고' 테이블의 '현재수량'을 자동으로 최신 상태로 유지할 수 있습니다. 사용하시는 특정 플랫폼(예: AppSheet, Glide, Airtable 등)에 따라 세부적인 설정 방법은 약간 다를 수 있으나, 기본 원리는 동일합니다.
<별예>
재고 테이블에서
FILTER("재고", ([제품_ID] = [_THISROW].[입고_제품_ID]))
주어진 표현식 FILTER("재고", ([제품_ID] = [_THISROW].[입고_제품_ID]))은 AppSheet에서 매우 흔하게 사용되는 패턴입니다.
이 표현식의 의미와 작동 방식은 다음과 같습니다:
- FILTER("재고", ...):
- '재고'라는 이름의 테이블을 대상으로 합니다.
- 이 함수는 첫 번째 인수로 지정된 테이블("재고")에서 두 번째 인수로 지정된 조건을 만족하는 모든 행(row)들의 리스트를 반환합니다.
- 반환되는 각 행은 AppSheet 내부적으로 해당 행의 REF(참조) 값으로 표현됩니다.
- ([제품_ID] = [_THISROW].[입고_제품_ID]):
- 이것은 필터링을 위한 조건 부분입니다.
- [제품_ID]: FILTER 함수가 현재 "재고" 테이블의 각 행을 평가할 때, 해당 재고 테이블 행의 '제품_ID' 컬럼 값을 나타냅니다.
- _THISROW: 이 표현식이 사용되는 현재 컨텍스트의 행을 나타냅니다. (예: 만약 이 표현식이 '입고' 테이블의 한 행에서 실행된다면, _THISROW는 그 '입고' 테이블의 현재 행을 의미합니다.)
- [_THISROW].[입고_제품_ID]: _THISROW가 가리키는 행 (예: '입고' 테이블의 현재 행)의 '입고_제품_ID' 컬럼 값을 나타냅니다.
이 FILTER 표현식은 "재고" 테이블에서 제품_ID가 현재 컨텍스트의 행(예: 현재 입고되는 제품)의 입고_제품_ID와 정확히 일치하는 모든 재고 행을 찾아 그 리스트를 반환합니다.
간단히 말해, 이 코드는 "지금 처리하고 있는 입고/출고 기록에 있는 제품 ID와 동일한 제품 ID를 가진 재고 항목을 찾아줘!" 라고 AppSheet에게 지시하는 것입니다.
라스트입고ID
ANY(TOP(ORDERBY(
SELECT(입고[입고_기록_ID], [입고_제품_ID] = [_THISROW].[제품_ID]),
[입고일자], TRUE, [_ROWNUMBER], TRUE
), 1))
현재수량 = [현재수량] + [라스트입고ID].[입고수량]
총입고량 = [총입고량] + [라스트입고ID].[입고수량]
'AI' 카테고리의 다른 글
| AppSheet 함수 목록 (5) | 2025.08.04 |
|---|---|
| 객실관리 앱시트 (12) | 2025.07.10 |
| 구글 제미나이(Gemini) 이런 기능이.. (11) | 2025.06.26 |
| 나만의 무료 코드 AI 에이전트, 제미나이 CLI 활용법 (5) | 2025.06.26 |
| 멀티모델 AI, 사회복지 현장에 왜 필요할까요? (4) | 2025.06.24 |