가격대별 판매 대수, 매출액과 평균 가격을 비교한 보고서입니다.
setDerivedFields로 가격 구간을 정의하고 PRICE_RANGE를 행 필드에 놓으십시오. 가중 평균은 판매 대수를 가중치로 사용하는 WEIGHTED_AVG 연산자를 등록하여 계산합니다.
가격대의 min은 포함하고 max는 제외합니다. 기간 또는 지점을 변경하면 기존 필터를 해제하고 선택한 조건을 적용합니다.
// 가중 평균을 이 표에 먼저 등록합니다.
AUIPivot.registerCustomAggregator(myPivotID, {
// 이 항목을 설정에서 참조할 식별자입니다.
id: "WEIGHTED_AVG",
// 저장한 보고서에서 계산 정의를 구분할 버전입니다.
version: 1,
// 화면에서 읽을 표시 이름입니다.
labelText: "대수 가중 평균",
// options는 추가 설정, context는 필드 존재 여부를 확인하는 도구입니다.
validateOptions: function (options, context) {
context.requireField(options.weightField);
},
// 그룹마다 별도의 누적 상태를 만들어 반환합니다. 다른 그룹과 공유하지 않습니다.
create: function () {
return {
weightedSum: 0,
weightSum: 0
};
},
// state는 누적 상태, value는 이번 기록의 값, context는 같은 기록의 다른 필드를 읽는 도구입니다.
accumulate: function (state, value, context) {
const weight = context.getValue(context.options.weightField);
if (typeof value === "number" && Number.isFinite(value) && typeof weight === "number" && Number.isFinite(weight) && weight > 0) {
state.weightedSum += value * weight;
state.weightSum += weight;
}
},
// source에 모인 값을 target에 더합니다. 두 그룹의 상태를 합치는 단계입니다.
merge: function (target, source) {
target.weightedSum += source.weightedSum;
target.weightSum += source.weightSum;
},
// state에 모인 값으로 최종 숫자를 반환합니다. 계산할 수 없으면 null을 반환합니다.
finalize: function (state) {
return state.weightSum ? state.weightedSum / state.weightSum : null;
}
});
AUIPivot.setDerivedFields(myPivotID, [
// 가격대: PRICE 값을 아래 네 구간 중 하나로 분류합니다.
{
dataField: "PRICE_RANGE",
labelText: "가격대",
sourceField: "PRICE", // 분류할 원본 필드
// min은 포함하고 max는 제외합니다. null은 그쪽 경계가 없다는 뜻입니다.
// id는 필터 등에서 사용하는 값이고 labelText는 화면에 보이는 이름입니다.
ranges: [
{ id: "under2m", min: 0, max: 2000000, labelText: "2,000,000 미만" },
{ id: "from2m", min: 2000000, max: 3000000, labelText: "2,000,000~3,000,000 미만" },
{ id: "from3m", min: 3000000, max: 4000000, labelText: "3,000,000~4,000,000 미만" },
{ id: "from4m", min: 4000000, max: null, labelText: "4,000,000 이상" }
],
// 위 구간에 들어가지 않는 값은 기타로 분류합니다.
fallback: { id: "other", labelText: "기타" }
}
]);
// 가격대, 차종 순서로 행을 묶습니다.
AUIPivot.setRowFields(myPivotID, ["PRICE_RANGE", "NAME"]);
// 값 필드와 집계 연산자 지정하기
AUIPivot.setValueFields(myPivotID, [
// 판매 대수
{ dataField: "COUNT", operation: "SUM", customLabelText: "판매 대수", formatString: "#,##0" },
// 매출액
{ dataField: "TOTAL", operation: "SUM", customLabelText: "매출액", formatString: "#,##0" },
// 단순 평균 가격
{ dataField: "PRICE", operation: "AVG", customLabelText: "단순 평균 가격", formatString: "#,##0.00" },
// 대수 가중 평균
{ dataField: "PRICE", operation: "WEIGHTED_AVG", customLabelText: "대수 가중 평균", formatString: "#,##0.00",
aggregatorOptions: {weightField: "COUNT"} },
// 매출 비중
{ dataField: "TOTAL", operation: "GRAND_TOTAL_RATIO", customLabelText: "매출 비중", formatString: "0.00%" }
]);
함께 보기: 사용자 집계, 가중 평균 결과 비교