조건에 기반한 계산된 컬럼
컬럼을 계산할 때 특정 조건의 충족 여부에 따라 표현식의 결과가 달라져야 하는 경우가 있습니다. 조건은 논리 함수 If() 또는 Case()를 사용하여 표현식에서 설정합니다.
예
다음 표현식의 의미는 아래와 같습니다.
If(([Amount]<10),"low","high")
컬럼 'Amount'의 행 값이 10보다 작은 경우 값 'low'가 결과로 반환되지만, 값이 10 이상인 경우에는 값 'high'가 반환됩니다.
즉, 아래와 같습니다.
다른 말로 하면 If() 함수는 행을 두 그룹으로 나눕니다. 하나의 그룹은 지정된 조건이 true인('low'를 결과로 반환) 행으로 구성되며, 다른 그룹은 지정된 조건이 false인('high'를 결과로 반환) 행으로 구성됩니다.
반환될 값이 집계된 값인 경우 두 그룹은 따로 처리됩니다. 아래 테이블에서 다음 표현식이 추가된 예제를 볼 수 있습니다.
If(([Amount]<10),Avg([Amount]),Avg([Amount]))
이 표현식에는 평균 집계가 포함되어 있습니다. 이 경우 두 그룹 모두에 동일한 집계가 지정되었지만 서로 다른 집계를 사용할 수도 있습니다.
행 값이 10 미만인 경우, 즉 'true' 그룹의 경우에는 평균 6이 반환되며((5+7)/2), 'false' 그룹의 경우에는 평균 13((14+10+15)/3)이 반환됩니다.
if() 함수를 and 또는 or와 결합하여 사용할 수도 있습니다. 예를 들어
If(([Customer age]<20) and ([Gender]="Female"),"girl","other")
표현식은 아래의 추가된 계산된 컬럼으로 나타납니다.
Case()
조건 결과가 true 및 false로 제한되지 않는 표현식을 작성하려면 case() 함수를 사용할 수 있습니다. Case()는 두 가지 형식으로 사용할 수 있으며 아래에서 예제를 사용하여 모두 설명합니다.
예제 1
아래의 책과 비디오 가격이 각각 10%와 50% 할인되어 가격 목록을 업데이트해야 한다고 가정하겠습니다.
제품 유형에 따라 할인율이 다르기 때문에 case() 표현식을 사용하여 새 가격을 계산합니다.
case [Type] when "Book" then [Price]*0.9 when "Video" then [Price]*0.5 else [Price] end
여기서 case()는 'Type'을 표현식의 when 옵션 각각과 비교합니다.
예제 2
두 번째 예제에서는 case()를 사용하여 학생들의 시험 결과를 평가합니다. 평가 수준에는 Failed(총계가 100 미만), Passed 및 Excellent(총계가 160 이상)의 세 가지 수준이 있습니다.
이 예제의 Case()는 각 when 옵션마다 독립적으로 조건을 평가합니다.
case when ([Test A] + [Test B])<100 then "Failed" when ([Test A] + [Test B])>=160 then "Excellent" else "Passed" end
이 방법을 사용하면 예제 1에서보다 복잡한 조건을 구현할 수 있습니다.
결과 계산된 컬럼은 아래와 같습니다.