

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Ifelse
<a name="ifelse-function"></a>

`ifelse`는 *if*, *then* 표현식 쌍을 평가해 true로 평가된 첫 번째 *if* 인수에 대한 *then* 인수의 값을 반환합니다. true로 평가되는 *if* 인수가 없으면 *else* 인수의 값이 반환됩니다.

## 구문
<a name="ifelse-function-syntax"></a>

```
ifelse(if-expression-1, then-expression-1 [, if-expression-n, then-expression-n ...], else-expression)
```

## 인수
<a name="ifelse-function-arguments"></a>

`ifelse`은(는) 한 개 이상의 if, then 표현식 쌍 한 개 이상과 else 인수 표현식에 대한 단 한 개의 표현식을 요구합니다.

 IF 표현식   
true 또는 true가 아닌 것으로 평가되는 표현식입니다. 이것은 **address1**과 같은 필드 이름, **'Unknown'**과 같은 리터럴 값 또는 `toString(salesAmount)`과 같은 또 다른 함수일 수 있습니다. 예를 들면, `isNotNull(FieldName)`입니다.  
`if` 인수에서 AND 및 OR 연산자를 여러 개 사용하는 경우 명령문을 괄호로 묶어 처리 순서를 정할 수 있습니다. 예를 들어, 다음 `if` 인수는 1월, 2월 또는 5월과 2000년이 포함된 레코드를 반환합니다.  

```
ifelse((month = 5 OR month < 3) AND year = 2000, 'yes', 'no')
```
다음`if` 인수는 동일한 연산자를 사용하지만 5월과 임의 연도 혹은 1월 또는 2월과 2000년이 포함된 레코드를 반환합니다.  

```
ifelse(month = 5 OR (month < 3 AND year = 2000), 'yes', 'no')
```

 THEN 표현식   
true로 평가되는 *if* 인수가 있는 경우 반환하는 표현식입니다. 이것은 **address1**과 같은 필드 이름, **'Unknown'**과 같은 리터럴 값 또는 다른 함수에 대한 호출일 수 있습니다. 이 표현식의 데이터 유형은 `then` 인수 및 `else` 인수와 동일해야 합니다.

 ELSE 표현식   
true로 평가되는 *if* 인수가 없는 경우 반환하는 표현식입니다. 이것은 **address1**과 같은 필드 이름, **'Unknown'**과 같은 리터럴 값 또는 `toString(salesAmount)`과 같은 또 다른 함수일 수 있습니다. 이 표현식의 데이터 유형은 모든 `then` 인수와 동일해야 합니다.

## 반환 타입
<a name="ifelse-function-return-type"></a>

`ifelse`은(는) then 표현식의 값과 동일한 데이터 유형의 값을 반환합니다. then 표현식과 else 표현식이 반환되는 모든 데이터는 동일한 데이터 유형이거나 동일한 데이터 유형으로 변환되어야 합니다.

## 예제
<a name="ifelse-function-example"></a>

다음 예제에서는 `country` 필드의 별칭 열을 생성합니다.

```
ifelse(country = "United States", "US", country = "China", "CN", country = "India", "IN", "Others") 
```

리터럴 목록을 기준으로 필드의 각 값을 평가하고 첫 번째로 일치하는 값에 해당하는 결과를 반환하는 사용 사례의 경우 작업을 단순화하기 위해 함수 전환을 사용하는 것이 좋습니다. 이전 예제는 [https://docs.aws.amazon.com/quicksight/latest/user/switch-function.html](https://docs.aws.amazon.com/quicksight/latest/user/switch-function.html)을(를) 사용하여 다음 문장으로 다시 작성할 수 있습니다.

```
switch(country,"United States","US","China","CN","India","IN","Others")
```

다음 예에서는 고객당 매출을 사람이 읽을 수 있는 수준으로 분류합니다.

```
ifelse(salesPerCustomer < 1000, “VERY_LOW”, salesPerCustomer < 10000, “LOW”, salesPerCustomer < 100000, “MEDIUM”, “HIGH”)
```

다음 예에서는 AND, OR, NOT을 사용하여 조건 연산자를 사용하는 여러 표현식을 비교하여 10회 이상 주문한 워싱턴 또는 오리건 비거주(NOT) 최우수 고객을 태깅합니다. 아무 값도 반환되지 않으면 값 `'n/a'`이(가) 사용됩니다.

```
ifelse(( (NOT (State = 'WA' OR State =  'OR')) AND Orders > 10),  'Special Promotion XYZ',  'n/a')
```

다음 예시에서는 OR만 사용하여 각 `country`에 해당하는 대륙 이름이 포함된 새 열을 생성합니다.

```
ifelse(country = "United States" OR country = "Canada", "North America", country = "China" OR country = "India" OR country = "Japan", "Asia", "Others")
```

이전 예제는 다음 예와 같이 단순화할 수 있습니다. 다음 예제에서는 테스트된 값이 리터럴 목록에 있는 모든 행의 새 열에 `ifelse` 및 [https://docs.aws.amazon.com/quicksight/latest/user/in-function.html](https://docs.aws.amazon.com/quicksight/latest/user/in-function.html)을(를) 사용하여 값을 만듭니다. `ifelse` 및 [https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html](https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html)을(를) 사용할 수 있습니다.

```
ifelse(in(country,["United States", "Canada"]), "North America", in(country,["China","Japan","India"]),"Asia","Others")
```

작성자는 리터럴 목록을 다중값 파라미터에 저장하여 [https://docs.aws.amazon.com/quicksight/latest/user/in-function.html](https://docs.aws.amazon.com/quicksight/latest/user/in-function.html) 또는 [https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html](https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html) 함수에서 사용할 수 있습니다. 다음 예제는 리터럴 목록이 두 개의 다중값 파라미터에 저장된다는 점을 제외하면 이전 예제와 동일합니다.

```
ifelse(in(country,${NorthAmericaCountryParam}), "North America", in(country,${AsiaCountryParam}),"Asia", "Others") 
```

다음 예에서는 총 매출을 기준으로 판매 레코드에 그룹을 할당합니다. between의 각 `if-then` 구문의 구조는 현재 계산된 필드 표현식에서는 작동하지 않는 키워드인 betone의 동작을 모방합니다. 예를 들어 비교 결과 `salesTotal >= 0 AND salesTotal < 500`은 SQL 비교 `salesTotal between 0 and 499`와(과) 동일한 값을 반환합니다.

```
ifelse(salesTotal >= 0 AND salesTotal < 500, 'Group 1', salesTotal >= 500 AND salesTotal < 1000, 'Group 2', 'Group 3')
```

다음 예제에서는 `coalesce`을(를) 사용하여 NULL이 아닌 첫 번째 값을 반환하여 NULL 값을 테스트합니다. 날짜 필드에서 NULL의 의미를 기억할 필요 없이 읽을 수 있는 설명을 대신 사용할 수 있습니다. 연결 해제 날짜가 NULL인 경우 이 예제에서는 일시 중지 날짜를 반환합니다. 단, 둘 다 NULL인 경우는 예외입니다. 그러면 `coalesce(DiscoDate, SuspendDate, '12/31/2491')`에서 `'12/31/2491'`을(를) 반환합니다. 반환 값은 다른 데이터 유형과 일치해야 합니다. 이 날짜는 특이한 값처럼 보일 수 있지만 25세기의 날짜는 데이터 마트에서 가장 높은 날짜로 정의되는 “시간의 끝”을 합리적으로 시뮬레이션합니다.

```
ifelse (  (coalesce(DiscoDate, SuspendDate, '12/31/2491') = '12/31/2491'),  'Active subscriber', 'Inactive subscriber')
```

다음은 코드를 모두 하나의 긴 줄로 압축할 필요가 없다는 것을 보여주기 위해 좀 더 읽기 쉬운 형식으로 더 복잡한 예를 보여줍니다. 이 예시에서는 설문조사 결과의 가치를 여러 번 비교할 수 있습니다. 이 필드의 잠재적 NULL 값을 처리하고 허용 가능한 두 범위를 분류합니다. 또한 추가 테스트가 필요한 범위 하나와 유효하지 않은 범위 범위를 (벗어남)에 레이블을 지정합니다. 나머지 모든 값에 대해서는 `else` 조건을 적용하고 해당 행의 날짜로부터 3년 후 재테스트가 필요한 것으로 행에 레이블을 지정합니다.

```
ifelse
( 
    isNull({SurveyResult}), 'Untested',  
    {SurveyResult}=1, 'Range 1', 
    {SurveyResult}=2, 'Range 2', 
    {SurveyResult}=3, 'Need more testing',
    {SurveyResult}=99, 'Out of Range',
    concat  
    (
        'Retest by ', 
        toString    
        (
           addDateTime(3, "YYYY", {Date}) 
        )
    )
)
```

다음 예시에서는 “수동으로” 만든 리전 이름을 주 그룹에 할당합니다. 또한 공백과 주석을 `/* */`에 감싸서 사용하여 코드를 더 쉽게 유지 관리할 수 있도록 합니다.

```
ifelse 
(    /* NE REGION*/
     locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0,
    'Northeast',

     /* SE REGION*/
     locate('Georgia, Alabama, South Carolina, Louisiana',{State}) > 0,
    'Southeast',

    'Other Region'
)
```

리전 태깅의 로직은 다음과 같이 분류됩니다.

1. 다음과 같이 각 리전에 대해 원하는 주를 나열하고, 각 목록을 따옴표로 묶어 각 목록을 문자열로 만듭니다.
   + `'New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire'`
   + `'Georgia, Alabama, South Carolina, Louisiana'`
   + 원하는 경우 세트를 더 추가하거나 국가, 도시, 지방 또는 What3Words를 사용할 수 있습니다.

1. 다음과 같이 목록에서 `State`(각 행의) 값을 찾을 수 있는지 확인합니다. 예를 들어 목록에서 주를 찾으면 `locate` 함수를 사용하여 0이 아닌 값을 반환합니다.

   ```
   locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) 
   
   and
   
   locate('Georgia, Alabama, South Carolina, Louisiana',{State})
   ```

1. `locate` 함수는 `TRUE` 또는 `FALSE` 대신 숫자를 반환하지만 `ifelse`에는 `TRUE`/`FALSE` Boolean 값이 필요합니다. 이 문제를 해결하기 위해 `locate`의 결과를 숫자와 비교할 수 있습니다. 상태가 목록에 있는 경우 반환 값은 0보다 큽니다.

   1. 상태가 존재하는지 물어보십시오.

      ```
      locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
      ```

   1. 해당 리전이 있는 경우 특정 리전(이 경우에는 북동부 리전)으로 라벨을 붙이세요.

      ```
      /*The if expression:*/     locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0,
      /*The then expression:*/   'Northeast',
      ```

1. 목록에 없는 주가 있고 하나의 `else` 표현식만 `ifelse`에 필요하기 때문에 남은 주에 대한 레이블로 `'Other Region'`을(를) 제공합니다.

   ```
   /*The if expression:*/     locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0,
   /*The then expression:*/   'Northeast',
   /*The else expression:*/   'Other Region'
   ```

1. 이 모든 내용을 `ifelse( )` 함수에 포함시켜 최종 버전을 구합니다. 다음 예시에서는 원본에 있던 남동부 리전의 주를 제외합니다. *`<insert more regions here>`* 태그 대신 다시 추가할 수 있습니다.

   더 많은 리전을 추가하려는 경우 두 줄의 사본을 더 만들고 용도에 맞게 주 목록을 변경할 수 있습니다. 리전 이름을 자신에게 맞는 이름으로 변경하고 필드 이름을 `State`에서 필요한 이름으로 변경할 수 있습니다.

   ```
   ifelse 
   (
   /*The if expression:*/     locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0,
   /*The then expression:*/   'Northeast',
   
   /*<insert more regions here>*/
   
   /*The else expression:*/   'Other Region'
   )
   ```
**참고**  
if 표현식의 초기 비교를 수행하는 다른 방법도 있습니다. 예를 들어 “이 목록에서 빠지지 않은 주는 무엇입니까?” 라는 질문을 던진다고 가정해 보겠습니다. 대신 “목록에 있는 주는 어디입니까?” 이렇게 하면 다르게 표현할 수 있습니다. 다음과 같이 locate 문을 0과 비교하여 목록에서 누락된 값을 찾은 다음 NOT 연산자를 사용하여 해당 값을 “누락되지 않음”으로 분류할 수 있습니다.  

   ```
   /*The if expression:*/      NOT (locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) = 0),
   ```
두 버전 모두 정확합니다. 어떤 버전을 선택하든 팀원들과 가장 잘 맞아야 쉽게 유지 관리할 수 있습니다. 모든 옵션이 같으면 가장 간단한 것을 선택하세요.