# 논리 함수

**• AND: 모두 참일 때 참**

1. **함수의 정의 :**
1. AND 함수는 **두 개의 논리 조건을 동시에 확인**하고, **둘 다 참일 때만 TRUE를 반환하는 함수**입니다. 하나라도 거짓이면 FALSE를 반환합니다. DAX에서 AND 함수는 && 연산자와 동일하게 작동합니다.

2. **기본 구문**
2. AND(논리_조건1, 논리_조건2)

3. **예시 코드**:
3. 예를 들어, 직원 테이블에서 각 직원의 월급이 3000 이상이고, 부서가 "영업"인 경우에만 TRUE를 반환하는 계산 열을 만들고 싶다고 가정해봅시다.
3. **방법 1: AND 함수 사용**
3. 결과 = **AND(직원[월급] >= 3000, 직원[부서] = "영업")**
3. **방법 2: && 연산자 사용**
3. 결과 = **(직원[월급] >= 3000) && (직원[부서] = "영업")**
3. 위 두 식은 **동일하게 작동**하며, **직원의 월급이 3000 이상이고 부서가 "영업"이면 TRUE**, **그렇지 않으면 FALSE를 반환**합니다.
3. 결과

![Image](https://upload.cafenono.com/image/slashpagePost/20241111/150621_HIHgoBlcSOfR60jxOi?q=80&s=1280x180&t=outside&f=webp)

     이렇게 **AND 함수는 두 조건이 모두 충족되어야 TRUE를 반환하는 데 사용**됩니다.

• **IF: 조건에 따른 값 반환**

1. **함수 정의** : 
1. IF 함수는 **특정 조건이 참인지 거짓인지에 따라 다른 값을 반환하는 함수**입니다. 엑셀의 IF 함수와 유사하게 작동합니다. 

2. **기본 구문** :
2. IF(조건, 참일 때 반환할 값, 거짓일 때 반환할 값)

3. **작동 원리** : 
3. IF 함수는 다음과 같이 작동합니다:
3. <논리_테스트>를 평가하여 TRUE 또는 FALSE 결과를 얻습니다.
3. **결과가 TRUE이면 <참일 때 값>을 반환**합니다.
3. **결과가 FALSE이면 <거짓일 때 값>을 반환**합니다.

4. **예시 코드** :
4. 판매 데이터를 분석하는 상황을 가정해보겠습니다. 만약 **판매량이 100개 이상이라면 "High"**, **그렇지 않다면 "Low"**라는 값을 반환하고 싶다면 다음과 같이 쓸 수 있습니다:
4. **Sales Category = IF(Sales[Quantity] >= 100, "High", "Low")**
4. 결과 :
4. 조건: **Sales[Quantity] >= 100 (판매량이 100 이상인지 확인)**
4. **참일 때 반환할 값: "High"**
4. **거짓일 때 반환할 값: "Low"**
4. 이 예제에서 판매량이 **150이면 "High"를 반환하고, 80이면 "Low"를 반환**합니다.

5. **요약** : 
5. IF 함수는 특히 계산 열이나 측정값을 만들 때 **데이터를 분류**하거나 **조건에 따라 다른 계산**을 수행하는 데 활용할 수 있습니다.

• **IFERROR: 오류 시 대체 값 반환**

1. **함수 정의** : 
1. IFERROR 함수는 **오류를 처리하는 데 매우 유용한 함수**입니다. 이 함수는 식에서 **오류가 발생할 경우 대체 값을 반환**하도록 해줍니다.

2. **기본 구문** :
2. IFERROR(value, value_if_error)

3. **매개 변수** :
3. value: 평가할 식 또는 값
3. value_if_error: 오류가 발생했을 때 반환할 값

4. **작동 방식** :
4. IFERROR 함수는 다음과 같이 작동합니다:
4. **첫 번째 인수(value)를 평가**합니다.
4. **오류가 없으면 해당 값을 그대로 반환**합니다.
4. **오류가 발생하면 두 번째 인수(value_if_error)를 반환**합니다.

5. **예시 코드** :
5. (1) **0으로 나누기 오류 처리**
5. **Result = IFERROR(10 / [SomeValue], 0)**
5. **[SomeValue]가 0**일 경우, **10 / 0은 오류를 발생**시킵니다. 이때 IFERROR는 오류 대신 **0을 반환**합니다.
5. **[SomeValue]가 5**라면, Result는 10 / 5, 즉 **2를 반환**합니다.
5. (2) **데이터 유효성 검사**
5. **유효한_단가 = IFERROR(
5.                          IF([단가] > 0, [단가], ERROR("단가는 0보다 커야 합니다")) ,
5.                          "잘못된 단가"
5.                           )**
5. 이 예시에서는 **단가가 0보다 큰지 확인**하고, **그렇지 않으면 오류를 발생**시킵니다. IFERROR 함수는 이 오류를 잡아내어 "잘못된 단가"라는 메시지를 반환합니다
5. 결과

![Image](https://upload.cafenono.com/image/slashpagePost/20241113/134430_ZwyrQxbK3VRz6N21PY?q=80&s=1280x180&t=outside&f=webp)

     각 행에 대한 설명:
     **1000은 0보다 크므로 그대로 반환**됩니다.
     **0은 0보다 크지 않으므로 오류가 발생하고, "잘못된 단가"가 반환**됩니다.
     **-500은 0보다 작으므로 오류가 발생하고, "잘못된 단가"가 반환**됩니다.
     **"ABC"는 숫자가 아니므로 비교 자체가 오류를 발생시키고, "잘못된 단가"가 반환**됩니다.

1. **요약** :
1. IFERROR 함수 다양한 입력 값에 대한 측정값의 동작을 한눈에 볼 수 있게 해주며, 코드의 작동 방식을 더 쉽게 이해할 수 있도록 도와줍니다.

• **NOT: 참을 거짓으로, 거짓을 참으로**

1. **함수 정의 **: 
1. NOT 함수는 **논리값을 반대로 바꾸는 함수**입니다. 즉, **TRUE 값을 FALSE로, FALSE 값을 TRUE로 변환**합니다. NOT 함수는 주로 조건을 뒤집어야 할 때 유용하게 사용할 수 있습니다.

2. **기본 구문** :
2. NOT(<논리값>)

3. **매개 변수** :
3. <논리값>: TRUE 또는 FALSE 값을 가지는 표현식

4. **예시 코드** :
4. 다음과 같은 테이블이 있다고 가정해 봅시다.

![Image](https://upload.cafenono.com/image/slashpagePost/20241113/144459_i9J3XxWR2O26mvzNB4?q=80&s=1280x180&t=outside&f=webp)

     "판매 가능 여부" 열이 TRUE인 경우 제품이 판매 가능하고, FALSE인 경우 판매 불가입니다. 
     여기서 판매 불가한 제품만 필터링하고 싶다면 NOT 함수를 사용할 수 있습니다.
     **판매 불가 여부 = NOT([판매 가능 여부])**
     위의 식은 **"판매 가능 여부"가 TRUE라면 FALSE를 반환하고, FALSE라면 TRUE를 반환**합니다. 
     이 결과로 새로운 열이 생성됩니다:

![Image](https://upload.cafenono.com/image/slashpagePost/20241113/144548_VALV87Xv54uhKzlaac?q=80&s=1280x180&t=outside&f=webp)

1. **요약** : 

     이렇게 NOT 함수는 **조건을 반전시키는 데 유용하게 사용**할 수 있습니다.

• **OR: 하나라도 참이면 참**

1. **함수 정의** :
1. OR 함수는 **여러 조건 중 하나라도 참(TRUE)인 경우 참을 반환하는 논리 함수**입니다. 최대 255개의 조건을 처리할 수 있어, **여러 조건 중에서 하나만 충족되더라도 결과가 참이 되도록** 할 때 유용하게 사용됩니다.

2. **기본 구문** :
2. OR(논리식1, 논리식2, ..., 논리식255)
2. 논리식1, 논리식2, ..., 논리식255: 평가할 조건들로, **최대 255개까지 입력**할 수 있습니다.

3. **예시 코드** :

- **기본 예시** 
- 여러 조건 중 하나라도 참이면 TRUE, 그렇지 않으면 FALSE를 반환합니다.
- **= OR(5 > 3, 10 < 2, 8 == 8)**
- 결과 :
- **5 > 3은 참이고, 10 < 2는 거짓, 8 == 8은 참**이므로 **결과는 TRUE**입니다.

- 실제 데이터에서의 예시 
- 예를 들어, 학생들의 성적 데이터를 가지고 있고, **학생이 영어, 수학, 과학, 역사 중 하나라도 70점 이상일 때 "합격"으로 표시**하고 싶다면:
- **합격 여부 = IF(OR(Students[영어] >= 70, Students[수학] >= 70, Students[과학] >= 70, Students[역사] >= 70), "합격", "불합격")**
- 학생의 **네 가지 과목 중 하나라도 70점 이상이면 "합격", 모두 조건에 해당하지 않으면 "불합격"으로 표시**됩니다.

1. 요약 :
1. 이렇게 OR 함수는 **여러 조건 중 하나만 만족해도 특정 결과를 반환**하고자 할 때 유용하게 사용할 수 있습니다.

• **SWITCH: 조건에 맞는 값 반환**

1. **함수 정의 **: 
1. SWITCH 함수는 **조건에 따라 다른 값을 반환할 수 있는 함수**입니다. 일종의 **다중 IF 함수**라고 생각할 수 있습니다. **여러 조건을 처리해야 할 때 유용하며, 코드가 간결**해집니다.

2. **기본 구문** :
2. SWITCH(<expression>, <value1>, <result1>, <value2>, <result2>, ..., <else>)

3. **매개 변수** : 
3. <expression>: 비교할 값이나 계산식.
3. <value1>, <value2>, ...: 비교할 조건값들.
3. <result1>, <result2>, ...: 조건이 맞을 때 반환할 값들.
3. <else>: 조건이 모두 일치하지 않을 때 반환할 기본값. (옵션)

4. **예시 코드** :
4. 학생의 시험 점수에 따라 학점을 부여하는 예시를 보겠습니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20241113/145948_mZ4bIJ29AUWPqg9MS5?q=80&s=1280x180&t=outside&f=webp)

     **Grade = 
     SWITCH(
         TRUE(),
         [Score] >= 90, "A",
         [Score] >= 80, "B",
         [Score] >= 70, "C",
         [Score] >= 60, "D",
         "F"
     )**
     작동 방식:
     철수: **점수 95** → Score >= 90이므로 "**A**" 반환.
     영희: **점수 82 **→ Score >= 80이므로 "**B**" 반환.
     민수: **점수 76** → Score >= 70이므로 "**C**" 반환.
     수지: **점수 89** → Score >= 80이므로 "**B**" 반환.
     지호: **점수 67** → Score >= 60이므로 "**D**" 반환.
     나영: **점수 58** → 위 조건 모두 해당하지 않으므로 "**F**" 반환.

![Image](https://upload.cafenono.com/image/slashpagePost/20241113/150032_JZWKpNkfKNxozS8ZmE?q=80&s=1280x180&t=outside&f=webp)

1. **요약** : 

     이렇게 **SWITCH 함수를 사용하면 간결한 코드로 여러 조건을 처리**할 수 있습니다.

• **TRUE: 논리값 TRUE를 반환**

1. **함수 정의** :
1. TRUE 함수는 매우 간단한 함수로, **TRUE 논리값을 반환하는 데 사용**됩니다. 이 함수는 특정 조건을 만족할 때 TRUE 값을 반환하도록 하거나 논리값을 필요로 하는 다른 함수와 함께 사용할 수 있습니다.

2. **기본 구문** :
2. TRUE()
2. **TRUE 함수는 매개변수를 받지 않고, TRUE()라고 간단하게 작성**하여 **TRUE 값을 반환**합니다.

3. **예시 코드** :
3. **TRUE 함수는 단독으로 쓰이는 경우가 거의 없으며, 다른 논리 함수나 조건문에서 활용**됩니다. 몇 가지 예시를 통해 TRUE 함수의 사용을 살펴보겠습니다.
3. (1) **단순 조건 체크**
3. **IF(TRUE(), "Yes", "No")**
3. 여기서는 **TRUE()가 TRUE 값을 반환하므로, 항상 "Yes"가 반환**됩니다.
3. (2) **특정 조건에 따라 TRUE 값을 반환**하는 예제
3. **IF([Sales Amount] > 1000, TRUE(), FALSE())**
3. 이 예제에서는** [Sales Amount]가 1000보다 클 때 TRUE 값을 반환하고, 그렇지 않으면 FALSE 값**을 반환합니다.
3. (3) **다른 논리 함수와의 결합**
3. FILTER 함수와 같은 함수에서 조건을 쉽게 설정할 때도 TRUE를 사용할 수 있습니다.
3. **CALCULATE(
3.     SUM(Sales[Sales Amount]),
3.     FILTER(Sales, TRUE())
3. )**
3. 여기서 FILTER 함수는 TRUE() 조건을 사용하므로 Sales 테이블의 모든 행을 포함하여 SUM을 계산하게 됩니다.

For the site tree, see the [root Markdown](https://slashpage.com/powerbicokr.md).
