Power BI와 DAX를 사용하여 동적 절단 평균 계산하는 방법
Source: Dev.to

왜 절단 평균이 필요한가
데이터 분석에서 표준 AVERAGE 함수는 기본적인 도구이지만, 중요한 약점이 있습니다: 이상치에 매우 민감하게 왜곡될 수 있습니다. 높거나 낮은 단일 극단값 하나만으로도 전체 결과가 왜곡되어 데이터의 실제 중심 경향을 잘못 나타낼 수 있습니다.
이때 절단 평균이 필수적입니다. 계산에서 가장 작고 큰 값의 지정된 비율을 제외함으로써 평균의 보다 견고한 측정을 제공합니다.
현대 Power BI 모델에는 내장된 TRIMMEAN 함수가 있지만, 오래된 Analysis Services (SSAS) 모델에 대한 라이브 연결을 사용할 경우 이 함수가 종종 제공되지 않습니다. 아래 DAX 패턴은 이 기능을 재현하며, 보고서의 모든 슬라이서와 필터에 완전히 동적으로 반응합니다.
동적 절단 평균을 위한 DAX 솔루션
이 측정값은 하위 10 %와 상위 10 % 값을 제거한 뒤 남은 80 %를 평균 내어 20 % 절단 평균을 계산합니다.
이 코드를 New Measure 수식 입력줄에 바로 붙여넣을 수 있습니다.
Trimmed Mean (20%) =
VAR TargetTable = 'FactTable'
VAR TargetColumn = 'FactTable'[MeasureColumn]
VAR LowerPercentile = 0.10 // Defines the bottom 10% to trim
VAR UpperPercentile = 0.90 // Defines the top 10% to trim (1.0 - 0.10)
// 1. Find the value at the 10th percentile
VAR MinThreshold =
PERCENTILEX.INC(
FILTER(
TargetTable,
NOT( ISBLANK( TargetColumn ) )
),
TargetColumn,
LowerPercentile
)
// 2. Find the value at the 90th percentile
VAR MaxThreshold =
PERCENTILEX.INC(
FILTER(
TargetTable,
NOT( ISBLANK( TargetColumn ) )
),
TargetColumn,
UpperPercentile
)
// 3. Calculate the average, including only values between the thresholds
RETURN
CALCULATE(
AVERAGEX(
FILTER(
TargetTable,
TargetColumn >= MinThreshold &&
TargetColumn <= MaxThreshold
),
TargetColumn
)
)
DAX 논리 분해
수식은 세 가지 뚜렷한 단계로 작동하며, 모두 현재 필터 컨텍스트 내에서 실행됩니다(예: 사용자가 선택한 모든 슬라이서).
1. 핵심 변수 정의
- TargetTable 및 TargetColumn – 테이블 및 열 이름을 변수에 할당하여 깔끔하고 재사용 가능한 코드를 작성합니다. 모델에 맞는 열로
'FactTable'[MeasureColumn]을(를) 교체하십시오. - LowerPercentile / UpperPercentile – 경계값을 정의합니다.
0.10과0.90은 각각 하위 10 %와 상위 10 %를 잘라냅니다. 양쪽 끝에서 각각 5 %씩(전체 10 % 트림)를 잘라내려면0.05와0.95를 사용하십시오.
2. 백분위수 임계값 찾기
- MinThreshold 및 MaxThreshold – 백분위수 경계에 해당하는 실제 값을 저장합니다.
- PERCENTILEX.INC – 반복자로 사용되어 먼저 테이블을 FILTER 할 수 있게 합니다.
- FILTER(…, NOT(ISBLANK(…))) – 대상 열이 비어 있지 않은 행에 대해서만 백분위수를 계산하도록 하여
BLANK()값이 계산을 왜곡하는 것을 방지합니다.
그 결과 MinThreshold는 현재 표시된 데이터의 10번째 백분위수 값(예: 4.5)을, MaxThreshold는 90번째 백분위수 값(예: 88.2)을 보유합니다.
3. 최종 평균 계산
- RETURN CALCULATE(…) – 측정값을 동적으로 만들어 슬라이서나 시각화에 적용된 모든 필터를 존중합니다.
- AVERAGEX(FILTER(…)) – 필터링된 테이블을 반복하면서 트림 기준을 만족하는 행에 대해
TargetColumn의 단순 평균을 계산합니다. - 내부 FILTER는
TargetColumn이 ≥ MinThreshold AND ≤ MaxThreshold인 행만 남깁니다.
결론
이 DAX 패턴을 구현함으로써 견고하고 동적이며 이상값에 강인한 KPI를 만들 수 있습니다. 이 측정값은 데이터의 중심 경향에 대한 보다 정확한 그림을 제공하며 사용자가 Power BI 보고서와 상호 작용할 때 자동으로 다시 계산됩니다.