# 숫자/집계/통계함수

**•**** ABS: 절대값 반환**

1. **함수정의 : **
1. ABS 함수는 **숫자의 절대값을 구하는 함수**입니다. 절대값이란 숫자의 부호를 제거한 값으로, **양수는 그대로 유지되고 음수는 양수로 변환**됩니다.

2. **기본 구문 :**
2. ABS(<number>)

3. **매개변수 : **
3. <number>: 절대값을 구하고자 하는 숫자입니다. 이 값은 특정 숫자, 열 이름(컬럼), 혹은 수식으로 지정할 수 있습니다.

4. **예시 코드:**
4. (1) ABS(-5)는 **5**를 반환합니다.
4. (2) ABS(3)는 그대로 **3**을 반환합니다.

5. **요약 :**
5. 즉, 숫자가 음수이든 양수이든 상관없이 **항상 0 이상의 값을 반환**해 주는 함수입니다. 
5. 데이터 분석에서 값의 크기만 필요할 때 유용하게 사용됩니다.

**• ****DIVIDE: 나누기 연산 (0으로 나눌 때 오류 방지)**

1. **함수 정의 **:
1. DIVIDE 함수는 **두 숫자를 나눌 때 사용하는 함수**로, 특히 나눗셈에서 "0으로 나누기" 오류를 방지할 수 있는 장점이 있습니다.

2. **기본 구문:**
2. DIVIDE(<Numerator>, <Denominator>, [AlternativeResult])

3. **매개 변수 **
3. **Numerator:** 나눠지는 값 (**분자**)
3. **Denominator**: 나누는 값 (**분모**)
3. AlternativeResult (선택 사항): **분모가 0일 때 반환할 값**. 이 값을 설정하지 않으면 BLANK()가 반환됩니다.

4. DIVIDE 함수의 장점:
4. **/ 연산자**를 사용하여 나눗셈을 할 수도 있지만, 그 경우 **분모가 0이 되면 오류가 발생**합니다. 반면 **DIVIDE 함수는 분모가 0이더라도 안전하게 처리**할 수 있습니다.

5. **예시 코드:**
5. (1) 기본적인 나눗셈:
5. DIVIDE(10, 2)
5. 이 결과는 **5**입니다.
5. (2) 분모가 0인 경우:
5. DIVIDE(10, 0, 0)
5. 이 경우 결과는 **0**이 됩니다. **AlternativeResult로 0을 설정했기 때문**입니다. 만약 **이 값을 설정하지 않았다면 BLANK()가 반환**됩니다.

6. **요약**
6. DIVIDE 함수는 **나눗셈을 보다 안전하게 수행**하도록 도와주는 함수입니다
6. 

**• ****INT: 정수 반환**

1. **함수 정의 :**
1. INT 함수는 **숫자 값을 정수로 변환**하는 함수입니다. **소수점 이하의 숫자를 제거**하고 **가장 가까운 아래쪽의 정수로 변환**하는 역할을 합니다.
1. 소수점이 있는 숫자를 입력하면 그 **숫자를 내림하여 정수로 만들어주는 함수**입니다.

2. **기본 구문**
2. INT(<number>)

3. **매개변수**
3. number: 정수 부분만 가져올 숫자를 입력합니다. 이 숫자는 소수점이 포함된 숫자이거나 계산식이 될 수 있습니다.

4. **예시 코드:**
4. INT(3.8) 는 **3 **을 반환 합니다.
4. INT(5.2) 는 **5 **를 반환 합니다.
4. INT(-4.7) 는** -5 **를 반환 합니다.

5. **요약 :**
5. 이처럼 **INT 함수는 소수점을 없애고 정수로 변환**할 때 유용하게 사용할 수 있습니다.

**•**** ****ROUND : 반올림 / ROUNDDOWN: 내림 / ROUNDUP : 올림  **

**• ROUND: 반올림**

1. **함수 정의 : **
1. ROUND 함수는 숫자를 **특정 소수점 자리까지 반올림**하는 함수입니다. Excel의 ROUND 함수와 비슷한 방식으로 작동합니다. 주로 숫자 데이터를 처리할 때 소수점 자릿수를 조정하거나 깔끔한 숫자 형태로 표현하고자 할 때 유용합니다.

2. **기본 구문 :**
2. ROUND(<숫자>, <소수점 자리수>)

3. **매개 변수 **
3. <숫자>: 반올림할 숫자
3. <소수점 자리수>: 반올림할 자릿수 (0이면 정수 부분만 남기고 반올림)

4. **예시 코드 :**
4. ROUND(3.14159, 2)
4. 이 코드는 숫자 3.14159를 소수점 둘째 자리까지 반올림하여 **3.14를 반환**합니다.
4. ROUND(123.456, 0)
4. 이 코드는 소수점 없이 정수로 반올림하여 **123을 반환**합니다.

5. **요약 :**
5. ROUND 함수는 **숫자를 원하는 자릿수까지 반올림해주는 함수**로, 데이터를 처리하거나 시각화할 때 깔끔하게 보이도록 할 때 많이 사용됩니다.

**• ROUNDDOWN: 내림**

1. **함수 정의 :**
1. ROUNDDOWN 함수는 **숫자를 지정한 소수점 자리까지 내림하는 함수**입니다. 즉, 반올림하지 않고 항상 소수점 아래 값을 버립니다. 이 함수는 데이터에서 정밀한 값보다 더 큰 범위로 조정하고 싶을 때 유용합니다.

2. **기본 구문 :**
2. ROUNDDOWN(<숫자>, <소수점 자리수>)

3. **매개 변수 :**
3. <숫자>: 내림할 숫자
3. <소수점 자리수>: 내림할 소수점 자리수 (0이면 정수 부분만 남김)

4. **예시 코드 :**
4. (1 )ROUNDDOWN(3.14159, 2)
4. 이 코드는 숫자 3.14159에서 소수점 둘째 자리까지만 남기고 내림하여 **3.14를 반환**합니다.
4. (2) ROUNDDOWN(123.456, 0)
4. 이 코드는 소수점 이하를 모두 버리고 **123을 반환**합니다.

5. **요약 :**
5. ROUNDDOWN 함수는 반올림 없이 **항상 내림 처리하는 함수**로, 소수점 이하를 없애거나 정수화하고 싶을 때 많이 사용됩니다.

**• ROUNDUP: 올림**

1. **함수 정의 :**
1. ROUNDUP 함수는 **숫자를 지정한 소수점 자리까지 올림하는 함수**입니다. 즉, 소수점 이하 값이 있으면 해당 자리를 무조건 올려서 처리합니다. 이를 통해 값의 크기를 항상 증가시키는 방식으로 처리합니다.

2. **기본 구문 :**
2. ROUNDUP(<숫자>, <소수점 자리수>)

3. **매개 변수 :**
3. <숫자>: 올림할 숫자
3. <소수점 자리수>: 올림할 소수점 자리수 (0이면 정수 부분만 남기고 올림)

4. **예시 코드 :**
4. (1) ROUNDUP(3.14159, 2)
4. 이 코드는 숫자 3.14159를 소수점 둘째 자리까지 올림하여 **3.15를 반환**합니다.
4. (2) ROUNDUP(123.456, 0)
4. 이 코드는 소수점 이하를 버리고 무조건 올림하여 **124를 반환**합니다.

5. **요약 :**
5. ROUNDUP 함수는 **소수점 이하 값을 무조건 올려주는 함수**로, 반올림과 다르게 항상 상향 처리하고 싶을 때 사용됩니다.

**• ****차이점 요약**** :**

**ROUND, ROUNDDOWN, ROUNDUP 함수는 숫자를 소수점 자리에서 반올림, 내림, 올림하는 함수**들입니다. 각 함수의 동작 방식에 따라 숫자를 다루는 방법이 조금씩 다릅니다.

1. **ROUND 함수**
1. • **ROUND 함수는 숫자를 반올림**합니다.
1. • 예시 구문:
1.    (1) ROUND(123.456, 2) → 결과: **123.46 (소수점 둘째 자리에서 반올림**)
1.    (2) ROUND(123.456, 0) → 결과: **123 (정수 자리에서 반올림)**

2. **ROUNDDOWN 함수**
2. • **ROUNDDOWN 함수는 무조건 내림 처리**합니다. 지정된 소수점 자리에서 해당 숫자를 버립니다.
2. • 예시 구문:
2.    (1) ROUNDDOWN(123.456, 2) → 결과: **123.45 (소수점 둘째 자리에서 내림)**
2.    (2) ROUNDDOWN(123.456, 0) → 결과: **123 (정수 자리에서 내림)**

3. **ROUNDUP 함수**
3. • **ROUNDUP 함수는 무조건 올림 처리**합니다. 지정된 소수점 자리에서 값을 올립니다.
3. • 예시 구문 :
3.    (1) ROUNDUP(123.456, 2) → 결과: **123.46 (소수점 둘째 자리에서 올림)**
3.    (2) ROUNDUP(123.456, 0) → 결과: **124 (정수 자리에서 올림)**

4. **요약**
4. • **ROUND: 반올림(5 이상 올림, 4 이하 내림)
4. • ROUNDDOWN: 무조건 내림
4. • ROUNDUP: 무조건 올림**
4. 이 세 가지 함수는 숫자를 다룰 때 원하는 방식으로 자릿수를 조정할 수 있어 매우 유용합니다.

**• AVERAGE: 평균 계산 / AVERAGEA: 평균 계산 (텍스트는 0으로) / AVERAGEX: 식을 평가한 후 평균**

DAX에서 사용하는 세 가지 평균 함수인 **AVERAGE, AVERAGEA, AVERAGEX는 모두 평균을 계산**하지만, **작동 방식과 처리하는 데이터의 유형에 따라 차이**가 있습니다. 

**• AVERAGE 함수**

1. **함수 정의 :** 
1. 지정된 열에서 **숫자 값들의 평균을 계산**합니다.

2. **특징:**
2. 숫자가 아닌 값(예: 텍스트 또는 블랭크 값)은 무시됩니다.

3. **기본 구문 : **
3. AVERAGE([column]) 

4. **예시 코드: **
4. Product 테이블의 Amount 열에 있는 숫자 값들의 평균을 계산합니다.

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

      AVERAGE(Table[Amount])를 사용하면 **10, 20, 30의 평균을 계산**합니다. 빈 값은 무시됩니다.

  5. **결과 : **
     (10 + 20 + 30) / 3 = 20

**• AVERAGEA 함수**

1. **함수 정의 :** 
1. **숫자뿐만 아니라 다른 데이터 유형도 포함하여 평균을 계산**합니다.

2. **특징 **:
2. 숫자, 텍스트, TRUE/FALSE 등의 값까지 포함하여 처리합니다.
2. **TRUE는 1로, FALSE는 0**으로 계산합니다.
2. **공란(빈셀)은 0**으로 처리합니다.
2. **텍스트 값은 0**으로 처리합니다.

3. **기본 구문: **
3. AVERAGEA([column])

4. **예시 코드: **
4. Product 테이블의 Amount 열에 있는 숫자 값뿐만 아니라 텍스트와 TRUE/FALSE 값을 포함한 전체 평균을 계산합니다.

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

      AVERAGEA(Table[Amount])를 사용하면 

      **공란은 0**으로 처리되고,

      **텍스트** **"None"**은** 0**으로 처리되며,

      **TRUE는 1, FALSE는 0**으로 처리되어 평균을 계산합니다.

1. **결과 :** 
1. (10 + 20 + 0 + 0 + 1 + 0) / 6 = 5.17

•** AVERAGEX 함수**

1. **함수 정의 :**
1. 테이블을 기반으로 식을 평가한 후 그 결과에 대한 평균을 계산합니다.

2. **특징** : 
2. **테이블을 대상으로 각 행마다 계산을 수행**한 후 **그 결과 값들의 평균**을 구합니다.
2. 사용자가 직접 계산식을 작성할 수 있습니다.

3. **기본 구문**: 
3. AVERAGEX(Table, <expression>) 

4. **예시 코드**: 
4. Product 테이블에서 각 행마다 Amount와 Quantity를 곱한 값을 계산한 후 그 값들의 평균을 계산합니다.

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

      AVERAGEX(Table, Table[Amount] * Table[Quantity])는 

      각 행에서 Amount와 Quantity를 곱한 값을 계산한 후 그 값들의 평균을 구합니다.
      각 행 계산:
      A: 10 * 2 = 20
      B: 20 * 3 = 60
      C: 30 * 4 = 120

1. **결과 :**
1. (20 + 60 + 120) / 3 = 66.67

• **차이점 요약 ****:**

1. **AVERAGE는 열의 숫자 값만을 대상으로 평균**을 계산합니다.

2. **AVERAGEA는 숫자뿐만 아니라 TRUE/FALSE 및 텍스트 값도 고려하여 평균**을 계산합니다.

3. **AVERAGEX는 사용자가 지정한 계산식을 각 행에 적용하여 그 결과의 평균**을 계산합니다.

4. 이러한 차이점으로 인해 상황에 맞게 적절한 함수를 선택하여 사용할 수 있습니다.

**• COUNT: 숫자 셀 개수 / COUNTA: 비어 있지 않은 셀 개수 / COUNTAX: 계산된 비어 있지 않은 셀 개수 / COUNTX: 식을 평가한 후 개수**

DAX 함수 중 **COUNT, COUNTA, COUNTAX, COUNTX 함수**는 모두 **데이터를 세는 데 사용**되지만, 그 **기능과 적용 방식에 약간씩 차이**가 있습니다. 

• **COUNT 함수**

1. **함수 정의 : **
1. 지정된 열에서 숫자 값이 있는 **행의 개수**를 셉니다. 텍스트나 빈 값은 무시됩니다.

2. **특징 :**
2. **숫자 값만 세기 때문에 텍스트나 빈 셀은 무시**합니다.

3. **기본 구문: **
3. COUNT([column])

4. **예시 코드 : **
4. **숫자 열에서 값이 있는 행의 개수를 알고 싶을 때** **사용**됩니다.
4. COUNT([SalesAmount])

**• COUNTA 함수**

1. **함수 정의 :**
1. 지정된 열에서 **모든 비어있지 않은 값을 셉**니다. 즉, 숫자, 텍스트, 논리 값(True/False) 등 값이 있는 모든 셀이 대상입니다.

2. **특징 :**
2. 숫자뿐만 아니라 **텍스트나 논리 값도 포함**해서, **비어있지 않은 셀의 개수를 알고 싶을 때 사용**됩니다.

3. **기본 구문 : **
3. COUNTA([column])

4. **예시 코드:**
4. COUNTA([SalesRep])
4. 숫자가 아닌 값도 포함해서 셀을 셉니다.

**• COUNTAX 함수**

1. **함수 정의 :**
1. 주어진 테이블 또는 열에 대한 **계산식을 기반으로 비어 있지 않은 값을 셉**니다. 이 함수는 테이블에서 각 행에 대해 식을 평가하고, 결과가 비어 있지 않은 행만 셉니다.

2. **특징 :** 
2. 각 행에서 **지정된 식을 먼저 계산**한 후, **그 결과 값이 있는지 여부에 따라 행을 셉**니다. (숫자, 텍스트 등 모두 포함 가능)

3. **기본 구문 :**
3. COUNTAX(<table>,<expression>)

4. **예시 코드 :**
4. SalesData 테이블의 SalesAmount 열에서 값을 계산할 때 사용할 수 있습니다. **공란(BLANK())이 아닌 값의 수를 세는 방식으로 작동**합니다.

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

     SalesAmount 열의 유효한 값(공란이 아닌 값)을 세어보겠습니다. 

     COUNTAX(SalesData, SalesData[SalesAmount])
     위 수식은 SalesAmount 열에서 공란(BLANK())이 아닌 값의 수를 반환합니다.
     계산 과정 : 
         위의 예제 데이터를 기준으로 계산을 진행하면:

         ID 1: SalesAmount = 200 (유효한 값)
         ID 2: SalesAmount = 0 (유효한 값)
         ID 3: SalesAmount = BLANK() (공란, 포함되지 않음)
         ID 4: SalesAmount = 150 (유효한 값)
         ID 5: SalesAmount = 100 (유효한 값)
         ID 6: SalesAmount = BLANK() (공란, 포함되지 않음)
         따라서, 유효한 값은 200, 0, 150, 100으로 총 4개가 됩니다.

 ** 5. 결과 : **
      결과는 4입니다.

**• COUNTX 함수**

1. **함수 정의 :**
1. 주어진 테이블 또는 열에서 숫자 값만 계산하여 셉니다. 각 **행에서 식을 계산**한 후, **그 결과가 숫자일 경우만 세어줍니다.**

2. **특징 : **
2. 산된 값이 숫자인 경우에만 행을 셀 때 사용됩니다. **COUNTAX와 달리, 계산 결과가 숫자인 경우에만 셀 수 **있습니다.

3. **기본 구문 :**
3. COUNTX(<table>,<expression>)

4. **예시 코드:**
4. COUNTX(Sales, Sales[Quantity] * Sales[UnitPrice])

**• ****차이점 요약 ****:**

1. **COUNT: 숫자 값이 있는 셀만 셈**.

2. **COUNTA: 모든 비어있지 않은 값(숫자, 텍스트 등)을 셈**.

3. **COUNTAX: 각 행에 대해 계산된 결과 값이 비어있지 않은 행을 셈 (숫자, 텍스트 등 모두 가능)**.

4. **COUNTX: 각 행에 대해 계산된 결과 값이 숫자인 행만 셈**.

5. 이 네 함수는 모두 값을 세는 역할을 하지만, 데이터의 유형과 계산 방식에 따라 적절히 선택해야 합니다.

**• ****COUNTBLANK: 빈 셀 개수**

1. **함수 정의 :**
1. COUNTBLANK 함수는 주어진 열 또는 테이블에서** 빈 셀의 개수를 세는 함수**입니다. 즉, 데이터 중에서 값이 없는 셀을 찾아 그 개수를 반환합니다. Excel에서 빈 셀을 세는 방법과 비슷하다고 생각하면 됩니다.

2. **기본 구문:**
2. 만약 어떤 테이블의 열에 빈 셀이 있다면, COUNTBLANK 함수를 사용하여 그 열에 있는 빈 셀의 개수를 계산할 수 있습니다.
2. COUNTBLANK(열이름)

3. **예시 코드 :**
3. 예를 들어, "판매량"이라는 열이 있는 테이블에서 빈 값을 세고 싶다면,
3. COUNTBLANK(판매량)
3. 이렇게 하면 "판매량" 열에 있는 빈 셀의 개수를 반환합니다.

4. **요약:**
4. COUNTBLANK 함수는 **지정된 열이나 테이블에서 빈 셀(누락된 값)의 개수를 반환**합니다

• **COUNTROWS: 행 개수**

1. **함수 정의 :**
1. COUNTROWS 함수는 **테이블에 있는 행(row)의 개수를 세는 함수**입니다. 테이블에 있는 **모든 행을 대상**으로 카운트하며, 테이블의 특정 조건을 기반으로 필터링된 경우에도 그 필터링된 행만 계산됩니다.

2. **기본 구분 :**
2. COUNTROWS(테이블)

3. **매개 변수 :**
3. 테이블: 여기에는 행의 개수를 셀 테이블을 지정합니다.

4. **예시 코드 :**
4. (1) **모든 행을 셀 때**:
4. COUNTROWS(Products)
4. 이 함수는 Products 테이블에 있는 모든 행의 개수를 반환합니다.
4. (2) **필터링된 행**만 셀 때:
4. CALCULATE(COUNTROWS(Products), Products[Category] = "Electronics")
4. 여기서는 Products 테이블에서 Category가 "Electronics"인 행의 개수만 계산합니다.

5. **요약 : **
5. COUNTROWS 함수는 **테이블의 행 개수를 쉽게 셀 수 있는 함수**입니다.

**•**** DISTINCTCOUNT: 고유 값 개수 / DISTINCTCOUNTNOBLANK: 빈 값을 제외한 고유 값 개수**

DISTINCTCOUNT 함수와 DISTINCTCOUNTNOBLANK 함수는 둘 다** 특정 열이나 집합에서 고유한 값(중복되지 않은 값)의 개수를 계산하는 함수**입니다. 그러나 이 두 함수는 **빈 값(Null 또는 빈 문자열)을 처리하는 방식에서 차이**가 있습니다.

•** DISTINCTCOUNT 함수**

1. **함수 정의 :**
1. 특정 열에서 **중복되지 않는 고유한 값의 수를 계산**합니다.

2. **빈 값 처리** :
2. DISTINCTCOUNT 함수는 **빈 값을 하나의 고유 값으로 간주하여 계산에 포함**시킵니다.

3. **예시 코드 :**
3. DISTINCTCOUNT(Table[Column])
3. 만약 Table[Column]에 [1, 2, 2, 3, (빈 값)]이라는 데이터가 있다면, 

4. **결과 **:

     DISTINCTCOUNT는 **빈 값을 포함하여 고유한 값의 개수**를 **4로 반환**합니다.

• **DISTINCTCOUNTNOBLANK 함수**

1. **함수 정의** :
1. 특정 열에서 **중복되지 않는 고유한 값의 수를 계산하되, 빈 값은 계산에서 제외**합니다.

2. **빈 값 처리** :
2. DISTINCTCOUNTNOBLANK 함수는 **빈 값을 무시하고 고유한 값만을 계산**합니다.

3. **예시 코드 :**
3. DISTINCTCOUNTNOBLANK(Table[Column])

4. **결과 :**
4. 동일한 데이터 [1, 2, 2, 3, (빈 값)]이 있을 때, DISTINCTCOUNTNOBLANK는 **빈 값을 제외**하고 **고유한 값의 개수를 3으로 반환**합니다.

• **차이점 요약****:**

1. **DISTINCTCOUNT: 빈 값(Null 또는 빈 문자열)을 하나의 고유 값으로 포함하여 계산**.

2. **DISTINCTCOUNTNOBLANK: 빈 값을 계산에서 제외하고 고유한 값만 계산**.

3. 이 차이는 데이터에 빈 값이 존재할 때 고유 값 개수 계산 방식에서 중요한 영향을 미칩니다.

**• MAX: 최대값 반환 / MAXA: 최대값 반환 (텍스트 포함) / MAXX: 식을 평가한 후 최대값**

**MAX, MAXA, MAXX 함수는 모두 최대값을 계산하는 함수**들이지만, 사**용 방식과 처리 방식에서 차이**가 있습니다. 각 함수의 정의와 특징은 다음과 같습니다.

• **MAX 함수**

1. **함수 정의**
1. 지정한 열(column)에서 숫자의 최대값을 반환합니다.

2. **특징 :**
2. 단순히 하나의 열이나 **숫자 집합에서 최대값**을 찾을 때 사용합니다. **숫자가 아닌 값은 무시**하고, 숫자 중에서 최대값을 반환합니다.

3. **기본 구문** :
3. MAX(테이블[숫자열])

4. **예시 코드** :

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

     MAX(테이블[숫자열1])
     **결과: 20**

• **MAXA 함수**

1. **함수 정의** :
1. MAX와 유사하지만 **숫자가 아닌 값도 포함하여 최대값을 반환**합니다.

2. **특징** : 
2. 숫자뿐만 아니라 텍스트 또는 TRUE/FALSE 값까지 고려하여 최대값을 구할 때 사용합니다.
2. 숫자는 그대로 계산되지만, **텍스트는 0으로 처리**됩니다.
2. **TRUE는 1, FALSE는 0으로 처리**됩니다.
2. 숫자가 아닌 값을 포함할 때 이 함수를 사용합니다.

3. **기본 구문:**
3. MAXA(테이블[열])

4. **예시 코드 :**

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

     MAXA(테이블[TRUE/FALSE])
     **결과: 1**
     설명: **TRUE는 1로, FALSE는 0으로 처리**됩니다. 따라서 **TRUE(1)가 최대값**입니다.

• **MAXX 함수**

1. **함수 정의** :
1. 각 행에 대해 **계산식을 평가한 결과의 최대값을 반환**합니다.

2. **특징** : 
2. **각 행에 대해 계산을 먼저** 한 후, 그 **계산 결과 중에서 최대값**을 찾습니다. 테이블 내 여러 열을 이용한 계산이 필요할 때 유용합니다.

3. **기본 구문**:
3. MAXX(테이블, 테이블[열1] * 테이블[열2])

4. **예시 코드** :

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

     MAXX(테이블, 테이블[숫자열1] * 테이블[숫자열2])
     결과: **240**
     설명: 각 행에 대해 숫자열1 * 숫자열2의 결과는 다음과 같습니다
         ID 1: 10 * 5 = 50
         ID 2: 15 * 7 = 105
         ID 3: 8 * 9 = 72
         ID 4: 20 * 12 = 240
         ID 5: 0 * 14 = 0
         이 계산된 값 중에서 최대값은 240입니다.

**•**** ****차이점 요약**** :**

1. **MAX: 숫자만 처리**, 열의 최대값을 구함.

2. **MAXA: 숫자 외에도 TRUE/FALSE, 텍스트 등도 처리 (TRUE는 1, FALSE는 0, 텍스트는 0으로 간주).**

3. **MAXX: 각 행마다 계산식을 적용한 후 그 결과에서 최대값**을 구함.

4. **MAX는 단순한 최대값을 구하고, MAXA는 숫자가 아닌 값도 고려하며, MAXX는 각 행마다 계산식을 통해 얻은 값 중 최대값을 반환**한다고 보면 됩니다.

**• MIN: 최소값 반환 / MINA: 최소값 반환 (텍스트 포함) / MINX: 식을 평가한 후 최소값**

**MIN, MINA, MINX 함수는 모두 최소값을 계산하는 함수**들로, 사용 방식과 처리 방식에서 차이가 있습니다. 각 함수의 정의와 특징은 다음과 같습니다.

**• MIN 함수**

1. **함수 정의 :**
1. 지정한 열(column)에서 숫자의 최소값을 반환합니다.

2. **특징** : 
2. 하나의 열이나 **숫자 집합에서 가장 작은 값을 찾을 때 사용**합니다. **숫자가 아닌 값은 무시하고, 숫자 중에서 최소값을 반환**합니다.

3. **기본 구문 **:
3. MIN(테이블[숫자열])

4. **예시 코드 :**

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

     MIN(테이블[숫자열1])
     결과: **0**
     설명: 숫자열1에서 가장 작은 값은 0입니다. 이 함수는 **숫자만 비교하여 최소값을 구합**니다.

**• MINA 함수**

1. **함수 정의 **:
1. MIN과 유사하지만 숫자가 아닌 값도 포함하여 최소값을 반환합니다.

2. **특징 : **
2. 숫자뿐만 아니라 텍스트 또는 TRUE/FALSE 값까지 고려하여 최소값을 구할 때 사용합니다.
2. 숫자는 그대로 계산되지만, **텍스트는 0으로 처리**됩니다.
2. **TRUE는 1, FALSE는 0으로 처리**됩니다.
2. **숫자가 아닌 값을 포함할 때 이 함수를 사용**합니다.

3. **기본 구문** :
3. MINA(테이블[열])

4. **예시 코드** :

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

    MINA(테이블[TRUE/FALSE])
    결과: **0**
    설명: **TRUE는 1로, FALSE는 0으로 처리됩니다. 따라서 FALSE(0)가 최소값**입니다.

**• MINX 함수**

1. **함수 정의 :**
1. 각 행에 대해 **계산식을 평가한 결과의 최소값을 반환**합니다.

2. **특징** : 
2. 테이블에서 **각 행마다 수식을 적용한 후 그 결과에서 최소값을 구하고자 할 때 사용**합니다. 각 행에 대해 계산을 먼저 한 후, 그 계산 결과 중에서 최소값을 찾습니다. 테이블 내 여러 열을 이용한 계산이 필요할 때 유용합니다.

3. **기본 구문**: 
3. MINX(테이블, 테이블[열1] * 테이블[열2])

4. **예시 코드**

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

    MINX(테이블, 테이블[숫자열1] * 테이블[숫자열2])
    결과:** 0**
    설명: 각 행에 대해 숫자열1 * 숫자열2의 결과는 다음과 같습니다:
        ID 1: 10 * 5 = 50
        ID 2: 15 * 7 = 105
        ID 3: 8 * 9 = 72
        ID 4: 20 * 12 = 240
        ID 5: 0 * 14 = 0
        이 계산된 값 중에서 최소값은 0입니다.

**• ****차이점 요약** : 

1. **MIN: 숫자만 처리**, 열의 최소값을 구함. => 예시: MIN(테이블[숫자열1]) → 최소값: 0

2. **MINA: 숫자 외에도 TRUE/FALSE, 텍스트 등을 처리** (TRUE는 1, FALSE는 0, 텍스트는 0으로 간주). => 예시: MINA(테이블[TRUE/FALSE]) → 최소값: 0 (FALSE)

3. **MINX: 각 행마다 계산식을 적용한 후 그 결과에서 최소값을 구함**. => 예시: MINX(테이블, 테이블[숫자열1] * 테이블[숫자열2]) → 최소값: 0

4. **MIN은 숫자들 중 최소값을 구하고, MINA는 숫자 외의 값도 고려하여 최소값을 구하며, MINX는 각 행마다 계산식을 적용하여 그 결과 중 최소값을 반환**하는 함수입니다.

**• PRODUCT: 곱 반환 / PRODUCTX: 식을 평가한 후 곱**

**PRODUCT 함수와 PRODUCTX 함수**는 DAX에서 **곱셈 연산을 수행**하는 함수들로, **데이터를 처리하는 방식에 차이**가 있습니다. 

**• PRODUCT 함수**

1. **함수 정의** :
1. PRODUCT 함수는 **특정 컬럼에 있는 모든 숫자 값을 곱하는 함수**입니다. 컬럼에 있는 값들을 순차적으로 곱하여 하나의 최종 결과를 반환합니다.

2. **기본 구문**:
2. PRODUCT(<Column>)

3. **예시 구문**:
3. Sales 테이블에 Amount라는 컬럼이 있다고 가정해보겠습니다. 이 컬럼의 값이 10, 20, 30이라고 할 때, PRODUCT(Sales[Amount]) 함수는 이 세 값을 곱하여 결과를 반환합니다.
3. PRODUCT(Sales[Amount])
3. Sales[Amount]의 값: 10, 20, 30

4. **결과** :
4. 10 * 20 * 30 = 6,000
4. 따라서 이 함수는 10, 20, 30의 곱인 **6,000을 반환**합니다.

**• PRODUCTX 함수**

1. **함수 정의** :
1. PRODUCTX 함수는 테이블의 **각 행에 대해 특정 계산식을 적용**한 후, 그 **계산된 값들을 곱**하는 함수입니다. 이 함수는 테이블에서 각 행마다 별도의 연산을 수행한 뒤 그 결과를 곱하는 방식으로 작동합니다.

2. **기본 구문**:
2. PRODUCTX(<Table>, <Expression>)

3. **예시 구문**:
3. Sales 테이블에 Price와 Quantity라는 두 개의 컬럼이 있다고 가정해보겠습니다. 테이블의 값은 아래와 같습니다:

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

     PRODUCTX(Sales, Sales[Price] * Sales[Quantity])
     이 함수는 각 행마다 Price와 Quantity를 곱한 후, 그 결과값을 곱합니다.
     첫 번째 행: 10 * 2 = 20
     두 번째 행: 20 * 3 = 60
     세 번째 행: 30 * 4 = 120
     이제 이 결과값들을 다시 곱합니다

 4.** 결과** : 
     20 * 60 * 120 = 144,000
     따라서 이 함수는 **144,000을 반환**합니다.

**• ****차이점 요약** :

1. **PRODUCT 함수는 특정 컬럼의 모든 값을 곱하는 단순한 곱셈 함수**입니다. 예를 들어, Amount 컬럼의 값들이 10, 20, 30일 경우, 이 함수는 10 * 20 * 30 = 6,000을 반환합니다.

2. **PRODUCTX 함수는 각 행마다 다른 계산을 적용한 후, 그 계산된 값을 곱**합니다. 예를 들어, Price와 Quantity 컬럼이 있는 테이블에서 각 행의 Price와 Quantity를 곱한 후, 그 결과를 모두 곱하여 최종 결과를 반환합니다. 예시 테이블에서는 최종 결과가 144,000이 됩니다.

3. 두 함수는 곱셈 연산을 수행하지만, **PRODUCT는 단순한 컬럼 값을 곱하는 데 사용되고, PRODUCTX는 보다 복잡한 계산식이 필요한 경우에 적합**합니다.

**• ****SUM: 합계 계산 / SUMX: 식을 평가한 후 합계**

**SUM 함수와 SUMX 함수는 모두 합계를 구하는 데 사용**되지만, 그 방식과 적용되는 상황에서 차이가 있습니다. 

**• SUM 함수**
SUM 함수는 단순하게 열(column) 내의 숫자를 모두 더하는 함수입니다. 이 함수는 단일 열의 합계를 구할 때 사용됩니다.
사용 예시
예를 들어, 아래와 같은 테이블이 있다고 가정합시다.

1. **함수 정의** : 
1. SUM 함수는 **단순하게 열(column) 내의 숫자를 모두 더하는 함수**입니다. 이 함수는 단일 열의 합계를 구할 때 사용됩니다.

2. **기본 구문** :
2. SUM(column)

3. **예시 코드** :
3. 예를 들어, 아래와 같은 테이블이 있다고 가정합시다.

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

     SUM 함수는 이 테이블의 "판매량" 열의 값을 모두 더합니다.
     Total Sales = SUM(테이블[판매량])

1. **결과** :
1. 10 + 20 + 15 = **45**

**• SUMX 함수**

1. **함수 정의** :
1. SUMX 함수는 **행 단위 계산을 수행한 후, 그 결과를 합산하는 함수**입니다. 즉, 각 행에 대해 어떤 계산식을 적용한 후 그 결과값을 더하고자 할 때 사용됩니다.

2. **기본 구문** :
2. SUMX(table, expression)

3. **예시 코드** :
3. 이번에는 아래와 같은 테이블이 있다고 가정합시다.

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

     SUMX 함수는 각 행에 대해 "판매량"과 "단가"를 곱한 후 그 결과를 더할 수 있습니다.
     Total Revenue = SUMX(테이블, 테이블[판매량] * 테이블[단가])

 4. **결과**: 
     (10 * 5) + (20 * 7) + (15 * 8) = 50 + 140 + 120 = **310**

**• ****차이점 요약** :

1. **SUM 함수는 단순 열을 더할 때 사용**됩니다. 계산 없이 열의 값들을 단순하게 합산합니다.

2. **SUMX 함수는 각 행별로 계산을 적용한 후 그 결과를 합산할 때 사용**됩니다. 즉, 계산된 값들의 합을 구할 때 적합합니다.

3. **SUM 함수는 단순한 열의 합계를 구하는 데 쓰이고, SUMX 함수는 각 행별로 계산을 수행한 후 그 계산된 값을 합산할 때 사용**됩니다.

•** MEDIAN: 중간값 반환**

1. **함수 정의 **: 
1. MEDIAN 함수는 **주어진 열이나 테이블의 값들 중에서 중간 값을 반환하는 함수**입니다. 중간 값은 데이터를 크기 순서대로 정렬했을 때 **가운데 위치한 값**입니다. 값의 개수가 **짝수**일 경우에는 가운데에 위치한 **두 값의 평균을 반환**합니다. 중간값은 데이터의 극단적인 값에 덜 민감하기 때문에 평균보다 더 정확한 중심 경향을 나타낼 수 있습니다.

2. **기본 구문 **:
2. MEDIAN(<ColumnName>)

3. **매개 변수** :
3. <ColumnName>: 중간 값을 계산할 열을 지정합니다.

4. **예시 코드**:
4. 매출 데이터가 {100,200,150,300,250} 일때, 매출의 중간 값을 구하기 위해서 MEDIAN 함수를 사용하면 다음과 같습니다.
4. MEDIAN(Sales[매출])
4. 이 함수를 실행하면 다음과 같이 값들이 정렬되고,
4. 정렬된 값: 100, 150, 200, 250, 300

5. **결과** : 
5. 가운데 값인 **200이 반환**됩니다.
5. 또한, 만약 **값이 짝수 **개라면(예: 100, 150, 200, 250), **가운데 두 값(150, 200)의 평균인 175**가 반환됩니다.

6. **요약** : 
6. MEDIAN 함수는 평균(AVERAGE)과는 달리 극단값(예: 매우 크거나 작은 값)에 영향을 덜 받기 때문에, **분포가 비대칭인 데이터에서 더 유용**할 수 있습니다.

• **RANKX: 순위 계산**

1. **함수 정의** : 
1. RANKX 함수는 주어진 데이터 테이블에서 **특정 값의 순위를 계산할 때 사용**됩니다. 주로 순위 매기기나 순위 비교를 할 때 유용합니다.

2. **기본 구문**
2. RANKX(
2.     <테이블>,
2.     <식>,
2.     [<값 비교 방식>],
2.     [<정렬 방향>],
2.     [<타이 브레이크>]
2. )

3. **매개 변수** : 
3. <테이블>: 순위를 계산할 테이블(또는 데이터 집합).
3. <식>: 순위를 계산할 기준이 되는 값.
3. <값 비교 방식>: 생략 가능. 기본적으로는 Value로 비교되며, 논리적 비교 방식 등을 설정할 수 있습니다.
3. <정렬 방향>: 기본값은 ASC(오름차순)입니다. DESC(내림차순)를 지정하면 높은 값일수록 높은 순위를 갖습니다.
3. <타이 브레이크>: 순위가 동일한 경우 어떻게 처리할지 설정하는 옵션입니다.

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

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

    학생들의 점수를 기준으로 순위를 매기고 싶다면 RANKX 함수를 다음과 같이 사용할 수 있습니다.
    RANKX(
        **ALL(학생_테이블),   -- 테이블 전체
        학생_테이블[점수],   -- 기준이 되는 값 (점수)
        ,                    -- 값 비교 방식 (기본값 사용)
        DESC                 -- 높은 점수가 높은 순위를 가지도록 내림차순 정렬**
     )
    이 함수는 각 학생의 점수를 기준으로 순위를 계산합니다. 결과는 다음과 같습니다.

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

1. **요약** :
1. RANKX 함수는 특정 기준에 따라 데이터의 순위를 계산합니다.
1. 오름차순 또는 내림차순 정렬을 설정할 수 있습니다.
1. 동일한 값을 가진 경우 동일 순위로 처리됩니다.

**참고 : 타이브레이크 방식에는 DENSE 방식과 SKIP 방식이 있습니다.**

1. **기본 방식 (SKIP)**
1. 기본 순위 계산 방식에서는, **동일한 점수에 대해 동일 순위를 부여**하고, 그 **다음 순위는 해당 순위만큼 건너뛰게** 됩니다.
1. RANKX(
1.     ALL(학생_테이블),
1.     학생_테이블[점수],
1.     ,
1.     DESC    -- 내림차순 정렬
1.  )
1. 결과는 다음과 같습니다:

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

    영희와 수지가 동일한 1위 순위를 받고, 그 다음 순위인 2위는 건너뛰고 철수가 3위가 됩니다. 

    이것이 기본적인 SKIP 방식입니다.
2. **DENSE 방식**
    DENSE 방식에서는 **동일한 값에 동일한 순위를 부여**하되, **그 다음 순위를 건너뛰지 않습니다**.
    RANKX(
         ALL(학생_테이블),
         학생_테이블[점수],
         ,
         DESC,     -- 내림차순 정렬
         DENSE     -- DENSE 방식 적용
     )
    결과는 다음과 같습니다

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

    동일한 순위를 부여한 뒤, 다음 순위는 건너뛰지 않고 바로 2위가 철수에게 부여되었습니다.

1. 요약 :
1. **SKIP 방식: 동일한 값에 동일 순위를 부여하고, 다음 순위는 건너뛰어 계산**합니다.
1. **DENSE 방식: 동일한 값에 동일 순위를 부여하고, 다음 순위는 건너뛰지 않고 연속적으로 매깁**니다.
1. DENSE 방식을 사용하면 순위가 연속적이므로, 순위를 건너뛰지 않는 방식이 필요할 때 유용합니다.
1.

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