Ifelse - 아마존 QuickSight

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

Ifelse

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

구문

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

인수

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

IF 표현식

true 또는 true가 아닌 것으로 평가되는 표현식입니다. 이것은 address1과 같은 필드 이름, 'Unknown'과 같은 리터럴 값 또는 toString(salesAmount)과 같은 또 다른 함수일 수 있습니다. 예를 들면, isNotNull(FieldName)입니다.

if인수에 OR 연산자를 여러 개 AND 사용하는 경우 명령문을 괄호로 묶어 처리 순서를 식별하십시오. 예를 들어, 다음 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 인수와 동일해야 합니다.

반환 타입

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

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

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

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

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 를 사용하여 여러 표현식을 비교하여 워싱턴 또는 오리건주의 상위 고객을 NOT 특별 프로모션과 태그 (10건 이상 주문한 고객) 를 태그합니다. 아무 값도 반환되지 않으면 값 '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")

이전 예제는 다음 예와 같이 단순화할 수 있습니다. 다음 예제에서는 테스트된 값이 리터럴 목록에 있는 모든 행의 새 열에 ifelsein을(를) 사용하여 값을 만듭니다. ifelsenotIn을(를) 사용할 수 있습니다.

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

작성자는 리터럴 목록을 다중값 파라미터에 저장하여 in 또는 notIn 함수에서 사용할 수 있습니다. 다음 예제는 리터럴 목록이 두 개의 다중값 파라미터에 저장된다는 점을 제외하면 이전 예제와 동일합니다.

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

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

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

다음 예제에서는 값이 아닌 첫 번째 NULL 값을 coalesce 반환하는 데 를 사용하여 NULL 값을 테스트합니다. 날짜 NULL 필드에서 a의 의미를 기억할 필요 없이 읽기 쉬운 설명을 대신 사용할 수 있습니다. 연결 해제 날짜가 인 경우 예시에서는 일시 중지 날짜를 반환합니다. 단, 둘 다 그렇지 않은 경우에는 예외입니다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를 사용할 수 있습니다.

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

    locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) and locate('Georgia, Alabama, South Carolina, Louisiana',{State})
  3. locate 함수는 TRUE 또는 FALSE 대신 숫자를 반환하지만 ifelse에는 TRUE/FALSE Boolean 값이 필요합니다. 이 문제를 해결하기 위해 locate의 결과를 숫자와 비교할 수 있습니다. 상태가 목록에 있는 경우 반환 값은 0보다 큽니다.

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

      locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
    2. 해당 리전이 있는 경우 특정 리전(이 경우에는 북동부 리전)으로 라벨을 붙이세요.

      /*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast',
  4. 목록에 없는 주가 있고 하나의 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'
  5. 이 모든 내용을 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),

    두 버전 모두 정확합니다. 어떤 버전을 선택하든 팀원들과 가장 잘 맞아야 쉽게 유지 관리할 수 있습니다. 모든 옵션이 같으면 가장 간단한 것을 선택하세요.