본문 바로가기
AI

AppSheet 함수 및 명령어 1(용도별 정리)

by 에버리치60 2025. 7. 5.

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. 입고 시 재고 '현재수량' 업데이트

입고 기록이 추가될 때마다 해당 제품의 재고를 증가시키는 방법입니다.

순서:

  1. '입고' 테이블에 'After Save' 자동화(Automation) 또는 액션 설정:
    • '입고' 테이블에 새로운 행이 추가되거나 기존 행이 업데이트될 때(특히 '입고수량'이 변경될 때) 실행되도록 설정합니다.
  2. 업데이트할 '재고' 행 찾기 (Find the related '재고' row):
    • '입고' 테이블의 '입고_제품_ID' 컬럼을 사용하여 '재고' 테이블에서 일치하는 '제품_ID'를 가진 행을 찾습니다.
    • 이것은 보통 LOOKUP() 또는 SELECT() 함수를 사용하여 수행됩니다. 예를 들어, LOOKUP([입고_제품_ID], "재고", "제품_ID", "_RowNumber") 와 같이 해당 재고 행의 키를 가져올 수 있습니다. (AppSheet에서는 Ref 컬럼이 자동으로 관련 행에 대한 참조를 제공합니다.)
  3. '재고' 테이블의 '현재수량' 업데이트 액션 정의:
    • 찾은 '재고' 행의 '현재수량' 컬럼 값을 업데이트합니다.
    • 새로운 '현재수량' 값 계산: [기존 재고 현재수량] + [입고 테이블의 입고수량]
      • 예시 표현식: [_THISROW].[Related 재고].[현재수량] + [_THISROW].[입고수량] (만약 '입고' 테이블에 '재고' 테이블로의 직접적인 Ref 역참조가 있다면)
      • 또는 LOOKUP([_THISROW].[입고_제품_ID], "재고", "제품_ID", "현재수량") + [_THISROW].[입고수량]
  4. 자동화/액션 설정 상세 (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는 컨텍스트를 이해합니다.)

2. 출고 시 재고 '현재수량' 업데이트

출고 기록이 추가될 때마다 해당 제품의 재고를 감소시키는 방법입니다.

순서:

  1. '출고' 테이블에 'After Save' 자동화(Automation) 또는 액션 설정:
    • '출고' 테이블에 새로운 행이 추가되거나 기존 행이 업데이트될 때(특히 '출고수량'이 변경될 때) 실행되도록 설정합니다.
  2. 업데이트할 '재고' 행 찾기 (Find the related '재고' row):
    • '출고' 테이블의 '출고_제품_ID' 컬럼을 사용하여 '재고' 테이블에서 일치하는 '제품_ID'를 가진 행을 찾습니다.
    • 예시: LOOKUP([출고_제품_ID], "재고", "제품_ID", "_RowNumber")
  3. '재고' 테이블의 '현재수량' 업데이트 액션 정의:
    • 찾은 '재고' 행의 '현재수량' 컬럼 값을 업데이트합니다.
    • 새로운 '현재수량' 값 계산: [기존 재고 현재수량] - [출고 테이블의 출고수량]
      • 예시 표현식: [_THISROW].[Related 재고].[현재수량] - [_THISROW].[출고수량]
      • 또는 LOOKUP([_THISROW].[출고_제품_ID], "재고", "제품_ID", "현재수량") - [_THISROW].[출고수량]
  4. 자동화/액션 설정 상세 (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는 컨텍스트를 이해합니다.)

중요 고려사항:

  • 참조(Ref) 컬럼의 설정: '출고' 테이블의 '출고_제품_ID'와 '입고' 테이블의 '입고_제품_ID'가 '재고' 테이블의 '제품_ID'를 제대로 참조(Ref)하도록 설정되어 있어야 합니다. 이 설정이 올바르면 AppSheet와 같은 도구에서 관련 데이터를 쉽게 가져올 수 있습니다.
  • 음수 재고 방지 (출고 시): 출고 시 재고가 음수가 되는 것을 방지하려면, 출고 자동화에 [현재수량] >= [_THISROW].[출고수량]과 같은 조건을 추가하는 것이 좋습니다. 만약 조건이 충족되지 않으면 출고를 막거나 경고 메시지를 표시할 수 있습니다.
  • 초기 재고 설정: 모든 제품은 '재고' 테이블에 초기 '현재수량'이 설정되어 있어야 합니다.
  • 오류 처리 및 로깅: 실시간 시스템에서는 오류 발생 시를 대비한 처리(예: 재고 업데이트 실패 시 알림) 및 변경 내역 로깅 기능도 고려할 수 있습니다.
  • 복수 수량 처리: 만약 한 번에 여러 종류의 제품을 입고/출고하는 경우가 있다면, 이 자동화는 각 제품별로 개별적으로 적용되어야 합니다.

이 지침을 따르면 '입고' 및 '출고' 데이터를 관리하면서 '재고' 테이블의 '현재수량'을 자동으로 최신 상태로 유지할 수 있습니다. 사용하시는 특정 플랫폼(예: AppSheet, Glide, Airtable 등)에 따라 세부적인 설정 방법은 약간 다를 수 있으나, 기본 원리는 동일합니다.

 

 

 

<별예>
재고 테이블에서
FILTER("재고", ([제품_ID] = [_THISROW].[입고_제품_ID]))

주어진 표현식 FILTER("재고", ([제품_ID] = [_THISROW].[입고_제품_ID]))은 AppSheet에서 매우 흔하게 사용되는 패턴입니다.

이 표현식의 의미와 작동 방식은 다음과 같습니다:

  1. FILTER("재고", ...):
    • '재고'라는 이름의 테이블을 대상으로 합니다.
    • 이 함수는 첫 번째 인수로 지정된 테이블("재고")에서 두 번째 인수로 지정된 조건을 만족하는 모든 행(row)들의 리스트를 반환합니다.
    • 반환되는 각 행은 AppSheet 내부적으로 해당 행의 REF(참조) 값으로 표현됩니다.
  2. ([제품_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].[입고수량]